1. 程式人生 > 資料庫 >MongoDB 副本集故障情況描述

MongoDB 副本集故障情況描述

副本集有兩種型別三種角色
兩種型別:

  • 主節點( Primary)型別:資料操作的主要連線點,可讀寫。
  • 次要(輔助、從)節點( Secondaries)型別:資料冗餘備份節點,可以讀或選舉。

三種角色:

  • 主要成員(Primary):主要接收所有寫操作。就是主節點。
  • 副本成員(Replicate):從主節點通過複製操作以維護相同的資料集,即備份資料,不可寫操作,但可以讀操作(但需要配置)。是預設的一種從節點型別。
  • 仲裁者( Arbiter):不保留任何資料的副本,只具有投票選舉作用。當然也可以將仲裁伺服器維護為副本集的一部分,即副本成員同時也可以是仲裁者。也是一種從節點型別。

關於仲裁者的額外說明:

您可以將額外的mongod例項新增到副本集作為仲裁者。 仲裁者不維護資料集。 仲裁者的目的是通過響應其他副本整合員的心跳和選舉請求來維護副本集中的仲裁。 因為它們不儲存資料集,所以仲裁器可以是提供副本集仲裁功能的好方法,其資源成本比具有資料集的全功能副本整合員更便宜。
如果您的副本集具有偶數個成員,請新增仲裁者以獲得主要選舉中的“大多數”投票。 仲裁者不需要專用硬體。
仲裁者將永遠是仲裁者,而主要人員可能會退出併成為次要人員,而次要人員可能成為選舉期間的主要人員。
如果你的副本+主節點的個數是偶數,建議加一個仲裁者,形成奇數,容易滿足大多數的投票。
如果你的副本+主節點的個數是奇數,可以不加仲裁者。

情況:一主一副本一仲裁

第一種情況:副本節點故障

主節點和仲裁節點對副本節點的心跳失敗。因為主節點還在,因此,沒有觸發投票選舉。
如果此時,在主節點寫入資料。再啟動從節點,會發現,主節點寫入的資料,會自動同步給從節點。

此時:不影響正常使用

第二種情況:主節點故障

從節點和仲裁節點對主節點的心跳失敗,當失敗超過10秒,此時因為沒有主節點了,會自動發起投票。
而副本節點只有一臺,因此,候選人只有一個就是副本節點,開始投票。
仲裁節點向副本節點投了一票,副本節點本身自帶一票,因此共兩票,超過了“大多數”
27019是仲裁節點,沒有選舉權,27018不向其投票,其票數是0.
最終結果,27018成為主節點。具備讀寫功能。

再啟動 27017主節點,發現27017變成了從節點,27018仍保持主節點。
登入27017節點,發現是從節點了,資料自動從27018同步。

此時:不影響正常使用

第三種情況:仲裁節點故障

主節點和副本節點對仲裁節點的心跳失敗。因為主節點還在,因此,沒有觸發投票選舉。

此時:不影響正常使用

第四種情況:仲裁節點和主節點故障

副本集中沒有主節點了,導致此時,副本集是隻讀狀態,無法寫入。

因為27017的票數,沒有獲得大多數,即沒有大於等於2,它只有預設的一票(優先順序是1)
如果要觸發選舉,隨便加入一個成員即可。

  • 如果只加入 27019仲裁節點成員,則主節點一定是27017,因為沒得選了,仲裁節點不參與選舉,但參與投票。
  • 如果只加入 27018節點,會發起選舉。因為27017和27018都是兩票,則按照誰資料新,誰當主節點。

此時:影響正常使用,需要處理

第五種情況:仲裁節點和從節點故障

10秒後,27017主節點自動降級為副本節點。(服務降級)
副本集不可寫資料了,已經故障了。

此時:影響正常使用,需要處理

第六種情況:主節點和從節點故障

此時:影響正常使用,需要處理