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

來源:互聯網
上載者:User

標籤:技術   備份   c中   pwd   部分   登出   RoCE   code   dip   

MongoDB複製集的選舉原理MongoDB複製的原理

MongoDB的複製是基於動作記錄oplog,相當於MySQL中的二進位日誌,只記錄發生改變的記錄。複製是將主節點的oplog日誌同步並應用到其他從節點的過程。

MongoDB選舉的原理

MongoDB的節點分為三種類型,分別為標準節點(host)、被動節點(passive)和仲裁節點(arbiter)

  • 只有標準節點才有可能被選舉為活躍節點(主節點),擁有選舉權。被動節點有完整副本,不可能成為活躍節點,具有選舉權。仲裁節點不複製資料,不可能成為活躍節點,只有選舉權。說白了就是只有標準節點才有可能被選舉為主節點,即使在一個複製集中說有的標準節點都宕機,被動節點和仲裁節點也不會成為主節點。後續有樣本示範驗證。
  • 標準節點與被動節點的區別:priority值高者是標準節點,低者則為被動節點
  • 選舉規則是票數高的獲勝,priority是優先權0~1000的值,相當於額外增加0~1000的票數。選舉結果:票數高者獲勝;若票數相同,資料新者獲勝。

MongoDB複製集節點間選舉所示

前文連結
Yum安裝MongoDB及資料庫管理
配置MongoDB複製集

樣本驗證複製集選舉原理建立4個執行個體建立新執行個體的path檔案和dbpath的檔案目錄,並為記錄檔設定許可權
mkdir -p /data/mongodb/logs//  path目錄,因為在安裝完成之後就會有一個執行個體,所以這裡我們只需要建立三個執行個體即可mkdir -p /data/mongodb/mongo{2,3,4}           //建立dbpath目錄touch /data/mongodb/logs/mongod{2,3,4}.log    //建立記錄檔chmod 777 /data/mongodb/logs/*.log            //為記錄檔賦予許可權
修改設定檔(/etc/mongod.conf)
path:dbPath:  port:  bindIp:replication:  replSetName:      //修改設定檔中這五個項目的值

關閉防火牆及selinux防火牆
systemctl disable firewalld.servicesystemctl stop firewalld.servicesetenforce 0
啟動執行個體
mongod -f /etc/mongod.conf
配置複製集建立有四個節點群組成的複製集,建立時設定優先權

本次複製集由四個節點群組成,分別包括兩個標準節點,一個被動節點,一個仲裁節點。

mongo //=進入資料庫chen={"_id":"chenrs","members":[{"_id":0,"host":"172.16.10.29:27017","priority":100},{"_id":1,"host":"172.16.10.29:27018","priority":100},{"_id":2,"host":"172.16.10.29:27019","priority":0},{"_id":3,"host":"172.16.10.29:27020","arbiterOnly":true}]}

初始化複製集
rs.initiate(chen)
查看各節點的的身份
rs.isMaster()

查看oplpog日誌

此時對資料庫進行一些增刪改查的操作,注意在oplog日誌中不會記錄查詢的語句,只會記錄對資料庫變更的語句

use stady                                      //使用stady庫db.abc.insert({"id":1,"name":"zhangsan"})      //向表abc中寫入一條資料db.abc.insert({"id":2,"name":"lisi"})          //再次插入一條資料db.abc.find()                                  //查看錶中內容db.abc.update({"id":2},{$set:{"name":"jack"}}) //修改表資料db.abc.remove({"id":1}                         //刪除表資料
查看oplog中內容
use localshow collections    //可以看到其中有一個oplog.rs檔案db.oplog.rs.find()  //由於內容過多,在這裡就不展示,查看之後就會發現,沒有記錄查詢的記錄,只有記錄對資料庫做更改的操作
類比主節點故障關閉主節點
kill -9 + 進程號                         //關閉主節點mongod -f /etc/mongod4.conf --shutdown   //關閉主節點mongo --port 27018chenrs:PRIMARY> rs.status()      //此時該節點已經成為主節點{    "set" : "chenrs",    "date" : ISODate("2018-07-16T05:30:04.152Z"),    "myState" : 1,        ···省略部分內容    "members" : [            "_id" : 0,            "name" : "172.16.10.29:27017",            "health" : 0,                 //健康值為0,處於非活躍狀態            "state" : 8,            "stateStr" : "(not reachable/healthy)",        ···省略部分內容            "_id" : 1,            "name" : "172.16.10.29:27018",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",    //此時1為主節點        ···省略部分內容               "_id" : 2,            "name" : "172.16.10.29:27019",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",        ···省略部分內容            "_id" : 3,            "name" : "172.16.10.29:27020",            "health" : 1,            "state" : 7,            "stateStr" : "ARBITER",        ···省略部分內容        ]
類比另外一個主節點故障
mongod -f /etc/mongod2.conf --shutdownmongo --port 27019chenrs:SECONDARY> rs.status()     //仍處於secondary狀態{    "set" : "chenrs",    "date" : ISODate("2018-07-16T05:40:09.740Z"),    "members" : [        {            "_id" : 0,            "name" : "172.16.10.29:27017",            "health" : 0,            "state" : 8,            "stateStr" : "(not reachable/healthy)",            ···省略部分內容            "_id" : 1,            "name" : "172.16.10.29:27018",            "health" : 0,            "state" : 8,            "stateStr" : "(not reachable/healthy)",        ···省略部分內容            "_id" : 2,            "name" : "172.16.10.29:27019",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",          //即使兩個標準節點都處於宕機狀態,被動節點和仲裁節點也沒有成為主節點        ···省略部分內容            "_id" : 3,            "name" : "172.16.10.29:27020",            "health" : 1,            "state" : 7,            "stateStr" : "ARBITER",        ]        ···省略部分內容
MongoDB複製集管理配置允許在從節點讀取資料

