我是动物园管理员的新手。我已经在一台机器上配置了它。但我在动物园管理员的文档中遇到了“ensemble”和“quorum”这两个词。
谁能告诉我这些之间的区别吗?
这个答案是给那些仍然有疑问理解的人的Ensemble and Quorum
. Ensemble无非是一个 Zookeeper 服务器集群,其中Quorum定义规则以形成健康乐团。这是使用公式定义的Q = 2N+1
where Q
定义了形成一个健康的 Ensemble 所需的节点数量,这可以允许N
故障节点。您将在下面的示例中了解这个公式。
在开始示例之前,我想定义两件事 -
Cluster:连接的节点/服务器组(现在将使用node
)其中一个节点作为领导者/主节点,其余节点作为追随者/从节点。
健康乐团:在任何给定时间点只有一个活跃领导者的集群,因此容错.
让我用一个例子来解释,这个例子在定义时经常使用Ensemble and Quorum
.
- 假设您有 1 个 Zookeeper 节点。这里无需担心,因为我们需要超过 1 个节点才能形成一个集群。
- 现在取2个节点。形成集群没有问题,但形成健康的 Ensemble 却有问题,因为 - 假设这两个节点之间的连接丢失,那么两个节点都会认为另一个节点已关闭,因此两个节点都尝试充当 Leader,这会导致不一致,因为它们无法相互通信。这意味着2个节点的集群甚至不能承受单个故障,那么这个集群有什么用呢?他们并不是说你不能建立一个由 2 个节点组成的集群,他们只是说 - 这与拥有单个节点相同,因为两者都不允许出现单一故障。希望这是清楚的
- 现在取3个节点。形成集群或健康的 Ensemble 没有问题 - 因为根据上面的公式,这可能允许 1 次失败
3 = 2N+1 => N = (3-1)/2 = 1
。因此,当下一次发生故障(连接或节点故障)时,不会有节点被选为 Leader,因此 Ensemble 不会提供任何写入/更新/删除服务,因此客户端集群的状态在 Zookeeper 集群节点之间保持一致。因此,只有多数节点可用并已连接,领导者选举才会发生,其中多数节点m = (n/2)+1
, where n
代表上次选举发生时可用的节点数。所以在这里,第一次选举发生在 3 个节点上(因为它是一个 3 节点集群)。然后发生了第一次失败,所以剩下的 2 个节点可以进行选举,因为它们拥有多数票m = (3/2)+1 = 2
。然后发生了第二次失败,现在他们没有多数票,因为只有一个节点可供选举,但所需的多数票是m = (2/2)+1 = 2
.
- 现在取4个节点。形成集群或健康的 Ensemble 没有问题,但拥有 4 个节点与 3 个节点相同,因为两者都只允许 1 次故障。让我们从 Quorum 公式中推导出来
4 = 2N+1 => N = (4-1)/2 = ⌊1.5⌋ = 1 //floor(1.5)=1
- 现在取5个节点。形成集群或健康的 Ensemble 没有问题 - 因为根据上面的公式,这可能允许 2 次失败
5 = 2N+1 => N = (5-1)/2 = 2
.
- 现在取6个节点。形成集群或健康的 Ensemble 没有问题,但拥有 6 个节点与 5 个节点相同,因为两者都只允许 2 次故障。让我们从 Quorum 公式中推导出来
6 = 2N+1 => N = (6-1)/2 = ⌊2.5⌋ = 2
结论:
- 为了形成 Quorum,我们至少需要 3 个节点 - 因为 2 节点集群甚至无法处理单一故障
- 最好形成一个奇数节点的集成 - 如
n
(偶数)节点往往允许相同数量的故障n-1
(奇数)节点
- 拥有更多节点并不好,因为它们会增加性能延迟。建议的生产集群大小为 5 - 如果一台服务器因维护而停机,它仍然可以处理另外一个故障。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)