- 求職 : Linux運維
- 論壇徽章:
- 203
|
!你還不了解MongoDB復(fù)制集?先看這里科普一下
replica-set-read-write-operations-primary.png (28.54 KB, 下載次數(shù): 28)
下載附件
2016-04-01 13:55 上傳
復(fù)制集的成員啟動后,會選舉出一個Primary,Primary需要得到大多數(shù)成員的投票。所有的寫入操作都必須向Primary發(fā)起,通過oplog將寫操作同步到Secondary。
在復(fù)制集運行的過程中,難免會遇到需要重啟節(jié)點的場景,比如復(fù)制集版本升級、節(jié)點維護(hù)等,在重啟節(jié)點的過程中,建議不要直接shutdown Primary,這樣可能導(dǎo)致已經(jīng)寫入primary但未同步到secondary的數(shù)據(jù)丟失,過程類似如下:
shutdown Primary (shutdown會等待Secondary oplog追到10s以內(nèi))
Primary退出后,剩余的節(jié)點選舉出一個新的Primary(復(fù)制集只包含1或2節(jié)點例外)
Primary重新啟動,因為當(dāng)前復(fù)制集已經(jīng)有了新的Primary,這個Primary將以Secondary的角色運行。
從新的Primary同步的過程中,發(fā)現(xiàn)自己有無效的oplog,會先進(jìn)行rollback。(rollback的數(shù)據(jù)只要不超過300M是可以找回的)
如果想不丟數(shù)據(jù)重啟復(fù)制集,更優(yōu)雅的打開方式應(yīng)該是這樣的
逐個重啟復(fù)制集里所有的Secondary節(jié)點
對Primary發(fā)送stepDown命令,等待primary降級為Secondary
重啟降級后的Primary
注意:如果Secondary的同步一直追不上Primary,步驟2可能會失敗,這時應(yīng)該重試步驟2直到stepDown成功;步驟2也可以通過調(diào)用replSetReconfig命令,來調(diào)整節(jié)點優(yōu)先級來實現(xiàn),讓Secondary擁有更高的優(yōu)先級,然后等待Primary降級為Secondary。
從上述分析可以看出,復(fù)制集里Primary、Secondary節(jié)點角色切換是很正常的事情,所以連接復(fù)制集一定不要直連Primary,否則在節(jié)點角色切換時不能正確容錯,服務(wù)高可用無法保證。
另外,要想保證數(shù)據(jù)的高可靠,除了在運維上加強,在開發(fā)層面也可以做些工作,比如重要的數(shù)據(jù)寫入通過WriteConcern: {w: “majority”}
來保證寫入到大多數(shù)節(jié)點才向客戶端確認(rèn)。 |
|