預設MongoDB複製集的從節點是不能讀取資料的,但是可以使用密令來允許能夠在從節點讀取資料

rs.slaveOk()    //允許從節點能夠讀取資料
查看複製集狀態資訊
rs.help rs.printReplicationInfo()        //查看oplog記錄檔的大小及時間範圍rs.printSlaveReplicationInfo()   //查詢節點及節點複製的時間

調整oplog記錄檔大小

如果節點屬於複製整合員,此時你想要修改oplog的大小是不被允許的,所以要將節點移出複製集想要修改記錄檔的預設大小。此時要做的是首先要關閉節點的服務,然後退出複製集

關閉節點服務(屬於離線升級)
use admin            //在複製集的從節點上做db.shutdownServer()  //關閉服務,此時再想登陸該節點則會失敗
節點退出複製集

登出掉replication的值和修改port值,將其作為單一實例啟動

vim /etc/mongod2.conf#replication:#  replSetName: chenrsport: 27028mongod -f /etc/mongod2.conf   //啟動執行個體,此時該執行個體不屬於複製集
完全備份oplog日誌
mongodump --port 27028 --db local --collection ‘oplog.rs‘   //在linux介面操作
刪除節點中oplog檔案
> use local> db.oplog.rs.drop()
重建oplog日誌
db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
再次關閉節點服務
use admindb.shutdownServer() 
將節點加入到複製集

回調參數,同時要加一個參數指定記錄檔大小

vim /etc/mongod2.confreplication:  replSetName: chenrs  oplogSizeMB: 2048    //單位為兆mongod -f /etc/mongod2.conf      //啟動執行個體mongo -port 27018                //進入執行個體

查看oplog大小
rs.printReplicationInfo()

對於記錄檔大小的更改,只對該節點生效,其他節點仍然是預設值

部署認證複製建立系統管理使用者
use admindb.createUser({"user":"root","pwd":"123123","roles":["root"]})

配置密鑰驗證

為了使其他的節點還能夠和主節點進行同步,建立密鑰檔案使其他節點能夠同步

  • 建立驗證檔案
    # cd /usr/bin/# echo "chenrs key"> chenrskey1# echo "chenrs key"> chenrskey2# echo "chenrs key"> chenrskey3# echo "chenrs key"> chenrskey4    //金鑰產製原料自訂,但是要保證內容的一致性# chmod 600 chenrskey{1..4}        //設定檔案許可權,不設定在接下來的啟動中會報錯
  • 修改設定檔,開啟mongodb的安全驗證功能(四個設定檔都要修改,注意內容差異)
    vim /etc/mongod.confsecurity:keyFile: /usr/bin/chenrskey1     //每個節點的驗證檔案不同,要根據不同的節點修改clusterAuthMode: keyFile        //認證類型,密鑰檔案認證

  • 重啟服務
    mongod -f /etc/mongod.conf --shutdownmongod -f /etc/mongod.conf              /其他幾台的重啟方式都相同,重複操作即可
    身分識別驗證登陸(先驗證主,再驗證從)

    當你直接使用登陸命令登陸系統時,使用show dbs 是不能夠查看資料的,此時就需要使用身分識別驗證

    mongo --port 27018use admindb.auth("root","123123")

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.