一些概念
相比於其餘一致性算法(paxos)的優點
- 更簡單,更容易理解
- 描述得很完備
- 被開源項目實現而且被一些公司採用
- 安全性獲得了證實
- 有效性可與其餘算法相比擬。
最關鍵的優點仍是更容易理解。算法
服務器的三種狀態:Leader, follower, candidate
- Leader: 處理客戶端的請求
- Follower: 僅響應來自leaders和candidates的請求
- Candidate: 選出一個leader.
三種狀態之間的轉換
- 開始時,全部的servers的狀態都是follower;
- 其中一個follower最先發現沒有leader的heartbeat發送過來,這叫times out,而後此follower就轉化爲candidate進入選舉階段。選舉超時,也叫times out。一旦選舉超時,則進入下一個選舉階段;
- 若是一個candidate獲得大多數的投票,則成爲leader;
- 若是leader發現有更高term的server,則自動轉化爲follower;
- 若是candidate發現了當前的leader也轉化爲follower。
Terms
描述
在Raft中term的角色是一個邏輯時鐘
如上圖所示:安全
- term的編號是連續的整數;
- term都是以選舉開始;
- 每一個etcd服務器都存儲當前的term號,並隨時間單調遞增;
- 服務器通訊時都要交換當前的term號;
- 若是服務器的當前term號小於其餘的,則更新到較大的。若是candidate或者leader發現本身的term號過時,則立刻退回到follower的狀態;
- 若是server收到帶有舊的term號的請求,則拒絕。
平票問題
這種狀況下,此任期將無leader選出,一個新的term(選舉)將會立刻開始。Raft會保證在一個給定的term中最多有一個leader。
Raft採用服務器term時長隨機生成的方法來保證總會有一個leader產生。服務器