Raft算法系列教程1:Leader選舉

一、服務器的三種角色

Raft算法中服務器主要分爲三種角色:LeaderFollowerCandidate,而且三種角色相互獨立,也就是服務器在同一時間內只可能扮演其中一種角色。html

Leader:用於對全部用戶的請求進行處理以及日誌的複製等等。
Follower:不會主動發送消息,只響應來自LeaderCandidate的請求。
Candidate:用於選舉新的Leader。算法

二、任期介紹

Raft 算法將時間劃分紅爲任意不一樣長度的任期(term)。任期用連續的數字進行表示。每個任期的開始都是一次選舉(election),一個或多個候選人會試圖成爲領導人。若是一個候選人贏得了選舉,它就會在該任期的剩餘時間擔任領導人。在某些狀況下,選票會被瓜分,有可能沒有選出領導人,那麼,將會開始另外一個任期,而且馬上開始下一次選舉。Raft 算法保證在給定的一個任期最多隻有一個領導人。服務器

三、網絡狀態

網絡狀態分爲兩種狀況:選舉階段,正常運行階段。備註:網絡狀態還可能會有成員變化階段,暫時先不考慮。網絡

每個任期都是以選舉階段開始。但不必定以正常運行階段結束。在某些狀況下一個完整的任期可能所有爲選舉階段。以下圖:mybatis

 

 

四、選舉階段->正常運行階段

在網絡初始化時,網絡中全部的服務器都以Follower的角色啓動。因爲Follower只被動接收消息,因此全網中全部服務器都處於等待狀態。同時每個服務器都在本地維護一個計時器。計時器的做用很簡單,就是判斷當前階段(選舉階段或正常運行階段)是否超時,而當計時器超時後,任期將會加1。併發

總之,在網絡啓動後全部服務器等待指定長度的一段時間以後,計時器將會超時。這時候計時器超時的服務器將轉換本身的角色爲Candidate,從而進入選舉階段。進入選舉階段的Candidate將會作如下幾件事:日誌

(1)將本身的任期號加1。
(2)爲本身投一票用以選舉出新的Leader。
(3)將本地的計時器重置。
(4)發送投票請求到網絡中的其餘全部的服務器。
(5)等待下一次的計時器超時。code

同時,投票選舉Leader具備如下幾點要求:htm

(1)每一個服務器在一個任期內只能投一票,而且只能投先到者(即投票給本身收到的第一個請求)。若是沒有先到者,只能投票選本身了。
(2)請求投票的消息中須要帶有請求者所處的當前任期號。
(3)投票者只會投票給任期號大於等於本身當前任期號的服務器。blog

在選舉狀態會出現三種結果:

(1)本身成功當選Leader
(2)網絡中其餘服務器當選Leader
(3)網絡中沒有服務器當選Leader

當網絡中某一個Candidate接收到網絡中大多數成員的投票後,便可將本身的身份轉換爲Leader。在當選Leader後,該服務器將週期性地發送心跳信息(心跳信息包含成功當選Leader的服務器的當前任期號)到網絡中其餘服務器。在網絡中其餘的服務器收到心跳信息後檢查心跳消息中的任期號是否大於等於本身的任期號。若是知足該條件的話Candidate將會轉換爲Follower狀態,並重置計時器。而若是任期號小於本身的任期號,服務器將拒絕該心跳消息並繼續處於Candidate狀態。

第三種狀況爲網絡中沒有服務器成功當選Leader。這種狀況在有不少Follower同時成爲Candidate時會發生。由於當角色轉換爲Candidate後將會將選票投給本身,從而致使選票被分散開來,沒有Candidate能夠獲得網絡中大部分節點的選票,從而沒有節點能夠成爲Leader。這種狀況下計時器將再次超時,網絡狀態將從選舉階段進入下一個選舉階段,同時Candidate將會再次執行上面說明的幾件事。

Raft算法採用了隨機選舉超時機制來避免出現這種狀況。即當計時器超時後,服務器將隨機延遲指定的時間後才進入選舉階段。
因爲隨機延遲的緣由,將下降服務器在同一時間選舉超時的狀況,能夠有效避免選票分散的狀況。

五、正常運行階段->選舉階段

Leader成功選舉以後,將週期性發送心跳消息到網絡中其餘服務器。同時其餘服務器將轉換本身的角色爲Follower,而且每次收到心跳消息後都會重置本身的計時器,防止超時再次進入選舉階段。

若是Leader由於特殊狀況崩潰時,網絡中的其餘服務器將再也不接收到心跳消息,在等待指定時間後計時器將會超時,從而再次進入選舉階段。

若是Leader崩潰時間較短,能夠在其餘服務器計時器超時之間恢復,併發送心跳消息,網絡仍然能夠恢復爲Leader崩潰以前的狀態。

若是Leader崩潰時間較長,在網絡中已有新的Leader選舉產生後恢復,因爲舊的Leader任期號將小於新的Leader,在舊的Leader接收到新的Leader發送的心跳消息後則會變爲Follower狀態。

六、參考

http://www.mybatis.cn/archives/1147.html

相關文章
相關標籤/搜索