共识算法 : what will happen if an odd cluster becomes even because of a node failure?

标签 consensus raft paxos

共识算法(例如 raft)要求集群包含奇数个节点以避免裂脑问题。

假设我有一个由 5 个节点组成的集群,如果只有一个节点发生故障会发生什么?集群现在有 4 个节点,这打破了奇数规则,集群会继续正常运行吗?

一种解决方案是再删除一个节点,使集群只包含 3 个节点,但是如果之前发生故障的节点又回来了怎么办?然后集群再次有 4 个节点,我们必须将之前删除的节点带回来以保持集群奇数。

共识算法的实现会自动处理这个问题,还是我必须在我的应用程序代码中处理(例如,删除一个节点)?

最佳答案

是的,集群将继续正常工作。 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).

我希望这可以更清楚地说明为什么将集群大小设置为奇数更有意义,它可以用更少的集群节点来处理相同数量的节点故障。

关于共识算法 : what will happen if an odd cluster becomes even because of a node failure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167820/

相关文章:

hyperledger - Hyperledger Fabric 共识服务可以分发吗?

algorithm - 为什么使用空操作来填补 paxos 事件之间的空白是合法的?

distributed - 为什么提议者发送的接受请求与从接受者获得的值相同?

distributed-computing - 在 Paxos 中提交失败

raft:提交的条目可能会丢失?

blockchain - Hyperledger v0.6 中的 block 大小是多少?

hyperledger-fabric - 单一组织 Hyperledger 结构 n/w

algorithm - Lamport 的 Paxos 中的矛盾使简单的论文

algorithm - 为什么或者为什么不在 Raft 实现中使用 RequestVote RPC 作为心跳?

consensus - Raft 集群中的节点如何知道 "majority"是什么?