是否可以使用两个仲裁程序部署MongoDB副本集?该文档指出副本集最多应包含一个仲裁器,但它并未指定这是真正的限制还是仅仅是建议。
计划部署将在五个数据中心,其中三个数据中心将保存实际数据并在高性能硬件上运行,最后两个数据中心将不保留任何数据,只运行仲裁器。
目标是实现高可用性并允许系统即使丢失任何两个数据中心也能运行。
另一种选择是4 + 1设置,当然会花费更多,但在这种情况下,这真的会带来超过3 + 2的任何好处吗?
答案 0 :(得分:2)
多个仲裁者不推荐,因为仲裁者被视为投票节点。您需要考虑当两个数据承载节点脱机时会发生什么,您将留下主要和两个仲裁器。这并不理想,因为:
多数写入问题将等待写入传播到大多数投票节点。由于仲裁器无法写入,因此写入将挂起。如果副本集是分片群集的一部分,这尤其是一个问题,因为块移动需要大多数写入问题。
拥有两个仲裁器和一个活动数据承载节点意味着您不再具有高可用性。如果主服务器随后被破坏,则您没有其他节点具有数据副本。
与不允许写入的数据库(例如托管公司的可靠性)相比,丢失两个数据中心通常意味着您遇到了更紧迫的问题。您不得不怀疑托管公司是否允许两个数据中心长时间处于脱机状态,它们破坏您的数据的可能性有多大?
如果您设想两个数据承载节点可以同时脱机(由于维护,灾难等),那么最好的办法是拥有一个带有五个数据承载节点的副本集
如果五个数据承载节点不适合您的情况,我建议您只使用一个仲裁器(您提到的4 + 1拓扑)。