【问题标题】:Difference between ensemble and quorum in zookeeperzookeeper 中的 ensemble 和 quorum 的区别
【发布时间】:2014-09-30 05:29:40
【问题描述】:

我是动物园管理员的新手。我已经在一台机器上配置了它。但是我在zookeeper的文档中看到了“ensemble”和“quorum”这两个词。

谁能告诉我这些之间的区别?

  • 合奏
  • 法定人数

【问题讨论】:

标签: apache-zookeeper


【解决方案1】:

这个答案是给那些对Ensemble and Quorum的理解仍有疑问的人。 Ensemble 只不过是 Zookeeper 服务器的集群,其中 Quorum 定义了形成健康的 Ensemble 的规则。这是使用公式Q = 2N+1 定义的,其中Q 定义了形成一个健康的Ensemble 所需的节点数,它可以允许N 故障节点。您将在以下示例中了解此公式。

在开始举例之前,我想定义两件事 -
集群: 一组连接的节点/服务器(现在将使用 node),其中一个节点作为领导者/主节点,其余节点作为追随者/奴隶。
健康的整体:在任何给定时间点只有一个活动领导者的集群,因此容错

让我用一个例子来解释一下,这个例子在定义Ensemble and Quorum时常用。

  1. 假设您有 1 个 zookeeper 节点。无需担心,因为我们需要超过 1 个节点来形成集群。
  2. 现在采用 2 个节点。形成集群没有问题,但形成健康的Ensemble有问题,因为 - 假设这两个节点之间的连接丢失,那么两个节点都会认为另一个节点已关闭,因此它们都尝试充当Leader,这导致不一致,因为它们无法相互通信。这意味着 2 个节点的集群甚至无法承受单个故障,那么这个集群有什么用呢?他们并不是说您不能创建一个包含 2 个节点的集群,他们只是说 - 这与拥有单个节点相同,因为两者都不允许出现单个故障。希望这很清楚
  3. 现在采用 3 个节点。形成集群或健康的 Ensemble 没有问题 - 因为根据上面的公式 3 = 2N+1 => N = (3-1)/2 = 1,这可能允许 1 次失败。因此,当下一次故障发生(连接或节点故障)时,将不会选举任何节点作为 Leader,因此 Ensemble 不会提供任何写入/更新/删除服务,因此客户端集群的状态在 Zookeeper 集群节点之间保持一致.因此,Leader 选举只有在多数节点可用且已连接时才会发生,其中 Majority m = (n/2)+1,其中 n 代表上次选举发生时可用的节点数。所以在这里,第一次选举发生在 3 个节点上(作为一个 3 节点集群)。然后是第一次失败,所以剩下的 2 个节点可以进行选举,因为它们拥有多数 m = (3/2)+1 = 2。然后发生了第二次失败,现在他们没有多数,因为只有一个节点可供选举,但所需的多数是m = (2/2)+1 = 2
  4. 现在采用 4 个节点。形成集群或健康的 Ensemble 没有问题,但是有 4 个节点与 3 个节点相同,因为两者都只允许 1 个故障。让我们从仲裁公式4 = 2N+1 => N = (4-1)/2 = ⌊1.5⌋ = 1 //floor(1.5)=1 推导出它
  5. 现在需要 5 个节点。形成集群或健康的 Ensemble 没有问题 - 因为根据上面的公式 5 = 2N+1 => N = (5-1)/2 = 2,这可能允许 2 次失败。
  6. 现在需要 6 个节点。形成集群或健康的 Ensemble 没有问题,但有 6 个节点与 5 个节点相同,因为两者都只允许 2 次故障。让我们从 Quorum 公式6 = 2N+1 => N = (6-1)/2 = ⌊2.5⌋ = 2 推导出它


结论:

  1. 要形成 Quorum,我们至少需要 3 个节点 - 因为 2 个节点的集群甚至无法处理单个故障
  2. 最好形成一个奇数节点的 Ensemble - 因为 n(偶数)节点倾向于允许与 n-1(奇数)节点相同的故障数
  3. 拥有更多节点并不好,因为它们会增加性能延迟。建议的生产集群大小为 5 - 如果一台服务器因维护而停机,它仍然可以处理另外一个故障。

【讨论】:

    【解决方案2】:

    Ensemble 是构成分布式计算机生态系统的节点(或服务器,如果您愿意)阵列。

    法定人数是事情变得有趣的时候。在特定的任务/工作中,Quorum 确保可以维持健康的领导者-追随者多数。换句话说,确保获得多数票以继续进行活动的行为(例如提交/更新/删除等)。在 Replication 策略中,quorum 是必须的。

    让我们尝试使用非技术示例:

    1) 在贵公司 - 有一个由 5 位董事组成的董事会(全体)。

    |d1, d2, d3, d4, d5|----- BoD
    

    2) 每个董事在每个决定中都有平等的发言权。但是,如果 3 位董事在任何时候都应该就一个项目达成一致意见,则多数。如果没有多数派,公司就会运转不灵。

    3) 一个特定项目,P1 - 他们随机投票让 d1、d2、d3 中的大多数人成为该项目的决策者。但 d4 和 d5 完全了解正在发生的事情(因此他们可以随时介入)。

    4) 现在(上帝保佑),d3 几个月后去世了,每个人都同意使用 d1,d2,d4 形成多数。 d5 仍然知道发生了什么。请注意,我们只剩下 4 位董事。

    5) 灾难再次降临。 d5 离开公司去了另一个竞争对手。但这并没有改变任何事情,因为该公司仍然拥有一个由 3 名成员组成的董事会。

    6) 在另一场灾难袭击董事会的任何时候,任何董事都变得“不可用” - 公司功能失调,即我们失去了法定人数形成标准。

    Zookeeper 使用ceil(N/2) - 1 公式来获取 Ensemble 允许的最大失败次数并保持稳定的仲裁。在这种情况下,推荐的最小集成节点为 3(最多容忍 1 个故障)。

    【讨论】:

    • 如果推荐的最小集成节点是 3 个,那么如果发生 1 个故障,那么谁会从两个中选出?为什么最少2个不够,如果一个master死了,剩下的一个slave仍然可以充当master吗?
    • @KanagaveluSugumar 这还取决于您如何考虑系统的健康集成状态。在 Apache kafka 中,您可以配置一致性级别。但是在另一个要求强一致性的复杂系统中,quorum 不稳定是不可接受的,这意味着只要你只有 1 master 1 slave,就不能保证服务是稳定的。
    【解决方案3】:

    当您想在 zookeeper 服务器中获得高可用性时,您可以使用多个 zookeeper 服务器来创建一个 ensemble。基本上zookeeper具有主从架构。在一个合奏中,将有一个主人,其余的将是奴隶。如果主服务器失败,其中一个从服务器将充当主服务器。

    分配master的顺序称为quorum。创建 ensemble 时,zookeeper 会在内部为从属服务器创建一个序列 ID。当主 master 失败时,它将检查下一个序列 ID 以创建一个新的 master。 在 zookeeper 中创建节点时也使用了这种仲裁的概念。

    【讨论】:

      【解决方案4】:

      ensemble:组中的节点数。 Quorum:采取行动所需的节点数。 示例:您有 5 个节点。 ensemble 是 5。但根据多数规则 Quorum 应该是 3。如果我们没有成功写入 3 个节点,那么我们向客户端发送成功响应。 Apache Zookeeper Quorum

      【讨论】:

        猜你喜欢
        • 2016-09-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2018-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多