圖解Raft領導者選舉,這裏經過五張圖來解答Raft選舉的全過程;網絡
Raft集羣各個節點之間是經過RPC通信傳遞消息的,每一個節點都包含一個RPC服務端與客戶端,初始時啓動RPC服務端、狀態設置爲Follower、啓動選舉定時器,每一個Raft節點的選舉定時器超時時間都在100-500毫秒之間且並不一致;日誌
Raft節點啓動後在一個選舉定時器週期內未收到心跳和投票請求,則狀態轉爲候選者candidate狀態、term自增、向Raft集羣中全部節點發送投票請求而且重置選舉定時器;blog
Raft節點收到投票後對比當前term、votedFor、日誌項信息判斷以爲是否接受該投票請求,在此過程當中如節點收到其餘領導者的附加日誌信息PRC請求如該term比本身大則接受改請求轉爲Follower狀態,不然拒絕並保持候選人狀態;get
當前因爲每次選舉超時發起投票請求都會增長term,而term又會致使Raft節點收到影響,因此出現網絡分區後term增長到足夠大後從新加入Raft集羣時會致使集羣可用性受到影響;it
爲了解決網絡分區可能形成的影響這時在正式發起投票請求前引入了一個用於確認是否能成爲Leader的PrevoteRPc請求;class
參考資料:
http://ramcloud.stanford.edu/raft.pdfpdf
文章首發地址:Solinx
http://www.solinx.co/archives/1209集羣