接下来再我们基于源码来分析leader选举的整个实现过程。
leader选举存在与两个阶段中,一个是服务器启动时的leader选举。 另一个是运行过程中leader节点宕机导致的leader选举 ;
在开始分析选举的原理之前,先了解几个重要的参数
服务器ID(myid)
比如有三台服务器,编号分别是1,2,3。
编号越大在选择算法中的权重越大。
zxid事务id
值越大说明数据越新,在选举算法中的权重也越大
逻辑时钟(epoch – logicalclock)
或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。
选举状态
LOOKING,竞选状态。
FOLLOWING,随从状态,同步leader状态,参与投票。
OBSERVING,观察状态,同步leader状态,不参与投票。
LEADING,领导者状态。