1 定时器,一直没收到leader的心跳,就尝试选举自己
image.png image.png2 预选
如果超过半数以上预选成功,才开始正式选举自己。
预选的只是请求中的term加一,但是本地的term不加一,正式的选举本地的term也会加一
image.png
3 正式选举
本地的term加一,超过半数以上的同意,就当选leader。
image.png image.png
4 选举成功,发送心跳给follower
image.pngimage.png
可以看到这里只是定了下次的执行时间,心跳是一直发的,怎么实现一直发的呢
image.png
是在收到心跳结果返回的时候,发起下一次心跳的。
5 follower是如何处理选举请求的
handleRequestVoteRequest方法:
首先,如何term要比自己的大
image.png
其实logid要比自己的大
image.png
可以看到同意后会执行stepDown方法,这个会改变自己的term为请求者的term
image.png
handlePreVoteRequest处理预选的逻辑基本一样,这里就不赘述了。
网友评论