关于zookeeper集群quarum算法的理解

发布于 2022-09-12 01:22:03 字数 345 浏览 15 评论 0

zookeeper集群个数需要奇数个的原因是最大容错个数下,集群个数为奇数可以节省一个节点的资源。譬如size为3的集群和size为4的集群容错个数都为1,都只能容忍一个节点挂掉,那么3个节省资源。

但是如果集群是如何认定集群的总个数的呢。譬如size为3,集群认为只要有两个有响应就算committed了,但是如果集群挂了一个节点,挂的久了,集群难道不会认为集群的size其实是2而不是3吗?还是这个集群大小一开始就固定了,是3就永远是3,如果挂了一个,集群节点能认识到是挂了一个,但是本来总数是3?那假如我看挂了一个,然后我为了平滑过度,我不重启集群,而是新加入3个节点,让集群总数变为5,那么原来集群的两个老节点如何认识到集群size已经更新为5了呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

反目相谮 2022-09-19 01:22:03

这跟 Quorums 没啥关系,Quorums 是用来做选举的,避免分布式“脑裂”问题,要求半数以上节点投票才能选举。

首先要知道 ZooKeeper 有个特性,就是只有当集群中有半数以上的节点可用,ZooKeeper 才会对外提供服务;否则你会发现即使还有一些节点是还在正常工作的,但整个集群你从外部已经访问不了了。

这也就是为啥节点数要奇数个,比如:

  • Node = 3,则半数 Quorums = 2。即集群可以容忍 1 个节点不可用,但还能选举出 1 个 Leader,集群可用;
  • Node = 4,则半数 Quorums = 3。即集群还是可以容忍 1 个节点不可用,但比 Node = 3 多浪费一个节点的资源。

回到你的问题本身,其实答案很简单,就一句话的事儿。就是选举是当 Leader 挂掉了才开始的,Leader 活的好好的时候,节点加入或退出(挂掉就是一种异常的退出),Leader 是知晓的,它会同步信息给其他节点,使得集群的容量发生变化。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文