看了一些raft的文章,這篇講的感覺比較清楚,首先推薦去看這篇:一文搞懂raft算法,這個動畫演示可以幫助你理解raft:raft演示
raft協(xié)議講的就是一個分布式的系統(tǒng)如何處理達成一致的:
- 選舉出一個leader酸休,系統(tǒng)數(shù)據(jù)以leader為準(zhǔn)乞巧。
- leader提交數(shù)據(jù)時分為兩階段提交口蝠,一階段預(yù)提交成功后(超過半數(shù)節(jié)點預(yù)提交成功器钟,沒成功的會一直發(fā)送同步請求),將major日志提交妙蔗,之后返回客戶端寫成功傲霸,之后進行follower的二階段更新。
- leader轉(zhuǎn)換成follower的條件是收到來自更高term的消息眉反,這種情況一般出現(xiàn)在網(wǎng)絡(luò)分割的情況昙啄,被隔離的網(wǎng)絡(luò)自己重新選舉了新的leader,在恢復(fù)后就會重新進行選舉禁漓。
如何選舉:
每個raft節(jié)點有三種狀態(tài)跟衅,leader,follower,candidate,最開始沒有l(wèi)eader的時候播歼,每個都是follower伶跷,進行一次投票后變?yōu)閏andidate,等待下一輪投票(如果本輪沒有選出leader),每輪投票稱為一輪term秘狞。
一個完整的提交流程: - leader append log entry
- leader issue AppendEntries RPC in parallel
- leader wait for majority response
- leader apply entry to state machine
- leader reply to client
- leader notify follower apply log