本文共 650 字,大约阅读时间需要 2 分钟。
选举开始,每台服务器都有一张选票,并且会投自己,选自己当选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越大机会越大。
参考资料:
转载于:https://blog.51cto.com/12434484/2323781