MongoDB實戰系列之三:MongoDB的主從部署

主從同步:

md01    10.0.0.11        master
md02    10.0.0.12        slave
md03    10.0.0.14        slave

#建立數據庫目錄

  1. mkdir -p /elain/apps/mongodb/ 
  2. mkdir -p /elain/data/mongodb/db/ 
  3. mkdir -p /elain/logs/mongodb/ 

注:  
1、不需要像mysql一樣複製完整數據過去,叢庫啓動會制動複製主庫完整數據。
2、叢庫自動配置爲只讀。
3、mongodb第一次啓動時間較長,需要注意等待。
4、管理命令多數都要在admin庫中執行 use admin

相關參數:./mongod --help
--autoresync 當發現從服務器的數據不是最新時,開始從主服務器請求同步數據
--slavedelay 同步延遲,單位:秒

主-從
作爲主服務器啓動

  1. /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log 

作爲從服務器啓動,並指明主服務器地址。--autoresync爲強制從主服務器同步全部數據

  1. /elain/apps/mongodb/bin/mongod --fork --slave --source 10.0.0.11:27001 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log  

注:可以在啓動從時加以下常用參數
--slavedelay 10      #延時複製 單位爲秒
--autoresync         #自動重新同步
--only               #複製指定的數據庫,默認複製所有的庫
--oplogSize          #主節點的oplog日誌大小,單位爲M,建議設大點(更改oplog大小時,只需停主庫,刪除local.*,然後加--oplogSize=* 重新啓動即可,*代表大小)

如果發現主從不同步,從上手動同步

  1. db.runCommand({"resync":1}) 

狀態查詢

  1. db.runCommand({"isMaster":1})  

#主還是從

在叢庫上查詢主庫地址

  1. > use local; 
  2. switched to db local 
  3. > db.sources.find(); 
  4. { "_id" : ObjectId("4e9105515d704346c8796407"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318155992000, "i" : 1 } } 

#查看各Collection狀態

  1. db.printCollectionStats(); 

#查看主從複製狀態

  1. db.printReplicationInfo(); 

測試主從
在主服務器新建數據庫

  1. mongo --port 27001 
  2. >show dbs 
  3. >use elaindb 
  4. >db.blog.save({title:"new article"}) 

在從服務器上查看同步數據

  1. mongo --port 27001 

#在從庫插入數據的操作 會提示 not master

  1. > use elaindb; 
  2. switched to db elaindb 
  3. > db.blog.find(); 
  4. { "_id" : ObjectId("4e9174b48443c8ef12b30c56"), "title" : "new article" } 

#查看主從同步信息:

  1. > db.printReplicationInfo(); 
  2. this is a slave, printing slave replication info. 
  3. source:   10.0.0.11:27001 
  4.          syncedTo: Sun Oct 09 2011 18:37:12 GMT+0800 (CST) 
  5.                  = 19 secs ago (0.01hrs) 
  1. >db.printSlaveReplicationInfo(); 

#此爲同步過來的數據,測試成功

附加:

添加及刪除源:
啓動從節點時可以用--source指定主節點,也可以在shell中配置這個源,

啓動一個從,端口爲27002

  1. /elain/apps/mongodb/bin/mongod --fork --slave  --port 27002 --dbpath /elain/data/mongodb/testdb --logpath /elain/logs/mongodb/mongodb.log 

登錄:

  1. mongo --port 27002 
  2.  
  3. [root@md03 ~]# mongo --port 27002 
  4. MongoDB shell version: 2.0.0 
  5. connecting to: 127.0.0.1:27002/test 
  6. > show dbs 
  7. local   (empty) 

添加到從節點上

  1. >use local 
  2. >db.sources.insert({"host": "10.0.0.11:27001"}); 

#查看顯示正在同步

  1. > db.sources.find(); 
  2. { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 246 }, "dbsNextPass" : { "testdb" : true, "testdb1" : true } } 

#同步完成後

  1. > db.sources.find(); 
  2. { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 256 } } 

更改源:(假設10.0.0.12也爲主庫)

  1. db.sources.insert({"host": "10.0.0.12:27001"}); 
  2. db.sources.remove({"host": "10.0.0.11:27001"}); 

若複製中使用了認證,需在local庫中添加repl用戶來複制

  1. >user local; 
  2. > db.addUser("repl", "elain123"); 


附錄一、Slave 頂替 Master
如果主服務器 10.0.0.11 宕機了,
此時需要用 10.0.0.12 機器來頂替 master 服務,

步驟如下:
#停止 10.0.0.12 進程(mongod)

  1. kill -2 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'` 

#刪除 10.0.0.12 數據目錄中的 local.*

  1. rm -rf /elain/data/mongodb/db/local.* 

#以--master 模式啓動 10.0.0.12

  1. /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log 

附錄二、切換 Master/Slave 角色
切換主庫10.0.0.11和從庫10.0.0.12的角色

步驟如下:(命令略)

用 fsync 命令暫停 主庫 上的寫操作,
關閉 從庫 上的服務
清空 從庫 上的 local.*文件
用-master 選項重啓 從庫 服務
在 從庫 上執行一次寫操作,初始化 oplog,獲得一個同步起始點
關閉 從庫 服務,此時 從庫 已經有了新的 local.*文件
關閉 主庫 服務,並且用 從庫 上新的 local.*文件來代替 主庫 上的 local.*文件(建議先壓縮再COPY)
用-master 選項重啓 從庫 服務
在啓動slave的選項上加一個-fastsync 選項來重啓 主庫 服務
 

轉載請註明: 轉載自http://www.elain.org

本文鏈接地址:MongoDB實戰系列之三:MongoDB的主從部署

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章