nacos集群 raft协议下选举原理(cp模式)

nacos集群节点每个节点都有随机休眠时间,此时每个节点都是follower角色,谁先休眠结束唤醒来,谁先发起选举投票,此时该节点会更改乘candidate(候选者,选举者)角色,发起投票(调用/raft/vote接口)的会先给自己发送一票,然后发送投票给其他节点,其他节点还在如果还在休眠中,则会默认认可发起者为leader,则会返回投票个给发起者,根据选举半数原则,达到投票半数以上,此时发起者会变成leader,代码其实使用countDownLatch计数去实现的,自己投票countDown一次,其他节点在进行投票countDown;如果发起投票的时候,其他节点也休眠唤醒了,也会发起投票给其他节点,相当于两个节点同时在发起投票,这种情况的选举无效,需要重新休眠发起选举。

成为leader的节点,处理nacos客户端发送来的数据,如果请求到了其他节点,也要转发给leader处理。

RAFT协议只会一个节点发起投票,与ZAB选举不一样的是,ZAB每个节点都会发起选举投票,节点间会进行pk,zid和myid和数据进行比较。

猜你喜欢

转载自blog.csdn.net/XiWangDeFengChe/article/details/121874847