假設有這樣一個場景,有一個MongoDB的副本集,由于故障導致只剩下兩個節(jié)點可用,而這兩個節(jié)點目前都是slave節(jié)點。其他的故障節(jié)點也無法再重新啟動,即無法重新加入到副本集中。Q:這種情況下是否因為這個副本集就無法使用了?
2 回答

繁花不似錦
TA貢獻1851條經(jīng)驗 獲得超4個贊
這取決于你的副本集總的節(jié)點個數(shù),副本集中可以相互聯(lián)系的節(jié)點數(shù)大于總節(jié)點數(shù)一半時,可以有新的primary節(jié)點被選取出來,副本集可以正常工作,如果可以相互聯(lián)系的節(jié)點小于等于總結點一半,所有節(jié)點都會變?yōu)閟econdary節(jié)點,此時副本集變?yōu)橹蛔x狀態(tài),所有寫操作失敗.
有這個現(xiàn)象的原因是mongodb的副本集不允許出現(xiàn)多個primary節(jié)點,在可以聯(lián)系的節(jié)點數(shù)小于等于總節(jié)點數(shù)一半時,若依然能夠選出primary,便有可能出現(xiàn)多個primary節(jié)點,導致整個副本集數(shù)據(jù)混亂,所有節(jié)點變?yōu)閟econdary,在故障節(jié)點恢復時副本集還可以正常運行.
如果遇到正常節(jié)點不足以選出primary,可以通過幾種途徑解決.
1) 若其他節(jié)點因數(shù)據(jù)損壞不能啟動,像你說的依然有兩個節(jié)點存活,可以停止一個節(jié)點,將硬盤數(shù)據(jù)導出至掛掉的節(jié)點,啟動即可. 2) 若其他節(jié)點因不可恢復原因導致不能啟動,你可以去掉replset選項將此節(jié)點作為單機服務啟動,若要恢復為副本集模式, 可以試一下將一個正常節(jié)點的local相關的數(shù)據(jù)文件刪除,重新以replset啟動,初始化自身之后使用rs.add()添加新節(jié)點, 線上沒有遇到過這種情況,如果實在沒辦法,你可以試一下.
- 2 回答
- 0 關注
- 999 瀏覽
添加回答
舉報
0/150
提交
取消