日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

raft协议 MySQL 切换_Raft 协议实战系列(二)—— 选主

發布時間:2025/3/8 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 raft协议 MySQL 切换_Raft 协议实战系列(二)—— 选主 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注:本文原創,轉載請標明出處。

歡迎轉發、關注微信公眾號:Q的博客。 不定期發送干貨,實踐經驗、系統總結、源碼解讀、技術原理。

本文目的

筆者期望通過系列文章幫助讀者深入理解Raft協議并能付諸于工程實踐中,同時解讀不易理解或容易誤解的關鍵點。

該系列會從原理、源碼、實踐三個部分為大家講解Raft算法,本文為《Raft實戰》系列第二篇:

原理部分我們會結合 Raft 論文講解 Raft 算法思路,整體分篇會遵循 Raft 的模塊化思想,分別講解 Leader election、Log replication、Safety、Cluster membership change、Log compaction 等。

源碼部分我們會通過分析 hashicorp/raft 來學習一個工業界的 Raft 實現,hashicorp/raft 是 Consul 的底層依賴。

實踐部分我們會基于 hashicorp/raft 來實現一個簡單的分布式 kv 存儲,以此作為系列的收尾。

什么是選主

選主(Leader election)就是在分布式系統內抉擇出一個主節點來負責一些特定的工作。在執行了選主過程后,集群中每個節點都會識別出一個特定的、唯一的節點作為leader。

我們開發的系統如果遇到選主的需求,通常會直接基于 zookeeper 或 etcd 來做,把這部分的復雜性收斂到第三方系統。然而作為 etcd 基礎的 raft 自身也存在“選主”的概念,這是兩個層面的事情:基于 etcd 的選主指的是利用第三方 etcd 讓集群對誰做主節點的決策達成一致,技術上來說利用的是 etcd 的一致性狀態機、lease 以及 watch 機制,這個事情也可以改用單節點的 MySQL/Redis 來做,只是無法獲得高可用性;而 raft 本身的選主則指的是在 raft 集群自身內部通過票選、心跳等機制來協調出一個大多數節點認可的主節點作為集群的 leader 去協調所有決策。

當你的系統利用 etcd 來寫入誰是主節點的時候,這個決策也在 etcd 內部被它自己集群選出的主節點處理并同步給其它節點。

Raft 為什么要進行選主?

按照論文所述,原生的 Paxos 算法使用了一種點對點(peer-to-peer)的方式,所有節點地位是平等的。在理想情況下,算法的目的是制定一個決策,這對于簡化的模型比較有意義。但在工業界很少會有系統會使用這種方式,當有一系列的決策需要被制定的時候,先選出一個 leader 節點然后讓它去協調所有的決策,這樣算法會更加簡單快速。

此外,和其它一致性算法相比,raft 賦予了 leader 節點更強的領導力,稱之為 Strong Leader。比如說日志條目只能從 leader 節點發送給其它節點而不能反著來,這種方式簡化了日志復制的邏輯,使 raft 變得更加簡單易懂。

Raft選主過程

下圖的節點狀態轉移圖,我們在前一篇文章已經看到了,但只是做了簡單的描述,接下來我們會結合具體的Leader election細節來深刻理解節點的狀態轉換。

*圖名:節點狀態圖

Follower狀態轉移過程

Raft 的選主基于一種心跳機制,集群中每個節點剛啟動時都是 follower 身份(Step: starts up),leader 會周期性的向所有節點發送心跳包來維持自己的權威,那么首個 leader 是如何被選舉出來的呢?方法是如果一個 follower 在一段時間內沒有收到任何心跳,也就是選舉超時,那么它就會主觀認為系統中沒有可用的 leader,并發起新的選舉(Step: times out, starts election)。

這里有一個問題,即這個“選舉超時時間”該如何制定?如果所有節點在同一時刻啟動,經過同樣的超時時間后同時發起選舉,整個集群會變得低效不堪,極端情況下甚至會一直選不出一個主節點。Raft 巧妙的使用了一個隨機化的定時器,讓每個節點的“超時時間”在一定范圍內隨機生成,這樣就大大的降低了多個節點同時發起選舉的可能性。

*圖解:一個五節點Raft集群的初始狀態,所有節點都是follower身份,term為1,且每個節點的選舉超時定時器不同

若 follower 想發起一次選舉,follower 需要先增加自己的當前 term,并將身份切換為 candidate。然后它會向集群其它節點發送“請給自己投票”的消息(RequestVote RPC)。

*圖解:S1 率先超時,變為 candidate,term + 1,并向其它節點發出拉票請求

Candicate狀態轉移過程

Follower 切換為 candidate 并向集群其他節點發送“請給自己投票”的消息后,接下來會有三種可能的結果,也即上面節點狀態圖中 candidate 狀態向外伸出的三條線。

1. 選舉成功(Step: receives votes from majority of servers)

當candicate從整個集群的大多數(N/2+1)節點獲得了針對同一 term 的選票時,它就贏得了這次選舉,立刻將自己的身份轉變為 leader 并開始向其它節點發送心跳來維持自己的權威。

*圖解:“大部分”節點都給了S1選票

*圖解:S1變為leader,開始發送心跳維持權威

每個節點針對每個 term 只能投出一張票,并且按照先到先得的原則。這個規則確保只有一個 candidate 會成為 leader。

2. 選舉失敗(Step: discovers current leader or new term)

Candidate 在等待投票回復的時候,可能會突然收到其它自稱是 leader 的節點發送的心跳包,如果這個心跳包里攜帶的 term 不小于 candidate 當前的 term,那么 candidate 會承認這個 leader,并將身份切回 follower。這說明其它節點已經成功贏得了選舉,我們只需立刻跟隨即可。但如果心跳包中的 term 比自己小,candidate 會拒絕這次請求并保持選舉狀態。

