Replication
當數據中心發生故障時,MongoDB 如何選擇新的主節點?
我很好奇設置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 個成員添加到您的主數據中心。您的備份數據中心將保留兩名成員。
如果備份數據中心宕機,主中心將繼續執行,副本集操作將繼續。
如果主中心出現故障,副本集操作將是只讀的,您將需要執行手動干預。
參考: