如果我只在两个数据中心部署一个MongoDb副本集,如果整个数据中心发生故障,是否可以自动故障转移到另一个数据中心?
考虑一个数据中心有一个主数据中心,一个仲裁数据中心和一个仲裁数据中心,第二个数据中心有两个二级成员。 本质上,一个5成员副本集。
如果数据中心2出现故障,数据中心1的副本集中仍然有3个成员。这很好。
相反,如果数据中心2保持运行状态,数据中心1停机,则5个成员副本组中只剩下2个成员。 这还不足以让二次投票成为主要的投票。
那是对的吗? 如果没有,我做错了什么。
如果这是不可能的,请让我知道,所以我可以探索其他选项。
添加第三个数据中心来容纳仲裁者不是一种select。
你的问题的答案是,只有两个地点是不可能的。
不可能的原因可以这样解释:如果两个位置都是完全正常工作的,但是两者之间的networking连接有问题,那么只有其中一个可能保持正常工作。 在这种情况下,两地都不能同时select小学。
一个位置无法区分另一个位置完全closures,另一个位置closures,而两个位置之间的networking连接closures。
因此,如果每个位置在另一个位置closures时都可以独立select一个主位置,则结果将是,在networking中断的情况下,两个基位可能同时存在。 有两个初选是一个不可接受的情况,这就是为什么只有两个地点之一将能够选出一个小学。
如果您对失败的行为进行假设,那么拥有三个位置就足够了。 任何解决scheme的工作没有对失败的假设将需要至less四个位置,以容忍一个单一的位置中断。 这一要求遵循拜占庭协议领域的一个关键定理。
一个可能的select是在第一个数据中心有一个主要和次要的,第二个数据中心有两个次要的,你可以在第三个数据中心有仲裁器。