我在这里看到了一个密切相关的类似问题,但提供的答案并不能完全解决我的疑虑。
假设配置了一个没有见证节点的 3 节点集群,并且所有节点都能够相互通信。
由于节点的数量是奇数,它应该能够自己达到法定人数,假设至少有 2 个节点已启动并正在运行并且能够相互通信。这可以防止出现裂脑情况,即多个节点可以运行一次应该只有一个活动实例的服务。
如果其中一个连接中断并且节点 A 和 B 无法相互通信怎么办,如下所示:
然后 (A,C) 和 (B,C) 对都可以实现两个独立的法定人数(绿色和红色)并可能引入裂脑情况 - 如果 B 正在运行 UniqueService,节点 A 将不知道 B 仍在运行并且可以决定启动它。我的问题是:
a) 这是一个真正的问题吗?如果不是,为什么?
b) 如果不是,是不是因为 AC 和 BC 对都可以通信,所以 A 和 B 之间的任何通信仍然可以通过 A <-> C <-> B 进行。如果 A 和 B 不能通信,那是因为 a法定人数甚至没有试图解决的更大问题?