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