ETCD 原始碼學習 Raft 協議介紹(二)

2021-10-10 03:14:11 字數 1286 閱讀 8558

raft協議是分布式一致性協議的一種,所以在了解raft協議之前,我們首先要知道一致性協議的作用。

1.一致性協議用於解決分布式環境下多副本之間資料一致性的問題的。

2.主要包括兩個部分,一是 leader 選舉,二是日誌同步。

3.一致性協議主要包括paxos、zab、raft及 gossip 等

leader:負責處理所有客戶端請求,當接收到客戶的寫入請求時,leader 節點相應追加日誌,然後封裝成訊息傳送給其他 follower 節點。當收到足夠的 follower響應之後,提交日誌。

follower:不傳送任何請求,只是簡單響應來自leader 和 candidate 的請求。不處理任何 client 請求,而是簡單的**給 leader。

candidate:當 follower 長時間沒有收到 leader 傳送的心跳包,會轉換為該狀態,並發起一輪新的選舉。

心跳計時器:leader 節點定時向所有 follower 傳送心跳包,告知 follower leader 存活,避免 follower 發起新一輪選舉。follower在收到心跳包之後,會重置選舉計數器。

選舉計時器:每個 follower 維護乙個選舉計時器,當選舉計時器超時(沒有收到心跳包),狀態切換為candidate,發起一輪新選舉。同時每個 follower 的選舉超時時間是隨機的。

index:事務 id,單調自增,每條訊息都擁有唯一的 id,raft 通過這個實現訊息的有序性和一致性(leader)

term:任期 id,每發起一輪新的選舉,term+1

commitindex:已提交的最大事務 id, 代表過半節點已收到(還沒應用到該節點,比如某些配置資訊)。

matchindex:follower 已匹配的訊息位置,即 leader 已經接收並響應的 id ( leader 會為每個 follower 維護乙份)

發起選舉的條件:follower 選舉計時器超時或者 leader 發現當前活躍且將選票投給它的節點不超過半數。

follower 當選條件:在選舉超時時間內,過半節點投票給了當前節點。

pk:(1) 當前節點的 term>候選節點的 term,拒絕投票給候選節點。    

(2) 當前節點的 term《候選節點的 term,同意投票給候選節點。    

(3) 當前節點的 term=候選節點的 term。對比 index , 如果當前節點 index > 候選節點 index, 拒絕投票,否則,同意投票。

ps:歡迎糾正

ETCD 原始碼學習 Raft 協議選舉過程(六)

在 etcd 原始碼學習過程,不會講解太多的原始碼知識,只講解相關的實現機制,需要關注原始碼細節的朋友可以自行根據文章中的提示,找到相關原始碼進行學習 1.follower 節點擊舉計數器超時,觸發 msghup 訊息,follower 節點接收此訊息時,會發起一輪選舉。2.當 leader 節點擊...

ETCD 原始碼學習 lease 二

在 etcd 原始碼學習過程,不會講解太多的原始碼知識,只講解相關的實現機制,需要關注原始碼細節的朋友可以自行根據文章中的提示,找到相關原始碼進行學習。本文主要介紹 lessor 如果發現過期鍵,server 如何處理過期鍵的過程。lessor goroutine func le lessor ru...

ETCD 原始碼學習 簡述(一)

前段時間認真學習了 etcd 原始碼實現,往後的一段時間,會陸陸續續的寫一些學習記錄。本章主要介紹 etcd 的主要幾個組成部分。ectd主要包括以下幾個部分 儲存包括兩部分組成,記憶體和磁碟。index 鍵值索引 mvcc 多版本控制 kv 原始鍵值對 mvcc 多版本控制 snaphot 資料快...