关于zookeeper集群quarum算法的理解
zookeeper集群个数需要奇数个的原因是最大容错个数下,集群个数为奇数可以节省一个节点的资源。譬如size为3的集群和size为4的集群容错个数都为1,都只能容忍一个节点挂掉,那么3个节省资源。
但是如果集群是如何认定集群的总个数的呢。譬如size为3,集群认为只要有两个有响应就算committed了,但是如果集群挂了一个节点,挂的久了,集群难道不会认为集群的size其实是2而不是3吗?还是这个集群大小一开始就固定了,是3就永远是3,如果挂了一个,集群节点能认识到是挂了一个,但是本来总数是3?那假如我看挂了一个,然后我为了平滑过度,我不重启集群,而是新加入3个节点,让集群总数变为5,那么原来集群的两个老节点如何认识到集群size已经更新为5了呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这跟 Quorums 没啥关系,Quorums 是用来做选举的,避免分布式“脑裂”问题,要求半数以上节点投票才能选举。
首先要知道 ZooKeeper 有个特性,就是只有当集群中有半数以上的节点可用,ZooKeeper 才会对外提供服务;否则你会发现即使还有一些节点是还在正常工作的,但整个集群你从外部已经访问不了了。
这也就是为啥节点数要奇数个,比如:
回到你的问题本身,其实答案很简单,就一句话的事儿。就是选举是当 Leader 挂掉了才开始的,Leader 活的好好的时候,节点加入或退出(挂掉就是一种异常的退出),Leader 是知晓的,它会同步信息给其他节点,使得集群的容量发生变化。