標籤:syn 串連 日誌 type bin end vim ber .com
一、MongoDB複製集的選舉原理
複製是基於動作記錄oplog,相當於MySQL中的二進位日誌,只記錄發生改變的記錄。複製是將主節點的oplog日誌同步應用到其他從節點的過程。
複製集的節點是通過選舉產生的。節點類型分為標準節點、被動節點和仲裁節點。
(1)只有標準節點可能被選舉為活躍節點,有選舉權。被動節點有完整副本,不可能成為活躍節點,有選舉權。仲裁節點不複製資料,不可能成為活躍節點,只有選舉權。
(2)priority值高者是標準節點,低者則為被動節點。
1.配置複製集的優先順序
配置4個節點的複製集,設定兩個標準節點,一個被動節點和一個仲裁節點。
> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.177:27017","priority":100},{"_id":1,"host":"192.168.113.177:27018","priority":100},{"_id":2,"host":"192.168.113.177:27019","priority":0},{"_id":3,"host":"192.168.113.177:27020","arbiterOnly":true}]}> rs.initiate(cfg) //啟動複製集kgcrs:PRIMARY> rs.isMaster() //查看節點狀態
2.在主節點上對資料進行操作,查詢oplog日誌
kgcrs:PRIMARY> use kgckgcrs:PRIMARY> db.t1.insert({"id":1,"name":"tom"})kgcrs:PRIMARY> db.t1.insert({"id":2,"name":"jerry"})kgcrs:PRIMARY> db.t1.find()kgcrs:PRIMARY> db.t1.update({"id":2},{$set:{"name":"jack"}})kgcrs:PRIMARY> db.t1.remove({"id":1})
在MongoDB的local資料庫中可以查看oplog日誌。
kgcrs:PRIMARY> use localkgcrs:PRIMARY> show collections oplog.rs //顯示kgcrs:PRIMARY> db.oplog.rs.find()
3.類比主節點故障
如果主節點出現故障,另一個標準節點將會選舉成為新的主節點。
[[email protected] ~]# mongod -f /etc/mongod.conf --shutdownkilling process with pid: 6653[[email protected] ~]# mongo --port 27018kgcrs:PRIMARY> rs.status()
4.類比所有標準節點都出現故障
如果所有標準節點都出現故障,被動節點也不能成為主節點。
[[email protected] ~]# mongod -f /etc/mongod2.conf --shutdownkilling process with pid: 6685[[email protected] ~]# mongo --port 27019kgcrs:SECONDARY> rs.status()
二、MongoDB複製集管理
複製集管理組件括配置從節點可以讀取資料、查看複製集狀態資訊、更改oplog大小、配置帶認證的複製集。
1.配置允許在從節點讀取資料。
預設MongoDB複製集的從節點不能讀取資料,可以使用rs.slaveOk()命令允許能夠在從節點讀取資料。
重新啟動兩個標準節點,串連到複製集的其中一個從節點,配置其允許讀取資料。
mongod -f /etc/mongod.conf mongod -f /etc/mongod2.conf
[[email protected] ~]# mongo --port 27018kgcrs:SECONDARY> show dbs
kgcrs:SECONDARY> rs.slaveOk()kgcrs:SECONDARY> show dbs
2.查看複製狀態資訊
可以使用rs.printReplicationInfo()和rs.printSlaveReplicationInfo()命令來查看複製集狀態。
kgcrs:SECONDARY> rs.help()kgcrs:SECONDARY> rs.printReplicationInfo()configured oplog size: 990MBlog length start to end: 2974secs (0.83hrs)oplog first event time: Tue Jul 17 2018 14:36:27 GMT+0800 (CST)oplog last event time: Tue Jul 17 2018 15:26:01 GMT+0800 (CST)now: Tue Jul 17 2018 15:26:02 GMT+0800 (CST)kgcrs:SECONDARY> rs.printSlaveReplicationInfo()source: 192.168.113.177:27018 syncedTo: Tue Jul 17 2018 15:26:11 GMT+0800 (CST) -10 secs (0 hrs) behind the primary source: 192.168.113.177:27019 syncedTo: Tue Jul 17 2018 15:26:01 GMT+0800 (CST) 0 secs (0 hrs) behind the primary kgcrs:SECONDARY>
3.更改oplog大小
以修改從節點27018的oplog大小為例。
(1)先退出複製集,以單一實例啟動
kgcrs:SECONDARY> use adminkgcrs:SECONDARY> db.shutdownServer()
在設定檔登出replication:相關啟動參數,並修改port連接埠號碼27028
vim /etc/mongod2.conf # replication: # replSetName: kgcrs port: 27028:
以單一實例啟動27028節點
[[email protected] ~]# mongod -f /etc/mongod2.confabout to fork child process, waiting until server is ready for connections.forked process: 9954child process started successfully, parent exiting
(2)建立新的oplog記錄,配置其大小
全備當前節點的所有oplog記錄
[[email protected] ~]# mongodump --port 27028 --db local --collection ‘oplog.rs‘2018-07-17T15:54:20.600+0800 writing local.oplog.rs to 2018-07-17T15:54:20.604+0800 done dumping local.oplog.rs (364 documents)
進入執行個體27028,建立新的oplog集合。
[[email protected] ~]# mongo --port 27028> use local> db.oplog.rs.drop()> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
重新把單一實例27028加入複製集,修改設定檔
> use admin > db.shutdownServer() //關掉服務vim /etc/mongod2.conf port: 27018 //連接埠號碼重新改回27018replication: replSetName: kgcrs oplogSizeMB: 2048 //oplog的大小2048M
重新啟動27018執行個體,並進入執行個體
[[email protected] ~]# mongod -f /etc/mongod2.confabout to fork child process, waiting until server is ready for connections.forked process: 10295child process started successfully, parent exiting[[email protected] ~]# mongo --port 27018kgcrs:SECONDARY>
要使執行個體27018變成主節點,需要將主節點27017退出選舉。
[[email protected] ~]# mongokgcrs:PRIMARY> rs.stepDown() //有效產生選舉kgcrs:SECONDARY>
[[email protected] ~]# mongo --port 27018kgcrs:PRIMARY>
4.部署認證的複製
(1)在主節點建立使用者認證
kgcrs:PRIMARY> use adminkgcrs:PRIMARY> db.createUser({"user":"root","pwd":"123","roles":["root"]})
(2)編輯4個設定檔去設定密鑰檔案
vim /etc/mongod.confsecurity: keyFile: /usr/bin/kgcrskey1 clusterAuthMode: keyFile
vim /etc/mongod2.confvim /etc/mongod3.confvim /etc/mongod4.conf
(3)產生4個執行個體的密鑰檔案,並設定許可權
[[email protected] ~]# cd /usr/bin/[[email protected] bin]# echo "kgcrs key"> kgcrskey1[[email protected] bin]# echo "kgcrs key"> kgcrskey2[[email protected] bin]# echo "kgcrs key"> kgcrskey3[[email protected] bin]# echo "kgcrs key"> kgcrskey4[[email protected] bin]# chmod 600 kgcrskey{1..4}
(4)依次重啟4個執行個體
mongod -f /etc/mongod.conf --shutdownmongod -f /etc/mongod.conf mongod -f /etc/mongod2.conf --shutdownmongod -f /etc/mongod2.conf mongod -f /etc/mongod3.conf --shutdownmongod -f /etc/mongod3.conf mongod -f /etc/mongod4.conf --shutdownmongod -f /etc/mongod4.conf
(5)進入主節點查看資料庫和複製集
kgcrs:PRIMARY> show dbs kgcrs:PRIMARY> rs.status()
沒有進行身份登入驗證,直接查看,結果如下:
kgcrs:PRIMARY> use admin #身份登入驗證kgcrs:PRIMARY> db.auth("root","123")
進行身份登入後,查看,結果如下:
MongoDB複製選舉原理及複製集管理