在zookeeper中的集合和仲裁之间的区别

时间:2014-08-07 05:11:45

标签: apache-zookeeper

我是zookeeper的新手。我已经在单机中配置了它。但是我在zookeeper的文档中遇到了ensemble和quorum这两个词。请告诉我区别之间的区别

ensemble and quorum...

谢谢..

4 个答案:

答案 0 :(得分:4)

如果要在zookeeper服务器中拥有高可用性,可以使用多个zookeeper服务器来创建集合。动物园管理员基本上都有主从架构。在一个合奏中,将有一个主人,其余的将是奴隶。如果主设备发生故障,其中一个从设备将充当主设备。

分配主服务器的顺序称为仲裁。当您创建一个集合时,zookeeper会在内部为从服务器创建一个序列ID。当主主机发生故障时,它将检查下一个序列ID以创建新的主机。 在zookeeper中创建节点时也使用了仲裁概念。

答案 1 :(得分:4)

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

法定人数就是事情变得有趣的时候。在特定的任务/工作中,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名成员的BoD。

6)在另一场灾难发生的任何时候,BoD和任何董事都变得“无法” - 公司功能失调,即我们已经失去了法定人数形成标准。

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

答案 2 :(得分:4)

此答案适用于仍对Ensemble and Quorum有疑问的人。 合奏不过是一组Zookeeper服务器,其中 Quorum 中定义了规则以构成一个健康的合奏。它是使用公式Q = 2N+1定义的,其中Q定义了形成健康集成体所需的节点数量,该集成体可以允许N个故障节点。在下面的示例中,您将了解此公式。

在开始示例之前,我想定义两件事-
集群:一组连接的节点/服务器(现在将使用node),其中一个节点作为Leader / Master,其余节点作为Followers / Slaves。
健康的乐团:在任何给定时间点只有一个活跃的Leader的集群,因此容错

让我用一个示例来解释,该示例在定义Ensemble and Quorum时经常使用。

  1. 假设您有1个Zookeeper节点。这里不需要担心,因为我们需要一个以上的节点才能形成集群。
  2. 现在占用2个节点。形成集群没有问题,但是形成一个健康的Ensemble是有问题的,因为-说这两个节点之间的连接丢失了,那么两个节点都会认为另一个节点已断开,因此他们都试图充当Leader,这导致不一致,因为他们彼此之间无法交流。这意味着由2个节点组成的群集甚至无法承受单个故障,那么该群集的用途是什么??他们并不是说您不能将2个节点组成一个集群,而是说-与拥有单个节点相同,因为两个节点都不允许出现单个故障。希望这很清楚
  3. 现在占用3个节点。形成簇或健康的集成体没有问题-因为根据上面的3 = 2N+1 => N = (3-1)/2 = 1公式,这可能会导致1次失败。因此,当发生下一个故障(连接或节点故障)时,不会选择任何节点作为领导者,因此,集成体将不提供任何写/更新/删除服务,因此,客户端集群的状态在Zookeeper集群节点之间保持一致。因此,直到有多数节点可用且已连接时,领导者选举才会发生,其中多数m = (n/2)+1,其中n代表上次选举发生时可用的节点数。因此,在这里,第一次选举发生在3个节点上(作为其3节点群集)。然后发生第一个故障,因此剩余的2个节点(多数为m = (3/2)+1 = 2)可以进行选举。然后发生了第二次失败,现在他们没有多数,因为只有一个节点可供选举,但是所需的多数是m = (2/2)+1 = 2
  4. 现在占用4个节点。形成集群或运行正常的集成体没有问题,但是拥有4个节点与3个节点相同,因为这两个节点仅允许1个故障。让我们从Quorum公式4 = 2N+1 => N = (4-1)/2 = ⌊1.5⌋ = 1 //floor(1.5)=1
  5. 中得出它
  6. 现在占用5个节点。形成簇或健康的集成体没有问题-因为根据上面的5 = 2N+1 => N = (5-1)/2 = 2公式,这可能会导致2次失败。
  7. 现在占用6个节点。形成群集或运行正常的集成体没有问题,但是拥有6个节点与5个节点相同,因为这两个节点仅允许2个故障。让我们从Quorum公式6 = 2N+1 => N = (6-1)/2 = ⌊2.5⌋ = 2
  8. 中得出它


结论:

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

答案 3 :(得分:0)

合奏:组中的节点数。 法定人数:采取行动所需的节点数。 示例:您有5个节点。 整体是5。但是根据多数规则,法定人数应该是3。如果没有成功写入3个节点,则将成功响应发送给客户端。 Apache Zookeeper Quorum