Zookeeper第一次启动的选举机制
?SID:服务器ID。用来唯一标识一台Zookeeper集群中的机器,每台机器得SID不能重复,和myid一致。
ZXID:事物ID。ZXID是一个事物ID。用来标识一次服务器状态的变更。在某一时刻,急群众的每台机器的ZXID值不一定完全相同,这和Zookeeper服务器对于客户端“更新请求”的处理逻辑有关。
Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。
- 服务器1启动:发动一次选举。服务器1就会投自己一票,此时服务器1票数为1票,不够半数(3票),选举无法完成,所以服务器1状态保持为LOOKING;
- 服务器2启动:再发起一次选举,服务器1和2分别投自己一票并交换选票信息,此时服务器1发现服务器2的myid大于自己的myid,则会更改自己的选票,改投服务器2,此时服务器1选票数为0,服务器2选票数为2,可选票数最多的依然没有过半数,选举无法完成,则服务器1和服务器2状态保持为LOOKING;
- 服务器3启动,再次发起一次选举,此时因为服务器1和服务器2的myid小于服务器3的myid,经过投票过后,服务器1的选票为0票,服务器2的选票为0票,服务器3的选票为3票,已经超过半数,此时选举成效,由服务器3当选Leader。服务器1和服务器2更改状态为FOLLOWING,服务器3状态更改为LEADING;
- 服务器4启动,还要发起一次选举,此时服务器1和服务器2状态已经为FOLLOWING,不会更改自己的选票信息,也就是说他们已经承认服务器3为Leader,不会改。所以依然为服务器3当选Leader;
- 服务器5启动,同服务器4一样,也只能为FOLLOWING。
|