AWS 上的 MongoDB (EBS):3 個副本與 2 個副本 + Arbiter

AWS 上的 MongoDB (EBS):3 個副本與 2 個副本 + Arbiter

我們有一個相當大的 Mongo DB 在 AWS 中運行。目前,我們正在執行具有 3 個實例的副本集。每個實例都有 5TB 的附加 EBS 儲存。每個實例每月的費用超過 1000 美元。除此之外,我們還有生產環境和臨時環境(第三個「開發」環境即將推出)。此外,當/如果我們遷移到分片環境時,這些成本在未來將會激增。

問題是,AWS環境中3個副本的必要性有多大?

好吧好吧,我已經知道答案是「視情況而定」。我正在尋找一些關於如何最好地權衡利弊的建議。例如...

  1. 考慮到每個 EBS 磁碟區已經內建了三重冗餘,從備份還原相當簡單,我如何衡量 2 個副本與 3 個副本相比增加的容錯能力。

  2. 在考慮權衡時,除了冗餘之外還有其他考慮因素嗎?

  3. 有沒有人有隻運行 2 個副本 + 一個仲裁器的經驗(好或壞)?

答案1

  1. 考慮到每個 EBS 磁碟區已經內建了三重冗餘,從備份還原相當簡單,我如何衡量 2 個副本與 3 個副本相比增加的容錯能力。

就 MongoDB 而言,三節點副本集中只有兩個資料承載成員的關鍵考慮因素是,如果其中一個資料承載成員因任何原因(計劃內維護或計劃外故障)不可用:

  • 您不再有主動複製(只剩下一個資料承載成員)
  • 您的部署無法再確認高於w:1(例如: w:majorityw:2)的寫入問題

此配置在單一成員發生故障時維護/選擇主節點方面具有高可用性,但如果您的資料承載成員之一不可用,則仲裁器會損害資料冗餘。假設您有合理的時間從 EBS 備份進行還原(並且信任 EBS 冗餘),這對於您的用例來說可能是可以接受的折衷方案。

  1. 在考慮權衡時,除了冗餘之外還有其他考慮因素嗎?

如果您的程式碼使用 MongoDB寫下擔憂高於預設值 ( w:1),您需要新增一個wtimeout價值。如果不指定該wtimeout選項且寫入關注層級無法實現,則寫入操作將無限期阻塞。

AWS 對冗餘基礎架構的保證通常僅適用於跨多個可用區的故障,因此為了最大限度地提高可用性,您還應該將副本集成員部署到不同的可用區。

  1. 有沒有人有隻運行 2 個副本 + 一個仲裁器的經驗(好或壞)

我確實看到用戶沒有考慮上述幾點(特別是考慮寫入問題和超時)的糟糕結果。如果您在計劃(和測試)時考慮到這些注意事項,您應該能夠獲得良好的體驗。

除此之外,我們還有生產環境和臨時環境(第三個「開發」環境即將推出)

對於擁有類似產品的登台和開發環境肯定是有爭議的,但典型的成本節省是為開發部署較低規格的環境,並且故障轉移比生產更少。對於登台,您可能想要部署較低規格的環境,但具有類似的配置,以便您可以測試實際的故障轉移場景。如果您在臨時環境中進行效能或負載測試,則應使用與生產環境相同的規格來配置它們。

相關內容