raft的一個基本邏輯是leader隔一段時間給所有的follower發心跳。如果follower長時間沒收到心跳,就認為leader已經掛了,就發起投票選舉新的leader。
在RaftCore的init方法里面
image.png
HeartBeat 就是leader的心跳定時任務
MasterElection 就是follower長時間沒收到心跳就選舉的定時任務
HeartBeat的sendBeat就是具體發送心跳信息了
image.png
follower收到心跳請求的時候
image.png
receivedBeat 方法會執行 resetLeaderDue();
image.png
follower就是根據這個變量判斷是否要重新選leader的。
image.png