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。