饲养员中群体与法定人数之间的差异

use*_*438 5 apache-zookeeper

我是Zookeeper的新手,我已经在单台机器上配置了它,但是我在Zookeeper的文档中碰到了ensemble和quorum一词,有人可以告诉我两者之间的区别吗

ensemble and quorum...
Run Code Online (Sandbox Code Playgroud)

谢谢..

Aja*_*986 8

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

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

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

  1. 假设您有1个Zookeeper节点。这里不需要担心,因为我们需要多个节点才能形成集群。
  2. 现在取2个节点。形成集群没有问题,但是形成一个健康的Ensemble是有问题的,因为-说这两个节点之间的连接丢失了,那么两个节点都会认为另一个节点已断开,因此他们都试图充当Leader,这导致不一致,因为他们彼此之间无法交流。这意味着由2个节点组成的群集甚至无法承受单个故障,那么该群集的用途是什么??他们并不是说您不能将2个节点组成一个集群,而是说-与拥有单个节点相同,因为两个节点都不允许出现单个故障。希望这很清楚
  3. 现在取3个节点。形成簇或健康的集成体没有问题-因为按照上面的公式,这可能会导致1次失败3 = 2N+1 => N = (3-1)/2 = 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. 现在取5个节点。形成簇或健康的集成体没有问题-因为根据上面的公式,这可能会导致2次失败5 = 2N+1 => N = (5-1)/2 = 2
  6. 现在取6个节点。形成群集或运行状况良好的集成体没有问题,但是拥有6个节点与5个节点相同,因为这两个节点仅允许2个故障。让我们从Quorum公式得出它6 = 2N+1 => N = (6-1)/2 = ?2.5? = 2


结论:

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


ha9*_*3ar 7

Ensemble是组成分布式计算机生态系统的一系列节点(如果需要,也可以是服务器)。

法定人数是事情变得有趣的时候。在特定的任务/工作上,Quorum确保可以保持健康的领导者和跟随者多数。换句话说,一种确保获得多数投票以进行一项活动的行为(例如,提交/更新/删除等)。在复制策略中,必须有仲裁。

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

1)在您的公司中-由5名董事组成的董事会(合奏)。

|d1, d2, d3, d4, d5|----- BoD
Run Code Online (Sandbox Code Playgroud)

2)每个董事在每个决定中都有平等的发言权。但是如果有3位董事在任何时候都应该同意一个项目的多数。如果没有多数,该公司将无法正常运作。

3)一个特定的项目,P1-他们随机投票拥有d1,d2,d3的多数作为该项目的决策者。但是d4和d5完全了解发生了什么(以便他们可以随时介入)。

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

5)灾难再次来袭。d5离开公司前往另一个竞争对手。但这并没有改变任何事情,因为该公司仍具有由三名成员组成的董事会。

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

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


San*_*Das 6

当您希望在 zookeeper 服务器中具有高可用性时,您可以使用多个 zookeeper 服务器来创建一个集合。基本上zookeeper具有主从架构。在一个合奏中,将有一个主人,其余的将是奴隶。如果主站出现故障,其中一个从站将充当主站。

分配主节点的顺序称为法定人数。创建集成时,zookeeper 在内部为从服务器创建序列 ID。当主 master 失败时,它将检查下一个序列 ID 以创建新的 master。在zookeeper中创建节点时也使用了这种法定人数的概念。