MongoDB 副本集故障情況描述
阿新 • • 發佈:2020-11-12
副本集有兩種型別三種角色
兩種型別:
- 主節點( Primary)型別:資料操作的主要連線點,可讀寫。
- 次要(輔助、從)節點( Secondaries)型別:資料冗餘備份節點,可以讀或選舉。
三種角色:
- 主要成員(Primary):主要接收所有寫操作。就是主節點。
- 副本成員(Replicate):從主節點通過複製操作以維護相同的資料集,即備份資料,不可寫操作,但可以讀操作(但需要配置)。是預設的一種從節點型別。
- 仲裁者( Arbiter):不保留任何資料的副本,只具有投票選舉作用。當然也可以將仲裁伺服器維護為副本集的一部分,即副本成員同時也可以是仲裁者。也是一種從節點型別。
關於仲裁者的額外說明:
如果您的副本集具有偶數個成員,請新增仲裁者以獲得主要選舉中的“大多數”投票。 仲裁者不需要專用硬體。
仲裁者將永遠是仲裁者,而主要人員可能會退出併成為次要人員,而次要人員可能成為選舉期間的主要人員。
如果你的副本+主節點的個數是偶數,建議加一個仲裁者,形成奇數,容易滿足大多數的投票。
如果你的副本+主節點的個數是奇數,可以不加仲裁者。
情況:一主一副本一仲裁
第一種情況:副本節點故障
主節點和仲裁節點對副本節點的心跳失敗。因為主節點還在,因此,沒有觸發投票選舉。
如果此時,在主節點寫入資料。再啟動從節點,會發現,主節點寫入的資料,會自動同步給從節點。
此時:不影響正常使用
第二種情況:主節點故障
從節點和仲裁節點對主節點的心跳失敗,當失敗超過10秒,此時因為沒有主節點了,會自動發起投票。
而副本節點只有一臺,因此,候選人只有一個就是副本節點,開始投票。
仲裁節點向副本節點投了一票,副本節點本身自帶一票,因此共兩票,超過了“大多數”
27019是仲裁節點,沒有選舉權,27018不向其投票,其票數是0.
最終結果,27018成為主節點。具備讀寫功能。
再啟動 27017主節點,發現27017變成了從節點,27018仍保持主節點。
登入27017節點,發現是從節點了,資料自動從27018同步。
此時:不影響正常使用
第三種情況:仲裁節點故障
主節點和副本節點對仲裁節點的心跳失敗。因為主節點還在,因此,沒有觸發投票選舉。
此時:不影響正常使用
第四種情況:仲裁節點和主節點故障
副本集中沒有主節點了,導致此時,副本集是隻讀狀態,無法寫入。
因為27017的票數,沒有獲得大多數,即沒有大於等於2,它只有預設的一票(優先順序是1)
如果要觸發選舉,隨便加入一個成員即可。
- 如果只加入 27019仲裁節點成員,則主節點一定是27017,因為沒得選了,仲裁節點不參與選舉,但參與投票。
- 如果只加入 27018節點,會發起選舉。因為27017和27018都是兩票,則按照誰資料新,誰當主節點。
此時:影響正常使用,需要處理
第五種情況:仲裁節點和從節點故障
10秒後,27017主節點自動降級為副本節點。(服務降級)
副本集不可寫資料了,已經故障了。
此時:影響正常使用,需要處理
第六種情況:主節點和從節點故障
此時:影響正常使用,需要處理