运行 节点数为偶数的 zookeeper
Running zookeeper with even number of nodes
虽然 运行 6 节点集群上的 zookeeper,有谁知道法定人数是自动确定为 4 个节点还是 3 个节点?
如果法定人数选择为N/2,那么它将变为 3 并可能导致脑裂情况。
如果法定人数选择为(N+1)/2,那么它就会变成4,这样就避免了脑裂的情况。
所以我希望是后者,但 documentation 没有提及任何此类内容。
有人肯定知道吗?
P.S。我知道建议使用奇数个 zookeeper 节点,但我只是想知道偶数个节点情况下会发生什么。
见org.apache.zookeeper.server.quorum.flexible.QuorumMaj.java
public boolean containsQuorum(HashSet<Long> set)
{
return set.size() > n / 2;
}
我知道它是旧的 post 但为了其他可能偶然发现此内容的人而回复 post。
Zookeeper 需要多数节点才能启动并进行通信。因此,在您的情况下,它将是 6 中的 4,这就是使用奇数的原因。从 HA 的角度来看,您的节点之一不是冗余的吗?如果 3 个节点出现故障,您的集群就会出现故障。与 5 节点集群相同。
当节点数 down/fail 时,拥有偶数个节点不会增加任何优势。
一个 6 节点集群最多可以容忍 2 个节点故障,这意味着它至少需要 4 个节点才能避免脑裂问题或获得多数票。这甚至可以通过 5 节点集群来实现,这意味着 5 节点集群也可以容忍最多 2 个节点故障。
因此,添加一个额外的节点只是一项运营成本。
我已经在我的博客中回答了同样的问题。
虽然 运行 6 节点集群上的 zookeeper,有谁知道法定人数是自动确定为 4 个节点还是 3 个节点?
如果法定人数选择为N/2,那么它将变为 3 并可能导致脑裂情况。 如果法定人数选择为(N+1)/2,那么它就会变成4,这样就避免了脑裂的情况。
所以我希望是后者,但 documentation 没有提及任何此类内容。 有人肯定知道吗?
P.S。我知道建议使用奇数个 zookeeper 节点,但我只是想知道偶数个节点情况下会发生什么。
见org.apache.zookeeper.server.quorum.flexible.QuorumMaj.java
public boolean containsQuorum(HashSet<Long> set)
{
return set.size() > n / 2;
}
我知道它是旧的 post 但为了其他可能偶然发现此内容的人而回复 post。
Zookeeper 需要多数节点才能启动并进行通信。因此,在您的情况下,它将是 6 中的 4,这就是使用奇数的原因。从 HA 的角度来看,您的节点之一不是冗余的吗?如果 3 个节点出现故障,您的集群就会出现故障。与 5 节点集群相同。
当节点数 down/fail 时,拥有偶数个节点不会增加任何优势。 一个 6 节点集群最多可以容忍 2 个节点故障,这意味着它至少需要 4 个节点才能避免脑裂问题或获得多数票。这甚至可以通过 5 节点集群来实现,这意味着 5 节点集群也可以容忍最多 2 个节点故障。
因此,添加一个额外的节点只是一项运营成本。
我已经在我的博客中回答了同样的问题。