Replication

當數據中心發生故障時,MongoDB 如何選擇新的主節點?

  • January 19, 2017

我很好奇設置MongoDB集群時出現以下情況。

2 個數據中心,每個數據中心有 2 個節點,共 4 個節點的副本集。兩個數據中心之一因任何原因變得不可用,從而使主數據中心和一個輔助數據中心停電。

根據https://docs.mongodb.com/manual/core/replica-set-architectures/的容錯部分:我需要至少 3 票才能選出一個新的主節點,但只有 2 個倖存的選民。

我無法擴展到第三個數據中心。

如何設置集群以承受數據中心故障並繼續在倖存的數據中心中寫入?

在這種情況下,需要從剩餘節點的伺服器配置中刪除失去節點的投票能力。這將有效集群大小縮小到 2,其中優先級系統可以創建仲裁併選舉主節點。

例子:

#Note: members[0],[1] are in datacenter1, members[2],[3] are in datacenter2. 
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[1].priority = 0
cfg.members[0].votes = 0
cfg.members[1].votes = 0
rs.reconfig(cfg)
#Now members[2] is elected primary.

不幸的是,這需要在數據中心發生故障時進行人工干預,才能將服務恢復到依賴於寫入該數據庫的任何事物上。在失去的節點恢復服務並恢復後,還需要人工干預才能將集群恢復到啟動狀態(以恢復它們的投票權限)。

您需要第三個數據中心中的另一個副本集成員(或仲裁器)。但是,如果您無法擴展到第三個中心,則將副本集的第 5 個成員添加到您的主數據中心。您的備份數據中心將保留兩名成員。

如果備份數據中心宕機,主中心將繼續執行,副本集操作將繼續。

如果主中心出現故障,副本集操作將是只讀的,您將需要執行手動干預。

參考:

部署地理冗餘副本集

分佈在兩個或多個數據中心的副本集

引用自:https://dba.stackexchange.com/questions/161499