【问题标题】:Running zookeeper with even number of nodes运行偶数节点的zookeeper
【发布时间】:2021-02-14 15:05:04
【问题描述】:

在 6 节点集群上运行 zookeeper 时,有人知道仲裁是自动确定为 4 节点还是 3 节点?

如果法定人数被选为 N/2,那么它将变成 3,并可能导致脑裂的情况。 如果quorum选为(N+1)/2,那么就会变成4,避免脑裂的情况。

所以我希望是后者,但documentation 没有提及任何此类内容。 有人肯定知道吗?

附:我知道建议使用奇数个 zookeeper 节点,但我只是想知道偶数个节点会发生什么情况。

【问题讨论】:

    标签: apache-zookeeper


    【解决方案1】:

    参见 org.apache.zookeeper.server.quorum.flexible.QuorumMaj.java

    public boolean containsQuorum(HashSet<Long> set)
    {
        return set.size() > n / 2;
    }
    

    【讨论】:

    • 谢谢。所以greater-than 符号确实意味着法定人数被选为 (n+1)/2 并且偶数的动物园管理员不会陷入裂脑情况。具体来说,在我们有 6 个节点的情况下,仲裁条件变为 set.size &gt; 3,这意味着至少有 4 个节点。
    【解决方案2】:

    当节点出现故障/故障时,具有偶数个节点不会增加任何优势。 一个 6 节点集群最多可以容忍 2 个节点故障,这意味着它需要至少 4 个节点来避免脑裂问题或获得多数票。这甚至可以通过 5 个节点的集群来实现,这意味着 5 个节点的集群也可以容忍多达 2 个节点的故障。

    因此,添加一个额外的节点只是一种运营成本。

    我在博客中回答了同样的问题。

    请看 :) Why Zookeeper has odd number of nodes?

    【讨论】:

      【解决方案3】:

      我知道这是一个旧帖子,但为了其他可能偶然发现该帖子的人而回复。

      Zookeeper 需要多数节点才能启动并进行通信。因此,在您的情况下,这将是 6 个中的 4 个,这就是使用奇数的原因。从 HA 的角度来看,您的节点之一不是多余的吗?如果 3 个节点出现故障,则您的集群已关闭。与 5 节点集群相同。

      【讨论】:

        猜你喜欢
        • 2014-07-24
        • 1970-01-01
        • 2015-06-29
        • 2017-11-11
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        • 2017-09-14
        相关资源
        最近更新 更多