遵循Zookeeper的《选举机制》:
1).半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
2).Zookeeper虽然在配置文件中并没有指定Master(Leader)和Slave(Follower)。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
3).举例子:假如有5台服务器组成一个zookeeper集群,他们的id是1-5,同时都是最新启动的,也没有历史数据。
在存放数据量这一点上,都是一样的。假设这些服务器依序启动,来看看会发生什么。
5台服务器半数以上票数是3 | |
服务器1 | 开始选举,投自己一票。不够半数以上票数;状态保持为LOOKING; |
服务器2 | 开始选举,服务器1,2 分别 投自己一票。因为服务器2的ID比服务器1的ID大。 所以,服务器1更改投票,把票投给服务器2的票数为2,不满足半数票数以上;状态保持为LOOKING; |
服务器3 | 和上面规则一样,服务器1,2,都把票投给服务器3了。加上服务3 自己的一票,刚好3票。 满足半数机制,服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING; |
服务器4 | 开始选举,此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。 交换选票信息结果:服务器3为3票,服务器4为1票。 此时服务器4服从多数,更改选票信息为服务器3; 服务器4并更改状态为FOLLOWING; |
服务器5 | 同4一样,少数服从多数。服务器5并更改状态为FOLLOWING; |
总结:最终Leader是服务器3,状态为LEADING;其余服务器是Follower,状态为FOLLOWING。
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服务器成本。这是由于半数以上投票通过决定的。