Zookeeper选举机制分为两种情况:集群第一次启动、集群非第一次启动
集群第一次启动:
假设有5台服务器,当有一台的选票数达到5/2+1=3票时,Leader选定。
- 服务器1启动,发起一次选举,投自己一票,此时服务器1票数一票,不够半数3票,服务器1保持LOOKING状态。
- 服务器2启动,发起一次选举,1,2分别投自己一票并交换选票信息。此时服务器1发现服务器2的myid大于自己的推举的服务器,更改选票推举服务器2,此时服务器1票数0票,服务器2票数2票,没有半数。服务器1,2继续LOOKING。
- 服务器3启动,1,2都会改投服务器3,此时服务器1票数0票,服务器2票数0票,服务器3票数3票,超过半数,当选Leader。服务器1,2改为FOLLOWING,服务器3改为LEADING。
- 服务器4启动,由于已经存在leader,服务器4会直接连接leader,并将状态改为FOLLOWING。
- 服务器5同服务器4.
集群非第一次启动
当集群中已经存在Leader,试图进行选举的节点会直接连接Leader。
当集群中不存在Leader时: