为什么 zookeeper 集群的数目,一般为奇数个?
1.容错
由于在增删改操作中需要半数以上服务器通过,来分析以下情况。
2 台服务器,至少 2 台正常运行才行(2 的半数为 1,半数以上最少为 2),正常运行
1 台服务器都不允许挂掉
3 台服务器,至少 2 台正常运行才行(3 的半数为 1.5,半数以上最少为 2),正常运
行可以允许 1 台服务器挂掉
4 台服务器,至少 3 台正常运行才行(4 的半数为 2,半数以上最少为 3),正常运行
可以允许 1 台服务器挂掉
5 台服务器,至少 3 台正常运行才行(5 的半数为 2.5,半数以上最少为 3),正常运
行可以允许 2 台服务器挂掉
6 台服务器,至少 3 台正常运行才行(6 的半数为 3,半数以上最少为 4),正常运行
可以允许 2 台服务器挂掉通过以上可以发现,3 台服务器和 4 台服务器都最多允许 1 台服务器挂掉,5 台服务器
和 6 台服务器都最多允许 2 台服务器挂掉
但是明显 4 台服务器成本高于 3 台服务器成本,6 台服务器成本高于 5 服务器成本。
这是由于半数以上投票通过决定的。
2.防脑裂
一个 zookeeper 集群中,可以有多个 follower.observer 服务器,但是必需只能有一
个 leader 服务器。
如果 leader 服务器挂掉了,剩下的服务器集群会通过半数以上投票选出一个新的
leader 服务器。
集群互不通讯情况:
一个集群 3 台服务器,全部运行正常,但是其中 1 台裂开了,和另外 2 台无法通讯。3
台机器里面 2 台正常运行过半票可以选出一个 leader。
一个集群 4 台服务器,全部运行正常,但是其中 2 台裂开了,和另外 2 台无法通讯。4
台机器里面 2 台正常工作没有过半票以上达到 3,无法选出 leader 正常运行。
一个集群 5 台服务器,全部运行正常,但是其中 2 台裂开了,和另外 3 台无法通讯。5
台机器里面 3 台正常运行过半票可以选出一个 leader。
一个集群 6 台服务器,全部运行正常,但是其中 3 台裂开了,和另外 3 台无法通讯。6
台机器里面 3 台正常工作没有过半票以上达到 4,无法选出 leader 正常运行。
通过以上分析可以看出,为什么 zookeeper 集群数量总是单出现,主要原因还是在于
第 2 点,防脑裂,对于第 1 点,无非是正本控制,但是不影响集群正常运行。但是出现第 2
种裂的情况,zookeeper 集群就无法正常运行了。