Zookeeper的leader选举算法

337 阅读1分钟

fastleaderelection算法

每个节点除了zxid,还会有一个sid(节点的唯一标识),生成的选票为(sid,zxid)

有两种情况:启动时选举与运行时选举

概念:

外部投票:其他服务器发来的投票

内部投票:服务器自身当前的投票

选举轮次:leader周期,即可以理解为epoch

pk:比较外部投票与内部投票,确定是否变更内部投票

过程:

1、每个节点初始化自己的选票(sid,zxid,当前节点选举轮次,被推举的服务器选举轮次,状态(looking))

2、发送初始化选票

3、接受外部投票

4、判断选举轮次,进行PK

5、变更投票,重新发送

6、归档,每个节点会将收到的所有外部投票进行归档

7、统计,判断是否有过半的服务器认可当前的内部投票,如果是则终止。

集群中的每个节点都会产生一个投票,投票内容为[SID,ZXID],当集群中的每个机器收到了所有的投票之后,首先会
选择一个ZXID最大的投票,若ZXID相同,则选择SID最大的投票。若本机器不是最大的则将投票内容更新重新发送给集
群中的其他节点。
每次投票后,集群中的每个节点都会统计投票。若某个投票的数量超过了集群数量的一半,则将该机器选为leader。