【分布式】Zookeeper的Leader选举-选举过程介绍
选举开始,服务器会各自为自己投票,在投票完成后,会将投票信息发送给集群中的所有服务器(观察者服务器不参与选举)。
选票由两部分组成:服务器唯一标识myid和事务编号zxid,即(myid,xzid)。
zxid越大说明数据越新,在选择算法中的权重越大。
myid越大,在选择算法中的权重越大。
比较选票时会先比较zxid,zxid大的获胜,zxid相同时比较myid,myid大的获胜,胜利方选票不变,失败方选票将变成与胜利方一样,并再次将该投票发送出去。
当有过半机器收到相同的投票信息,则选出Leader,选举结束。
例如:
有A,B,C三台服务器参与竞选,myid分别为1,2,3,zxid分别为9,9,8。
选举过程为:
A收到的选票为(2,9),(3,8),与自己的(1,9)比较,选票变为(2,9),投出。
B收到的选票为(1,9),(3,8),与自己的(2,9)比较,结果不变。
C收到的选票为(1,9),(2,9),与自己的(3,8)比较,选票变为(2,9),投出。
此时B机器拥有过半选票,当选为Leader。
由上面规则可知,通常那台服务器上的数据越新(ZXID会越大),其成为Leader的可能性越大,也就越能够保证数据的恢复。如果ZXID相同,则myid越大机会越大。
参考资料:
http://www.cnblogs.com/leesf456/p/6107600.html
https://www.cnblogs.com/yuyijq/p/4116365.html
http://www.cnblogs.com/ASPNET2008/p/6421571.html
原文地址:http://blog.51cto.com/12434484/2323781