raft zab協(xié)議分析

raft

在Raft中,任何時候一個服務器可以扮演下面角色之一:

  1. Leader: 處理所有客戶端交互雳灾,日志復制等漠酿,一般一次只有一個Leader.
  2. Follower: 類似選民,完全被動
  3. Candidate候選人: 類似Proposer律師谎亩,可以被選為一個新的領導人炒嘲。

raft 分為2個階段 選舉和恢復

選舉

  1. 每個服務器都可以成為Candidate宇姚,向其他follower發(fā)送請求,要求選擇我
  2. 其他服務器同意夫凸,發(fā)送ok. 注意如果在這個過程中浑劳,有一個Follower當機,沒有收到請求選舉的要求夭拌,因此候選者可以自己選自己魔熏,只要達到N/2 + 1 的大多數(shù)票,候選人還是可以成為Leader的

恢復

  1. 新leader向follower發(fā)出指令鸽扁,進行操作蒜绽,比如日志復制
  2. leader和follower之間進行心跳聯(lián)系,如果有l(wèi)eader奔潰后桶现,重新選舉
image.png

Splite Vote是因為如果同時有兩個候選人向大家邀票躲雅,這時通過類似加時賽來解決,兩個候選者在一段timeout比如300ms互相不服氣的等待以后骡和,因為雙方得到的票數(shù)是一樣的吏夯,一半對一半,那么在300ms以后即横,再由這兩個候選者發(fā)出邀票噪生,這時同時的概率大大降低,那么首先發(fā)出邀票的的候選者得到了大多數(shù)同意东囚,成為領導者Leader跺嗽,而另外一個候選者后來發(fā)出邀票時,那些Follower選民已經(jīng)投票給第一個候選者页藻,不能再投票給它桨嫁,它就成為落選者了,最后這個落選者也成為普通Follower一員了份帐。

Term
  在Raft中使用了一個可以理解為周期(第幾屆璃吧、任期)的概念,用Term作為一個周期废境,每個Term都是一個連續(xù)遞增的編號畜挨,每一輪選舉都是一個Term周期,在一個Term中只能產(chǎn)生一個Leader噩凹;先簡單描述下Term的變化流程: Raft開始時所有Follower的Term為1巴元,其中一個Follower邏輯時鐘到期后轉換為Candidate,Term加1這是Term為2(任期)驮宴,然后開始選舉逮刨,這時候有幾種情況會使Term發(fā)生改變:
  1:如果當前Term為2的任期內(nèi)沒有選舉出Leader或出現(xiàn)異常,則Term遞增堵泽,開始新一任期選舉
  2:當這輪Term為2的周期選舉出Leader后修己,過后Leader宕掉了恢总,然后其他Follower轉為Candidate,Term遞增睬愤,開始新一任期選舉
  3:當Leader或Candidate發(fā)現(xiàn)自己的Term比別的Follower小時Leader或Candidate將轉為Follower离熏,Term遞增
  4:當Follower的Term比別的Term小時Follower也將更新Term保持與其他Follower一致;
  可以說每次Term的遞增都將發(fā)生新一輪的選舉戴涝,Raft保證一個Term只有一個Leader,在Raft正常運轉中所有的節(jié)點的Term都是一致的钻蔑,如果節(jié)點不發(fā)生故障一個Term(任期)會一直保持下去啥刻,當某節(jié)點收到的請求中Term比當前Term小時則拒絕該請求进萄;

3树埠、選舉(Election)
  Raft的選舉由定時器來觸發(fā),每個節(jié)點的選舉定時器時間都是不一樣的鳄袍,開始時狀態(tài)都為Follower某個節(jié)點定時器觸發(fā)選舉后Term遞增窗怒,狀態(tài)由Follower轉為Candidate映跟,向其他節(jié)點發(fā)起RequestVote RPC請求,這時候有三種可能的情況發(fā)生:
  1:該RequestVote請求接收到n/2+1(過半數(shù))個節(jié)點的投票扬虚,從Candidate轉為Leader努隙,向其他節(jié)點發(fā)送heartBeat以保持Leader的正常運轉
  2:在此期間如果收到其他節(jié)點發(fā)送過來的AppendEntries RPC請求,如該節(jié)點的Term大則當前節(jié)點轉為Follower辜昵,否則保持Candidate拒絕該請求
  3:Election timeout發(fā)生則Term遞增荸镊,重新發(fā)起選舉
  在一個Term期間每個節(jié)點只能投票一次,所以當有多個Candidate存在時就會出現(xiàn)每個Candidate發(fā)起的選舉都存在接收到的投票數(shù)都不過半的問題堪置,這時每個Candidate都將Term遞增躬存、重啟定時器并重新發(fā)起選舉,由于每個節(jié)點中定時器的時間都是隨機的舀锨,所以就不會多次存在有多個Candidate同時發(fā)起投票的問題岭洲。

什么時候選舉

1:Raft初次啟動,不存在Leader坎匿,發(fā)起選舉盾剩;
2:Leader宕機或Follower沒有接收到Leader的heartBeat,

  1. 發(fā)生election timeout從而發(fā)起選舉;

zab

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末替蔬,一起剝皮案震驚了整個濱河市彪腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进栽,老刑警劉巖德挣,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異快毛,居然都是意外死亡格嗅,警方通過查閱死者的電腦和手機番挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屯掖,“玉大人,你說我怎么就攤上這事贴铜》嗾” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵绍坝,是天一觀的道長徘意。 經(jīng)常有香客問我,道長轩褐,這世上最難降的妖魔是什么椎咧? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮把介,結果婚禮上勤讽,老公的妹妹穿的比我還像新娘。我一直安慰自己拗踢,他們只是感情好脚牍,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巢墅,像睡著了一般莫矗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砂缩,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天作谚,我揣著相機與錄音,去河邊找鬼庵芭。 笑死妹懒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的双吆。 我是一名探鬼主播眨唬,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼好乐!你這毒婦竟也來了匾竿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔚万,失蹤者是張志新(化名)和其女友劉穎岭妖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡昵慌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年假夺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斋攀。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡已卷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淳蔼,到底是詐尸還是另有隱情侧蘸,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布鹉梨,位于F島的核電站讳癌,受9級特大地震影響,放射性物質發(fā)生泄漏俯画。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一司草、第九天 我趴在偏房一處隱蔽的房頂上張望艰垂。 院中可真熱鬧,春花似錦埋虹、人聲如沸猜憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胰柑。三九已至,卻和暖如春爬泥,著一層夾襖步出監(jiān)牢的瞬間柬讨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工袍啡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踩官,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓境输,卻偏偏與公主長得像蔗牡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗅剖,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容