zk选举机制
sid:服务器id,用来唯一标识一台zookeeper集群中的机器,每台机器不能重复,和myid一致。
zxid:事务id,zxid是一个事务id,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的zxid值不一定完全一致,这和zookeeper服务器对于客户端更新请求,的处理逻辑有关。
epoch:每个leader任期的代号,没有leader时同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。
1.服务1启动,发起一次选举,服务器1自己投自己一票,此时服务器1票数一票,不够半数以上3票,选举无法完成,服务器1状态保持为looking。
2.服务器2启动,再发起一次选举,服务器1和2分别投自己一票并交换选举信息,此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2,此时服务器1票数0票,服务器2票2票,没有半数以上结果,选举无法完成,服务器1,2状态保持looking。
3.服务器3启动,发起一次选举,此时服务器1和2都会更改选举票为服务器3,此时投票结果:
服务器1为0票,服务器2为0票,服务器3为3票,服务器3票数过半,当选leader,服务器1,2更改状态为following,服务器3为leading。
4.服务器4启动,发起一次选举,此时服务器123已经不是looking状态,不会更改选举信息,交换选票信息结果,服务器3为3票,服务器4为1票,此时服务器4服从多数,更改选举票为服务器3,并更改状态为following。
服务器5启动,同4一样当小弟。