首頁>技術>

Raft透過心跳機制發起leader選舉。節點都是從follower狀態開始的,如果收到了來自leader或candidate的RPC,那它就保持follower狀態,避免爭搶成為candidate。Leader會發送空的AppendEntries RPC作為心跳訊號來確立自己的地位,如果follower一段時間(election timeout)沒有收到心跳,它就會認為leader已經掛了,發起新的一輪選舉。

選舉發起後,一個follower會增加自己的當前term編號並轉變為candidate。它會首先投自己一票,然後向其他所有節點並行發起RequestVote RPC,之後candidate狀態將可能發生如下三種變化:

贏得選舉,成為leader: 如果它在一個term內收到了大多數的選票,將會在接下的剩餘term時間內稱為leader,然後就可以透過傳送心跳確立自己的地位。(每一個server在一個term內只能投一張選票,並且按照先到先得的原則投出)其他server成為leader:在等待投票時,可能會收到其他server發出AppendEntries RPC心跳訊號,說明其他leader已經產生了。這時透過比較自己的term編號和RPC過來的term編號,如果比對方大,說明leader的term過期了,就會拒絕該RPC,並繼續保持候選人身份; 如果對方編號不比自己小,則承認對方的地位,轉為follower.選票被瓜分,選舉失敗: 如果沒有candidate獲取大多數選票, 則沒有leader產生, candidate們等待超時後發起另一輪選舉. 為了防止下一次選票還被瓜分,必須採取一些額外的措施, raft採用隨機election timeout的機制防止選票被持續瓜分。透過將timeout隨機設為一段區間上的某個值, 因此很大機率會有某個candidate率先超時然後贏得大部分選票.

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 通用原始碼閱讀mybatis原始碼詳解:MyBatis執行初探