MongoDB複制集架構
mongodb的複制至少需要兩個節點。其中一個是主節點,負責處理用戶端請求,其餘的都是從節點,負責複制主節點上的資料。
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作,進而保證從節點的資料與主節點一緻。
MongoDB複制結構圖如下所示:

副本集特征:
N 個節點的叢集
任何節點可作為主節點
所有寫入操作都在主節點上
自動故障轉移
自動恢複
Replica Set角色
Replica Set 的成員是一堆有着同樣的資料内容 mongod 的執行個體集合,包含以下三類角色:
主節點(Primary)
是 Replica Set 中唯一的接收寫請求的節點,并将寫入指令記錄到 oplog 上。副本節點通過複制 oplog 的寫入指令同步主節點的資料。Secondary。一個 Replica Set 有且隻有Primary 節點,當Primar挂掉後,其他 Secondary 或者 Arbiter 節點會重新選舉出來一個主節點。應用程式的預設讀取請求也是發到 Primary節點處理的。
副本節點(Secondary)
通過複制主節點 oplog 中的指令與主節點保持同樣的資料集,當主節點挂掉的時候,參與主節點選舉。
仲裁者(Arbiter)
不存儲實際應用資料,隻投票參與選取主節點,但不會被選舉成為主節點。
複制集架構配置:
架構:
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角色
啟動原來的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變量中
檢視叢集第一個成員的配置
修改第一個成員的優先級配置
儲存配置使生效