Replication

在 MongoDB 副本集中擁有更多的數據承載成員有什麼優點和缺點?

  • May 23, 2019

如果所有 3 個成員都包含數據的副本,或者如果其中一個是仲裁者,則 3 個成員的副本集具有相同的容錯能力,那麼為什麼我希望所有 3 個成員都擁有數據的副本?

什麼情況下所有成員都擁有數據副本才有意義?

副本集中的容錯有幾個關鍵方面:

  • 寫入可用性:需要大多數投票副本集成員來維護或選舉主節點
  • 數據冗餘:寫入應該由副本的多個成員確認(理想情況下是多數,以避免回滾)。

三成員 Primary-Secondary-Arbiter (PSA) 副本集支持第一個方面:如果副本集的任何單個成員不可用,仍然可以維護或選舉主節點。

但是,仲裁器不支持容錯的第二個方面,因為它不儲存任何數據。

當 PSA 配置降級為 P_A(一個輔助不可用)時,會產生一些重大的操作後果:

  • 在您有第二個數據承載成員線上之前,數據冗餘會受到影響,並且寫入只能由目前主節點確認。
  • 您不再有活動複製。如果您的輔助節點離線時間過長,它可能會從 oplog 中脫落並需要重新同步。
  • 應用程序和內部流程不能再使用多數寫關注點。如果您沒有為此計劃,則請求多數確認的寫入可能會阻塞,直到大多數數據承載成員可用或達到超時(如果為寫入命令設置)。如果您的副本集是分片集群的一部分,這也可能會阻止分片之間的成功塊遷移。
  • 應用程序和內部程序將不會在使用多數讀取關注點的主節點上看到最新數據。一些特性(例如, MongoDB 3.6+ 中的更改流)依賴於讀取多數送出的數據來避免更改可能被回滾的機會。如果無法推進多數送出點,WiredTiger 記憶體的壓力也會增加。

採用 Primary-Secondary-Secondary (PSS) 配置可以避免上述後果。

值得記住的是,容錯不僅適用於故障模式。有正常的維護任務,例如軟體或硬體升級,可能需要成員暫時不可用。

什麼情況下所有成員都擁有數據副本才有意義?

如果您使用 MongoDB 3.6 或更高版本(或此副本集支持分片的任何 MongoDB 版本)在生產環境中執行三成員副本集:always

如果您在生產中執行舊版本的 MongoDB:總是,除非您準備接受上述操作後果。

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