天天看點

raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限

Raft算法是強上司模型,叢集中隻能有一個上司。

下面是raft的視訊講解:

raft

raft的三種角色及其概念

伺服器節點狀态一共有三種:上司者(Leader)、跟随着(Follower)、候選人(Candidate)

跟随者:接受和處理來自上司者的消息,當等待上司者心跳資訊逾時時,推薦自己當候選人

候選人:向其他節點發送請求投票的RPC消息,通知其他節點來投票,如果赢得了大多數選票,就晉升當上司者

上司者:處理寫請求、管理日志複制、不斷發送心跳資訊,表示自己還活着,不要發起新的選舉

選舉上司者的過程

初始狀态:所有節點都是跟随者

Raft算法特性時随機逾時時間,每個節點等待上司者節點心跳資訊的逾時時間間隔是随機的。

叢集中沒有上司者時,等待逾時時間最小的節點會因為沒有等到上司者心跳資訊,發生逾時。

逾時自薦

此時該節點就會增加自己的任期編号,并推舉自己為候選人,先給自己投一張選票,然後向其他節點發送請求投票RPC消息,請它們選舉自己為上司者。

選舉投票

其他節點接受到候選人的RPC消息時,并且在編号為1的任期内,沒有投過票,那麼就把選票投給該候選人,然後增加自己的任期編号。

raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限
圖1 初始狀态
raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限
圖2 逾時自薦
raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限
圖3 選舉投票

新上司産生

候選人在選舉逾時時間内赢得了大多數的選票,那麼它就會成為本屆任期内新的上司者。

新上司威懾維權

上司者将周期性地發送心跳消息,通知其他伺服器我是上司者,阻止跟随者發起新的選舉,篡權。

raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限
圖1 初始狀态
raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限
圖2 逾時自薦

選舉細節

1、節點間通訊方式

Raft裡,伺服器節點間溝通聯絡采用的是遠端過程調用(RPC),在上司選舉中,需要用到兩類RPC:

1、請求投票(RequestVote)RPC,由候選人在選舉期間發起,通知各個節點進行投票

2、日志複制(AppendEntries)RPC,由上司者發起,用來複制日志和提供心跳資訊

2、關于任期的rules

Raft算法中的上司者是有任期的,每個任期由單調遞增的數字(任期編号)辨別。任期編号會随着選舉的進行而變化。

Raft 算法中的任期不隻是時間段,而且任期編号的大小,會影響上司者選舉和請求的處理。

1、跟随者在等待上司者心跳資訊逾時後,推舉自己為候選人,會增加自己的任期号。(在推舉自己的時候就會++了)

2、一個伺服器節點若檢測到自己任期編号比其他節點小,更新自己的編号到較大的編号值

3、若一個候選人或者上司者檢測到自己任期編号比其他節點小,會将自己恢複成跟随着狀态。是以,raft 不相容作惡節點。 隻要有一個作惡節點發送“任期編号更大“的心跳消息,立馬就能讓這個叢集變成無 leader 的,進而無法工作

4、如果一個節點接收到一個包含較小的任期編号值的請求,那麼它會直接拒絕這個請求。

3、關于選舉的rules

1、上司者周期性向所有跟随者發送心跳資訊(不包含日志複制RPC消息)

2、如果在指定時間内,跟随者沒有結收到上司者的消息,那麼就自薦,發起上司者選舉

3、在一次選舉中,赢得大多數選票的候選人,将晉升為上司者

4、一個任期内,上司者會一直是上司者,直到它自身出現當機等問題。當然如果出現網絡延遲,也會出現重新選舉的情況‘

5、在一次選舉中,每一個伺服器節點最多會對一個任期編号投出一張選票,并且按照“先來先服務”的原則進行投票。

如下圖:

raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限

6、日志完整性高的跟随者拒絕投票給日志完整性低的候選人,即如果日志不完整的請求當主節點,如果目前的節點日志比他完整,那麼就會拒絕給他投票

raft算法學習(一):角色概念以及選舉過程raft的三種角色及其概念選舉上司者的過程選舉細節關于raft的上司者選舉限制和局限

4、随即逾時解決選票瓜分現象

• 跟随者等待上司者心跳資訊逾時的時間間隔,是随機的

• 當沒有候選人赢得過半票數,選舉無效了,這時需要等待一個随機時間間隔,也就是說,等待選舉逾時的時間間隔,是随機的

關于raft的上司者選舉限制和局限

1.讀寫請求和資料轉發壓力落在上司者節點,導緻上司者壓力。

2.大規模跟随者的叢集,上司者需要承擔大量中繼資料維護和心跳通知的成本。

3.上司者單點問題,故障後直到新上司者選舉出來期間叢集不可用。

4.随着候選人規模增長,收集半數以上投票的成本更大。

繼續閱讀