MongoDB 在两个数据中心之间自动故障转移

MongoDB 在两个数据中心之间自动故障转移

如果我仅在 2 个数据中心部署 MongoDb 副本集,如果一个整个数据中心发生故障,是否可以自动故障转移到另一个数据中心?

考虑以下情况:1 个数据中心有主节点、辅助节点和仲裁节点,而第二个数据中心有 2 个辅助成员。本质上,这是一个 5 个成员的副本集。

如果数据中心 2 出现故障,数据中心 1 的副本集中仍会有 3 个成员。这很好。

反过来,如果数据中心 2 保持正常运行,而数据中心 1 发生故障,则 5 个成员副本集中将只剩下 2 个成员。这不足以让任何一个辅助节点投票成为主节点。

是这样吗?如果不是,我做错了什么。

如果这不可能,请告诉我,以便我可以探索其他选择。

添加第三个数据中心来容纳仲裁器不是一个选择。

答案1

对你的问题的回答是,只使用两个位置是不可能的。

不可能的原因可以这样解释:如果两个位置都正常运行,但两者之间的网络连接出现故障,则只有其中一个位置可以保持正常运行。在这种情况下,两个位置同时选举主服务器是不可接受的。

一个位置无法区分另一个位置是完全瘫痪还是另一个位置正常运行,但两者之间的网络连接已瘫痪。

因此,如果每个位置都可以在另一个位置发生故障时独立地选举一个主节点,那么结果就是,如果发生网络中断,则可能同时存在两个主节点。存在两个主节点是不可接受的情况,这就是为什么两个位置中只有一个能够选举主节点的原因。

拥有三个地点就足够了如果你对失败的行为做出假设。任何不考虑故障的解决方案都需要至少四个位置才能容忍单个位置的中断。这一要求源于拜占庭协议领域的一个重要定理。

答案2

一个可能的选择是在第一个数据中心设立一个主服务器和辅助服务器,在第二个数据中心设立两个辅助服务器,并且可以在第三个数据中心设立仲裁服务器。

相关内容