共识算法(例如筏)要求集群包含奇数个节点,以避免脑裂问题。
说我有一个由5个节点组成的集群,如果只有一个节点发生故障会怎样?群集现在有4个节点,这打破了奇数规则,群集将继续正常运行吗?
一种解决方案是删除一个以上的节点,以使群集仅包含3个节点,但是如果先前发生故障的节点又回来了该怎么办?那么该群集又有4个节点,为了使群集保持奇数,我们必须将先前删除的节点放回原处。
共识算法的实现是否自动处理此问题,还是必须在我的应用程序代码中进行处理(例如,删除节点)?
答案 0 :(得分:2)
是的,群集将继续正常工作。 N
个节点的集群,并且如果N
为奇数(N = 2k + 1
),则可以处理k
个节点失败。只要大多数节点都处于活动状态,它就可以正常工作。如果一个节点发生故障,而我们仍然占有多数,则一切正常。只有当失去大多数节点时,您才有问题。
没有理由强迫集群具有奇数个节点,并且实现不认为这是一个问题,因此不处理它(丢弃节点)。 您可以在偶数个节点上运行共识算法,但是使它为奇数通常更有意义。
3 node cluster can handle 1 node fail (the majority is 2 nodes).
4 node cluster can handle 1 node fail (the majority is 3 nodes).
5 node cluster can handle 2 node fail (the majority is 3 nodes).
6 node cluster can handle 2 node fail (the majority is 4 nodes).
我希望这可以弄清楚为什么将群集大小设置为奇数更有意义,它可以处理群集中较少节点的相同数量的节点故障。