为什么说zookeeper建议配置为奇数台? zookeeper
程序员文章站
2022-06-13 15:01:46
...
因项目中大量使用zookeeper,最近在面试几位候选人时,经常会问他们一个问题,
为什么说zookeeper建议配置为奇数台?他们只知道需要这么配置,但回答却不尽人意。
使用过zookeeper的同学都知道,集群中的zookeeper需要超过半数,整个集群对外才可用。
这里所谓的整个集群对外才可用,是指整个集群还能选出一个Leader来,zookeeper默认采用
quorums来支持Leader的选举。
其实quorums机制有两个作用:
1.可以保证集群中选举出leader,且是唯一的一个,不会出现脑裂(split-brain)。
2.当客户端更新数据时,当大多数节点更新成功,客户端就会被通知更新成功了,
其他节点可以稍后再更新,以致达到数据的最终一致性
可能这还不够清晰,举个列子:设集群的最少节点数为n,
集群总节点数 | 最少可用的节点数 | 可容忍失效的节点数 |
1 | 1 | 0 |
2 | 2 | 0 |
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
。。。 | 。。。 | 。。。 |
2n-1 | n | n-1 |
2n | n+1 | n-1 |
由此可见,当集群总数为1或2,都不行,因为可容忍失效的节点数都为0,所以要想保证zookeeper的高可用,至少需要3台+。同时,我们可以发现一个规律,3个节点与4个节点的效果是一样的,可容忍失效的节点数都是1,即2n-1与2n,可容忍失效的节点数都是n-1。2n-1个节点能达到的效果,为啥要用2n个节点呢?
省一台节省了成本。配置成偶数台也不会有问题,只不过浪费了而已。