【发布时间】:2015-05-23 02:28:55
【问题描述】:
文档here 说:
一个 3 台服务器集成允许单个服务器出现故障,而该服务仍然可用。
但是,要建立仲裁,需要有ceil(n/2)+1 节点
3个节点的情况下,即:ceil(3/2)+1 = ceil(1.5)+1 = 3
因此,如果有 1 个节点宕机,则不应该建立仲裁,并且 zookeeper 应该宕机。
在这种情况下,上面的文档有错吗?
【问题讨论】:
文档here 说:
一个 3 台服务器集成允许单个服务器出现故障,而该服务仍然可用。
但是,要建立仲裁,需要有ceil(n/2)+1 节点
3个节点的情况下,即:ceil(3/2)+1 = ceil(1.5)+1 = 3
因此,如果有 1 个节点宕机,则不应该建立仲裁,并且 zookeeper 应该宕机。
在这种情况下,上面的文档有错吗?
【问题讨论】:
三节点集群中的 quorum 为 2,因为这是多数。空间或时间上的任何两个多数必须重叠;所以不能不知道任何其他多数的行动,因为至少有一个节点同时处于多数。这是 Paxos 算法使用的基本属性(注意 Zookeeper 使用 ZAB 而不是 Paxos,我的观点是共识算法中的安全性使用多数)。所以你的计算应该是floor(N/2)+1,它在 3 节点集群中给出 2 的法定人数,在 5 节点集群中给出 3,在 7 节点集群中给出 4,等等。
【讨论】: