Windows Server 仲裁概念和裂脑问题预防

Windows Server 仲裁概念和裂脑问题预防

我看到有人问过类似的问题这里这密切相关,但提供的答案并不能完全解决我的疑虑。

假设配置了一个 3 节点集群,没有见证节点,并且所有节点都能够相互通信。

文本

由于节点数为奇数,因此它应该能够自行实现法定人数,前提是至少有 2 个节点正常运行且能够相互通信。这可以防止出现裂脑情况,即多个节点可以运行一次只能有一个活动实例的服务。

如果其中一个连接断开,节点 A 和 B 无法相互通信,如下所示:

文本

然后 (A,C) 和 (B,C) 对都可以实现两个单独的法定人数(绿色和红色),并可能引入裂脑情况 - 如果 B 正在运行 UniqueService,节点 A 将不知道 B 仍在运行并可以决定启动它。我的问题是:

a) 这是一个真正的问题吗?如果不是,为什么?

b) 如果不是,是不是因为 AC 和 BC 对都可以通信,所以 A 和 B 之间的任何通信仍然可以通过 A <-> C <-> B 进行。如果 A 和 B 无法通信,这是由于更大的问题,而法定人数甚至没有尝试解决?

答案1

您在这里已经基本回答了您自己的问题,但只是为了确认,是的 - 如果您遵循此类集群实施的最佳实践,那么这种情况就永远不会出现。

如果 A<->C 可以通信,并且 B<->C 也可以通信,那么 A<->B 无法通信的可能性就根本不存在。

此外,由于 C 在两种情况下都存在,因此它不会两次投票来创建法定人数 - 这就是法定人数的全部意义所在。每个节点只有一票。

根据集群配置,我想说,即使你以某种方式发明一种 A 和 B 只能与 C 通信而不能相互通信的场景,那么集群要么 a) 根本不会形成,要么 b) 只形成一次,因为节点 C 基本上是决定哪些节点将参与集群(它和另一个节点)的决定性投票。

相关内容