天天看點

MongoDB複制集架構

MongoDB複制集架構

mongodb的複制至少需要兩個節點。其中一個是主節點,負責處理用戶端請求,其餘的都是從節點,負責複制主節點上的資料。

mongodb各個節點常見的搭配方式為:一主一從、一主多從。

主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作,進而保證從節點的資料與主節點一緻。

MongoDB複制結構圖如下所示:

MongoDB複制集架構

副本集特征:

N 個節點的叢集

任何節點可作為主節點

所有寫入操作都在主節點上

自動故障轉移

自動恢複

Replica Set角色

Replica Set 的成員是一堆有着同樣的資料内容 mongod 的執行個體集合,包含以下三類角色:

主節點(Primary)

是 Replica Set 中唯一的接收寫請求的節點,并将寫入指令記錄到 oplog 上。副本節點通過複制 oplog 的寫入指令同步主節點的資料。Secondary。一個 Replica Set 有且隻有Primary 節點,當Primar挂掉後,其他 Secondary 或者 Arbiter 節點會重新選舉出來一個主節點。應用程式的預設讀取請求也是發到 Primary節點處理的。

副本節點(Secondary)

通過複制主節點 oplog 中的指令與主節點保持同樣的資料集,當主節點挂掉的時候,參與主節點選舉。

仲裁者(Arbiter)

不存儲實際應用資料,隻投票參與選取主節點,但不會被選舉成為主節點。

MongoDB複制集架構

複制集架構配置:

架構:

Arbite:127.0.0.1:27017  

primary:127.0.0.1:27018

secondary: 127.0.0.1:27019

配置檔案内容如下,隻要修改logpath、dbpath、pidfilepath和端口即可

arbiter.conf 

primary.conf

secondary.conf

分别啟動這三個執行個體:

初始化:

使用mongodb用戶端登陸兩個正常節點(primary和secondary)中的任何一個,執行如下指令

登陸後執行初始化指令

檢視叢集狀态:

登入127.0.0.1:27019  角色顯示為Secondary

在primary上建立資料,測試secondary上是否會同步

登入secondary,檢視

secondary上插入資料報錯,說明secondary上沒有寫的權限

驗證複制集架構容災功能

kill掉primary的程序,登入127.0.0.1:27019

可以看到127.0.0.1:27018 有一個 "stateStr" : "(not reachable/healthy)"的報錯,而127.0.0.1:27019已經變成了primary角色

MongoDB複制集架構

啟動原來的primary.conf配置的執行個體,角色由原來的primary變成了secondary

其他指令: rs.help()

rs.slaveOk():secondary預設不允許讀寫,執行此指令後,從節點有可讀權限

rs.conf():檢視配置情況

rs.add():新增一個節點到副本集中,注意隻能在primary上操作,secondary角色執行該指令會報錯,例如:

test-set:SECONDARY> rs.add("127.0.0.1:27020")

測試:

登入primary,建立一個third.conf的配置檔案,并啟動執行個體,端口為127.0.0.1:27020

添加新的secondary角色

rs.remove(hostportstr):删除一個secondary節點

編輯修改叢集配置(隻能在primary節點上操作)

登入到MongoDB的primary執行個體

執行cfg=rs.conf()指令,将叢集配置儲存在cfg變量中

檢視叢集第一個成員的配置

修改第一個成員的優先級配置

儲存配置使生效