MongoDB複製選舉原理及複製集管理

來源:互聯網
上載者:User

標籤: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複製選舉原理及複製集管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.