【问题标题】:MongoDB Replica Set - 5 data centers - are two arbiters possible?MongoDB Replica Set - 5 个数据中心 - 两个仲裁者可能吗?
【发布时间】:2018-01-04 00:51:00
【问题描述】:

是否可以使用两个仲裁器部署 MongoDB 副本集?文档指出,副本集最多应包含一个仲裁器,但没有说明这是真正的限制还是建议。

计划部署在五个数据中心,其中三个数据中心将保存实际数据并在高性能硬件上运行,最后两个数据中心不保存数据,仅运行仲裁程序。

目标是实现高可用性并允许系统在丢失任何两个数据中心的情况下运行。

另一种选择是 4+1 设置,当然成本会更高,但在这种情况下,这真的会比 3+2 带来任何好处吗?

【问题讨论】:

    标签: mongodb mongodb-replica-set


    【解决方案1】:

    不建议使用多个仲裁器,因为仲裁器被视为投票节点。您需要考虑当两个承载数据的节点脱机时会发生什么,留下一个主节点和两个仲裁节点。这并不理想,因为:

    • 多数写入关注将等到写入传播到大多数投票节点。由于仲裁器无法进行写入,因此写入将挂起。如果副本集是分片集群的一部分,这尤其是一个问题,因为块移动需要多数写入关注。

    • 拥有两个仲裁器和一个活动的数据承载节点意味着您不再具有高可用性。如果主节点随后损坏,则您没有其他节点拥有该数据的副本。

    • 与不允许写入的数据库相比,丢失两个数据中心通常意味着您面临更紧迫的问题(例如,托管公司的可靠性)。您想知道如果托管公司允许两个数据中心长时间离线,它们破坏您的数据的可能性有多大?

    如果您设想您的两个数据承载节点可以同时离线(由于维护、灾难等),那么最好的做法是拥有一个包含五个数据承载节点的副本集.

    如果五个数据承载节点不适合您的情况,我建议您只使用一个仲裁器(您提到的 4+1 拓扑)。

    【讨论】:

    • 这里要提两件事。除了上面提到的问题之外,3+2 设置确实比 3+0 设置没有任何优势:如果两个数据承载节点发生故障,您将失去冗余。更糟糕的是:虽然副本集仍在运行并进行写入,但写入并不是冗余的。此外,对于 4+1 设置,恕我直言,与 3+0 设置相比,额外的机器是否值得投资值得怀疑。因此,底线是,应该使用 2+1(具有最低冗余的简单故障转移)、3+0(增强冗余参考)或 (1+x*2)+0 以更加安心。
    • 最好的解决方案是三个数据中心,三个数据承载节点,没有中间节点。三个数据中心的一种方案是2+2+1,两个数据中心都有两个数据承载节点,一个数据中心有仲裁器。两种解决方案都可以处理一个数据中心被分区的情况。
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2013-08-15
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多