斷開連接的主副本集添加回副本集
我正在尋找一些關於如何處理與網路斷開連接的主副本集(例如數據中心網路中斷)的建議,以便我們將其中一個輔助副本提升為主副本以使用數據庫恢復應用程序的服務.
在網路重新連接之前,我們是否應該殺死在盒子上執行的 mongodb 以允許重新添加作為輔助?還是主要從其設置的更改模式斷開連接?
如果我們允許 mongodb 伺服器回到網路上,並且 mongodb 作為主伺服器執行,儘管在重新連接之前是隔離的,會發生什麼?
抱歉,如果在我嘗試查找的其他地方的文件中回答了這個問題,但我可能沒有在尋找正確的術語。
我正在尋找一些關於如何處理與網路斷開連接的主副本集(例如數據中心網路中斷)的建議,以便我們將其中一個輔助副本提升為主副本以使用數據庫恢復應用程序的服務.
自動故障轉移是 MongoDB副本集設計的固有特性之一,因此您不必手動故障轉移到輔助伺服器,除非您有意更改了預設配置。兩者
primary
和secondary
都是副本集中的成員狀態(或角色),並且旨在與通常需要手動干預以進行故障轉移的主/從拓撲不同。如果 MongoDB 副本集的大多數已配置投票成員無法訪問目前主節點,則預期結果是:
- 孤立的主要將下台並成為次要
- 如果大多數投票成員之間仍然有聯繫並且有資格選舉的成員,則可以選舉新的初選。
有關更多資訊,請參閱MongoDB 手冊中的副本集選舉。
在網路重新連接之前,我們是否應該殺死在盒子上執行的 mongodb 以允許重新添加作為輔助?還是主要從其設置的更改模式斷開連接?
rs.status()
副本集的隔離數據承載成員將保持輔助狀態,但如果您檢查副本集的其他成員,則會顯示為“不健康/不可訪問” 。通常最好以相同的方式配置所有可選的數據承載成員,以便任何成員都可以在需要時擔任主要成員(而不是擁有一個專門配置的主要成員)。如果您希望您的副本集自動恢復,您應該讓所有成員按原樣執行,一旦連接恢復,它們將恢復同步(如果可能)。在預設配置中,以前是主要成員的隔離成員將作為輔助成員恢復同步。如果您對哪個成員被選為主要成員有強烈的偏好(例如,基於數據中心位置),您可以調整副本集成員的優先級。如果首選主節點被隔離,它將作為輔助節點重新加入副本集並恢復同步,直到它完全趕上來有資格成為主節點並觸發選舉。
恢復同步的注意事項是,隔離成員仍必須與健康副本集成員的複制 oplog有足夠的重疊,以便趕上成員被隔離時發生的任何寫入活動。oplog 不再與副本集的任何其他成員有任何重疊的輔助節點將被標記為“陳舊”並且需要重新同步。
如果我們允許 mongodb 伺服器回到網路上,並且 mongodb 作為主伺服器執行,儘管在重新連接之前是隔離的,會發生什麼?
除非您強制重新配置您的副本集以便沒有其他投票成員,否則不可能有一個獨立的主節點。一個副本集中不能有兩個主節點。如果隔離的前主節點接受了任何未傳播到大多數副本集成員的寫入,則目前主節點恢復與副本集的其他成員的連接時,這些寫入將被回滾(導出到磁碟以進行管理干預) . 您可以採取額外的步驟來避免回滾,包括使用
majority
寫關注。如果您不熟悉 MongoDB 副本集,我建議您使用預設配置和配置來啟用自動故障轉移和恢復。只有在特殊情況下才需要人工干預。