日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB复制选举原理及复制集管理

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB复制选举原理及复制集管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、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 collectionsoplog.rs //顯示kgcrs:PRIMARY> db.oplog.rs.find()

3.模擬主節點故障

如果主節點出現故障,另一個標準節點將會選舉成為新的主節點。

[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown killing process with pid: 6653 [root@localhost ~]# mongo --port 27018 kgcrs:PRIMARY> rs.status()

4.模擬所有標準節點都出現故障

如果所有標準節點都出現故障,被動節點也不能成為主節點。

[root@localhost ~]# mongod -f /etc/mongod2.conf --shutdown killing process with pid: 6685 [root@localhost ~]# mongo --port 27019 kgcrs:SECONDARY> rs.status()

二、MongoDB復制集管理

復制集管理包括配置從節點可以讀取數據、查看復制集狀態信息、更改oplog大小、配置帶認證的復制集。

1.配置允許在從節點讀取數據。

默認MongoDB復制集的從節點不能讀取數據,可以使用rs.slaveOk()命令允許能夠在從節點讀取數據。

重新啟動兩個標準節點,連接到復制集的其中一個從節點,配置其允許讀取數據。

mongod -f /etc/mongod.conf mongod -f /etc/mongod2.conf [root@localhost ~]# mongo --port 27018 kgcrs: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: 990MB log 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:27018syncedTo: Tue Jul 17 2018 15:26:11 GMT+0800 (CST)-10 secs (0 hrs) behind the primary source: 192.168.113.177:27019syncedTo: 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 admin kgcrs:SECONDARY> db.shutdownServer()

在配置文件注銷replication:相關啟動參數,并修改port端口號27028

vim /etc/mongod2.conf# replication: # replSetName: kgcrsport: 27028:

以單實例啟動27028節點

[root@localhost ~]# mongod -f /etc/mongod2.conf about to fork child process, waiting until server is ready for connections. forked process: 9954 child process started successfully, parent exiting

(2)創建新的oplog記錄,配置其大小

全備當前節點的所有oplog記錄

[root@localhost ~]# 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集合。

[root@localhost ~]# 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.confport: 27018 //端口號重新改回27018 replication:replSetName: kgcrsoplogSizeMB: 2048 //oplog的大小2048M

重新啟動27018實例,并進入實例

[root@localhost ~]# mongod -f /etc/mongod2.conf about to fork child process, waiting until server is ready for connections. forked process: 10295 child process started successfully, parent exiting [root@localhost ~]# mongo --port 27018 kgcrs:SECONDARY>

要使實例27018變成主節點,需要將主節點27017退出選舉。

[root@localhost ~]# mongo kgcrs:PRIMARY> rs.stepDown() //有效產生選舉 kgcrs:SECONDARY> [root@localhost ~]# mongo --port 27018 kgcrs:PRIMARY>

4.部署認證的復制

(1)在主節點創建用戶認證

kgcrs:PRIMARY> use admin kgcrs:PRIMARY> db.createUser({"user":"root","pwd":"123","roles":["root"]})

(2)編輯4個配置文件去設置密鑰文件

vim /etc/mongod.confsecurity:keyFile: /usr/bin/kgcrskey1clusterAuthMode: keyFile vim /etc/mongod2.conf vim /etc/mongod3.conf vim /etc/mongod4.conf

(3)生成4個實例的密鑰文件,并設置權限

[root@localhost ~]# cd /usr/bin/[root@localhost bin]# echo "kgcrs key"> kgcrskey1 [root@localhost bin]# echo "kgcrs key"> kgcrskey2 [root@localhost bin]# echo "kgcrs key"> kgcrskey3 [root@localhost bin]# echo "kgcrs key"> kgcrskey4 [root@localhost bin]# chmod 600 kgcrskey{1..4}

(4)依次重啟4個實例

mongod -f /etc/mongod.conf --shutdown mongod -f /etc/mongod.conf mongod -f /etc/mongod2.conf --shutdown mongod -f /etc/mongod2.conf mongod -f /etc/mongod3.conf --shutdown mongod -f /etc/mongod3.conf mongod -f /etc/mongod4.conf --shutdown mongod -f /etc/mongod4.conf

(5)進入主節點查看數據庫和復制集

kgcrs:PRIMARY> show dbs kgcrs:PRIMARY> rs.status()

沒有進行身份登錄驗證,直接查看,結果如下:

kgcrs:PRIMARY> use admin #身份登錄驗證 kgcrs:PRIMARY> db.auth("root","123")

進行身份登錄后,查看,結果如下:

轉載于:https://blog.51cto.com/11134648/2146036

總結

以上是生活随笔為你收集整理的MongoDB复制选举原理及复制集管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。