Zookeeper与Nacos选举比对
Zookeeper选举
选举过程
zk选举会经过两轮投票(机器1 myid=1;机器2 myid=2;选票格式vote(myid,ZXID)) 1、机器1,发送自己的选票(1,0),收到的选票是(2,0),将收到的票跟自己投出去的票对比,优先选择zxid大的为leader,zxid大的机器包括的数据是最新的,如果zxid一样,默认选myid大的为leader,推荐(2,0)为leader 2、机器2,发送自己的选票(2,0),收到的选票是(1,0),将收到的票跟自己投出去的票对比,推荐(2,0)为leader 3、机器1,发送自己的选票(2,0),收到的选票是(2,0),将收到的票跟自己投出去的票对比,投一台机器的票数已经超过集群的半数,此时选举就结束了,确定(2,0)成为leader 4、机器2,发送自己的选票(2,0),收到的选票是(2,0),将收到的票跟自己投出去的票对比,确定(2,0)成为leader
Nacos选举
选举过程
1、三台机器启动时,各自循环执行任务MasterElection,生成选举时间leaderDueMs(0~15s随机数),循环一次,选举时间减去500ms,直到选举时间小于等于0,则开始发起选举; 2、若机器S1,选举时间先到0,则S1先发起选举,S1先重置自己选举时间leaderDueMs(15~20s随机数),心跳时间heartbeatDueMs(5s) 3、S1先投票给自己,并将自己选举周期Term(S1)加1,状态变为候选者CANDIDATE 4、S1将自己的选票信息发送给其他节点,S2、S3收到选票信息后进行判断,以S2为例 4.1、若收到候选节点S1的周期大于本节点的周期,则投候选节点S1为LEADER,更新自己选举周期为Term(S1),状态为FOLLOWER,并发送自己的选票 4.2、若收到候选节点S1的周期小于本节点的周期,则投自己S2为LEADER,并发送自己的选票 5、S1收到其他节点的选票结果,若超过半数以上机器投S1,则将自己更新为LEADER