天天看點

MongoDB主從複制和副本集

MongoDB有主從複制和副本集兩種主從複制模式,主從複制最大的問題就是無法自動故障轉移,MongoDB副本集解決了主從模式無法自動故障轉義的特點,是以是複制的首選。

對于簡單的主從複制無法自動故障轉移的缺陷,各個資料庫都在改進,MySQL推出的MGR,Redis的哨兵,Mongodb的複制集。

對于主從複制模式:

mongodb的主從配置異常簡單,

如果是非安全認證模式,隻需要在主節點增加master = true,

從節點增加slave = true和source = ip:port兩個節點,分别啟動即可,不管主節點是否存在資料以及存在多少資料,從節點以slave的方式啟動,就會自動同步主節點的資料。

相比MySQL的主從模式(各種原因導緻的主從事務不一緻),簡單的不是一點半點。

MongoDB主從複制和副本集
MongoDB主從複制和副本集

安全認證模式:

關于安全認證模式,糾結了好久,mongodb是這樣的:

1,對于單執行個體的mongodb,(建立使用者之後)開啟安全認證需要增加auth = true配置即可,

2,主從或者副本集模式下,(建立使用者之後)如果要開啟安全認證,必須要加上keyFile(設定可以file之後auth參數才有效),二者必須同時配置,否則(主從or副本集)就不成功。

需要注意的是,如果在主節點建立了使用者,主從節點以開啟安全認證方式啟動,主節點的使用者資訊同樣可以同步到從節點,是以從節點并不需要再重新建立使用者資訊。

副本的初始化:

mongodb的副本在啟動的時候會自動從主節點的oplog中讀取資料,進而完成初始化,這一點非常省心。

當然,可能存在主節點資料超過oplog大小或者說主節點oplog發生了重用(覆寫),那麼就無法通過oplog自動做到主從的同步,此時可以可以:

1,以autoresync = true的方式重新開機副本。

2,删除從節點的資料檔案然後重新啟動從節點。

3,删除從節點的資料檔案,直接copy主節點的資料檔案到從節點(個人認為這種方式更加簡單高效),啟動從節點即可。

三種方式都可以達到完整同步主節點資料的目的。

如下是mongodb slave節點同步資料的模式,來​

MongoDB主從複制和副本集

副本集搭建

由于MongoDB副本會自動從主節點(或者相鄰的最近節點)同步資料,不會出現事務沖突之類錯誤,是以副本集的配置也很簡單,這一點要比MySQL的各種配置簡單太多。

主節點生成keyfile:

openssl rand -base64 100 > /usr/local/mongodb/db/keyfile --檔案内容采base64編碼,一共100個字元

修改檔案權限:

chmod 600 /usr/local/mongodb/db/keyfile

複制改keyfile至各個節點,然後啟動各個節點。

搭建副本集需要移除掉主從複制的一些配置項(主節點的master = true,從節點的slave,source等配置項),如下是一個最簡單的配置項。

MongoDB主從複制和副本集
MongoDB主從複制和副本集

主節點副本集初始化

rs.initiate()

MongoDB主從複制和副本集

(數秒之後)同時發現rstest:SECONDARY>變為rstest:PRIMARY>

MongoDB主從複制和副本集

加入新節點

rs.add("10.104.174.247:9000")

rs.add("10.104.174.247:10000")

MongoDB主從複制和副本集

rs.status() 檢視副本集主從節點的狀态

MongoDB主從複制和副本集

"health" : 1, //1 表明正常; 0 表明異常

"state" : 1, // 1 表明是Primary; 2 表明是Secondary;

"stateStr" : "PRIMARY", //表明此機器是主庫

rs.isMaster()檢視主節點資訊

MongoDB主從複制和副本集

副本集也可以通過定義主機集合的方式

config_rs1={_id:'rs1',members:[

{_id:1,host:'10.104.174.247:8000',priority:1},

{_id:2,host:'10.104.174.247:9000'},

{_id:3,host:'10.104.174.247:1000'}]}

rs.initiate(config_rs1) //初始化配置

繼續閱讀