在6节点集群上运行zookeeper时,是否有人知道仲裁是自动确定为4节点还是3节点?
如果法定人数选择为N/2,那么它将变成3,并可能导致裂脑情况。如果法定人数选择为(N+1)/2,那么它将变成4,并将避免裂脑情况。
所以我希望是后者,但是documentation没有提到任何这类的东西。有人肯定地知道这一点吗?
我知道建议使用奇数个zookeeper节点,但我只是好奇地想知道偶数个节点的情况会发生什么。
在6节点集群上运行zookeeper时,是否有人知道仲裁是自动确定为4节点还是3节点?
如果法定人数选择为N/2,那么它将变成3,并可能导致裂脑情况。如果法定人数选择为(N+1)/2,那么它将变成4,并将避免裂脑情况。
所以我希望是后者,但是documentation没有提到任何这类的东西。有人肯定地知道这一点吗?
我知道建议使用奇数个zookeeper节点,但我只是好奇地想知道偶数个节点的情况会发生什么。
3条答案
按热度按时间kqlmhetl1#
see org.apache.zookeeper.server.quorum.flexible.QuorumMaj.java
ttisahbt2#
当节点出现故障时,偶数个节点不会带来任何优势。6节点集群最多可以容忍2个节点故障,这意味着它至少需要4个节点来避免裂脑问题或获得多数票。这甚至可以通过5节点集群实现,这意味着5节点集群也可以容忍最多2个节点故障。
因此,添加一个额外节点只是一项运营成本。
我在我的博客中回答了同样的问题。
请看:)Why Zookeeper has odd number of nodes?
ujv3wf0j3#
我知道这是一个老职位,但答复的缘故,其他谁可能会偶然发现这个职位。
Zookeeper需要多数节点处于启动状态并进行通信。因此,在您的情况下,6个节点中有4个节点处于启动状态,这就是为什么使用奇数的原因。从HA的Angular 来看,您的节点中是否有一个节点是冗余的?如果3个节点出现故障,则集群也会出现故障。对于5个节点的集群也是如此。