*圖解:S4、S2 依次開始選舉

*圖解:S4 成為 leader,S2 在收到 S4 的心跳包后,由于 term 不小于自己當前的 term,因此會立刻切為 follower 跟隨S4

3. 選舉超時(Step: times out, new election)

第三種可能的結果是 candidate 既沒有贏也沒有輸。如果有多個 follower 同時成為 candidate,選票是可能被瓜分的,如果沒有任何一個 candidate 能得到大多數節點的支持,那么每一個 candidate 都會超時。此時 candidate 需要增加自己的 term,然后發起新一輪選舉。如果這里不做一些特殊處理,選票可能會一直被瓜分,導致選不出 leader 來。這里的“特殊處理”指的就是前文所述的隨機化選舉超時時間。

*圖解:S1~S5都在參與選舉

*圖解:沒有任何節點愿意給他人投票

*圖解:如果沒有隨機化超時時間,所有節點將會繼續同時發起選舉……

以上便是 candidate 三種可能的選舉結果。

Leader 切換狀態轉移過程

節點狀態圖中的最后一條線是:discovers server with higher term。想象一個場景:當 leader 節點發生了宕機或網絡斷連,此時其它 follower 會收不到 leader 心跳,首個觸發超時的節點會變為 candidate 并開始拉票(由于隨機化各個 follower 超時時間不同),由于該 candidate 的 term 大于原 leader 的 term,因此所有 follower 都會投票給它,這名 candidate 會變為新的 leader。一段時間后原 leader 恢復了,收到了來自新leader 的心跳包,發現心跳中的 term 大于自己的 term,此時該節點會立刻切換為 follower 并跟隨的新 leader。

上述流程的動畫模擬如下:

*圖解:S4 作為 term2 的 leader

*圖解:S4 宕機,S5 即將率先超時

*圖解:S5 當選 term3 的 leader

*圖解:S4 宕機恢復后收到了來自 S5 的 term3 心跳

*圖解:S4 立刻變為 S5 的 follower

以上就是 raft 的選主邏輯,但還有一些細節(譬如是否給該 candidate 投票還有一些其它條件)依賴算法的其它部分基礎,我們會在后續“安全性”一篇描述。

當票選出 leader 后,leader 也該承擔起相應的責任了,這個責任是什么?就是下一篇將介紹的“日志復制”~

歡迎轉發、關注微信公眾號:Q的博客,不定期發送干貨,實踐經驗、系統總結、源碼解讀、技術原理。

總結

以上是生活随笔為你收集整理的raft协议 MySQL 切换_Raft 协议实战系列(二)—— 选主的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99精品在线看 | 午夜精品久久久久久久久久蜜桃 | 18视频在线观看男男 | se综合| 欧美精品xx| 久久综合综合久久 | 手机看片福利一区 | 殴美一级黄色片 | 天堂av亚洲av国产av电影 | 国语对白做受xxxxx在线中国 | 国产精品一区二区黑人巨大 | 变态另类ts人妖一区二区 | 扩阴视频| av免费观看网址 | 99热影院| 日本护士体内she精2xxx | 日日狠狠 | 久色成人 | 欧美在线色| 91新网站 | 日韩欧美一区在线 | 欧美黄色免费在线观看 | 中文字幕一区二区在线观看视频 | 亚洲精品福利 | 国产精品无码影院 | 成人区人妻精品一熟女 | 日韩一区欧美二区 | 亚洲v欧美v另类v综合v日韩v | 欧美日韩国产在线 | 午夜影院试看 | 成人污污视频 | chien国产乱露脸对白 | 人妻射精一区二区 | 99在线观看免费 | 日韩精品免费在线视频 | 麻豆传媒在线播放 | 日韩射| 黄色av网站免费在线观看 | www日本在线观看 | 日韩欧美网站 | 美女光屁股视频 | 精品一区国产 | 国产一区二区三区免费观看视频 | 国产麻豆久久 | 瑟瑟久久 | 无码国产精品一区二区免费式直播 | 日韩伦人妻无码 | 美女扒开尿口给男人看 | 奇米视频在线 | 99久久久无码国产精品衣服 | 一区二区三区在线观看免费 | 中文无码av一区二区三区 | 91一区二区视频 | 五月激情天| 欧美网站免费 | 四虎一国产精品一区二区影院 | 亚洲午夜不卡 | 日韩一级免费毛片 | 亚洲成人激情在线 | av之家在线 | 极品少妇xxxx精品少妇 | 免费爱爱网站 | 致命魔术电影高清在线观看 | 欧美一区二区不卡视频 | 99香蕉视频 | 夜夜添无码一区二区三区 | 日本成人一级片 | 国产精品又黄又爽又色无遮挡 | 一本一道人人妻人人妻αv 九一在线视频 | 天天爽夜夜爽视频 | 欧美囗交做爰视频 | 美女视频久久久 | 老司机精品视频在线播放 | 国产不雅视频 | www.久久久久久久久 | aaa级黄色片| 老师上课夹震蛋高潮了 | 中文字幕十一区 | 久草av在线播放 | 黄色大毛片 | 国产福利一区二区三区视频 | 美女爱爱爱 | 日日不卡av | 91精品国产综合久久精品图片 | 国产在线一区二 | 激情内射人妻1区2区3区 | av影片在线播放 | 成人精品黄段子 | 美女光屁股视频 | 欧洲做受高潮欧美裸体艺术 | 狠狠干视频网 | 亚洲成av人片在线观看无码 | 国精产品一区一区三区在线 | 日韩欧美一区二区三区四区五区 | a√在线视频 | 麻豆成人精品 | 自拍偷拍亚洲欧洲 | 向日葵视频在线 | 69超碰|