成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分布式選舉:國不可一日無君

云計算 分布式
Bully 算法是一種用于集群選主的算法,其選舉原則是 “長者為大”,即在存活節點中選擇 ID 最大的節點作為主節點。該算法中節點角色分為普通節點和主節點,初始化時所有節點均為普通節點,主節點故障或失聯后會重新選主。

為什么要有分布式選舉?

在分布式集群中,主節點承擔著對其他節點的協調與管理職責,其他節點需遵循主節點的安排。主節點的存在能夠保障集群內各節點有序運行,確保數據庫集群寫入數據在每個節點保持一致,即各節點數據完全相同。

然而,若主節點發生故障,整個集群將陷入混亂,如同國家皇帝駕崩導致國家大亂。以數據庫集群為例,主節點故障后,各節點數據可能出現不一致的情況。由此可見,在分布式系統中 “集群不可一刻無主” 。而選舉的核心意義就在于推選出主節點,借助主節點對其他節點進行協調管理,從而保障集群穩定有序運行,并維持節點間數據的一致性。

分布式選舉的算法

Bully 算法是一種用于集群選主的算法,其選舉原則是 “長者為大”,即在存活節點中選擇 ID 最大的節點作為主節點。該算法中節點角色分為普通節點和主節點,初始化時所有節點均為普通節點,主節點故障或失聯后會重新選主。

選舉過程依賴 3 種消息:Election 消息用于發起選舉;Alive 消息是對 Election 消息的應答;Victory 消息由競選成功的主節點向其他節點發送,宣告主權。

算法假設集群中每個節點都知曉其他節點的 ID,具體選舉流程為:節點判斷自身 ID 是否最大,若是則直接發送 Victory 消息;若不是,則向 ID 比自己大的節點發送 Election 消息并等待回復。若在規定時間內未收到 Alive 消息,該節點認為自己成為主節點并發送 Victory 消息;若收到比自己 ID 大的節點的 Alive 消息,就等待 Victory 消息;若收到比自己 ID 小的節點的 Election 消息,則回復 Alive 消息,通知對方重新選舉 。

圖片圖片

Bully 算法在開源軟件中得到應用,如 MongoDB 副本集故障轉移功能采用節點最后操作時間戳表示 ID,以時間戳最新且存活的節點為主節點。該算法選舉規則霸道簡單,以活著且 ID 最大的節點為主,其他節點服從。其優點是選舉速度快、算法復雜度低、易實現;缺點是每個節點需掌握全局節點信息,額外信息存儲量大,并且當比當前主節點 ID 大的新節點加入或故障恢復節點重新加入集群時,易觸發重新選舉,若此類節點頻繁退出、加入,會造成主節點頻繁切換 。

民主投票:Raft 算法

Raft 算法是多數派投票選舉算法,選舉機制類似民主投票,核心是 “少數服從多數”,得票最多的節點成為主節點。

該算法中集群節點有 3 種角色:Leader(主節點,同一時刻唯一,負責協調管理其他節點)、Candidate(候選者,節點在此角色下可被選為新 Leader)、Follower(跟隨者,不能發起選舉)。

選舉流程為:初始化時節點都是 Follower 狀態;開始選主時節點轉為 Candidate 并發送選舉請求;其他節點按請求先后順序回復是否同意,且每輪選舉一個節點只能投一票;發起請求的節點獲超半數投票就成為 Leader,其他節點降為 Follower;Leader 和 Follower 間定期發心跳包檢測主節點狀態;當 Leader 任期到,發現其他服務器進入下輪選主周期時,Leader 降為 Follower,開啟新一輪選主。

圖片圖片

Raft 算法每輪選舉中每個節點僅能投一次票,選舉類似人大代表選舉,有選主和任值兩個時間段,選主階段對應投票,任值階段對應主節點任期,正常任期到會觸發重新選舉,若主節點故障則立刻重新選主。

Google 開源的 Kubernetes 擅長容器管理與調度,一般部署 3 個節點用于數據備份,其中 1 個為主節點,其余為備節點。Kubernetes 選主采用開源的 etcd 組件,etcd 的集群管理器 etcds 是高可用、強一致性的服務發現存儲倉庫,運用 Raft 算法實現選主和數據一致性。

小結一下。Raft 算法具有選舉速度快、算法復雜度低、易于實現的優點;缺點是,它要求系統內每個節點都可以相互通信,且需要獲得過半的投票數才能選主成功,因此通信量大。該算法選舉穩定性比 Bully 算法好,這是因為當有新節點加入或節點故障恢復后,會觸發選主,但不一定會真正切主,除非新節點或故障后恢復的節點獲得投票數過半,才會導致切主。

具有優先級的民主投票:ZAB 算法

ZAB 選舉算法是為 ZooKeeper 實現分布式協調功能而設計,是對 Raft 算法的改進,在選主時增加了節點 ID 和數據 ID 作為參考,更注重保證數據的最新性。

使用 ZAB 算法選舉時,集群節點有 Leader(主節點)、Follower(跟隨者節點)、Observer(觀察者,無投票權)三種角色 ,且節點有 Looking(選舉狀態)、Leading(領導者狀態)、Following(跟隨者狀態)、Observing(觀察者狀態)四種狀態。

選舉過程中,每個節點有唯一三元組 (server_id, server_zxID, epoch),其中 server_zxID 越大數據越新、選舉權重越大。ZAB 選舉算法核心是 “少數服從多數,ID 大的節點優先成為主”,通過 (vote_id, vote_zxID) 表明投票對象。選主原則是 server_zxID 最大者成為 Leader,若 server_zxID 相同,則 server_id 最大者成為 Leader。

小結:ZAB 算法性能高,對系統無特殊要求,以廣播方式發送信息,但易引發廣播風暴,因需對比節點 ID 和數據 ID,選舉時間較長。不過該算法選舉穩定性好,新節點加入或故障恢復節點重新加入時,僅當節點數據 ID 和節點 ID 最大且獲過半投票才會切主。

三種選舉算法的對比分析

知識擴展:為什么“多數派”選主算法通常采用奇數節點,而不是偶數節點呢?

圖片圖片

在集群中,當出現兩個節點均獲得一半投票的情況時,究竟該讓哪個節點成為主節點呢?實際上,在這種情形下是無法確定主節點的,必須要進行重新投票選舉。然而,即便是重新開展投票選舉流程,這兩個節點再次擁有相同投票數量的可能性依然很大。鑒于這種情況,多數派選主算法一般都會選用奇數個節點來進行選舉。這也就是為什么我們常常會看到諸如 ZooKeeper、etcd、Kubernetes 等開源軟件,在進行選主操作時均采用奇數個節點的一個關鍵因素。

責任編輯:武曉燕 來源: 二進制跳動
相關推薦

2023-11-28 14:19:42

2025-03-24 11:30:05

2021-12-20 07:51:17

分布式 Kv分布式 Kv

2024-01-10 08:02:03

分布式技術令牌,

2021-08-26 08:03:30

大數據Zookeeper選舉

2021-05-08 19:33:51

移除字符零寬

2022-06-26 00:29:26

分布式系統Redis

2021-01-27 09:45:17

負載均衡

2019-10-10 09:16:34

Zookeeper架構分布式

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2017-09-01 05:35:58

分布式計算存儲

2021-11-22 16:30:30

分布式一致性分布式系統

2018-07-04 06:18:07

2023-10-26 18:10:43

分布式并行技術系統

2017-10-27 08:40:44

分布式存儲剪枝系統

2020-06-23 10:22:58

GitHub代碼開發者

2018-07-17 08:14:22

分布式分布式鎖方位

2024-03-01 09:53:34

2023-05-12 08:23:03

分布式系統網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产1区2区在线观看 | 久久精品色欧美aⅴ一区二区 | 免费在线看黄视频 | 天堂三级 | 成年免费大片黄在线观看一级 | 国产精品国产三级国产aⅴ中文 | 亚洲精品综合 | 网站黄色在线免费观看 | 91精品国产乱码久久久久久久 | 欧美 日韩 国产 成人 | 欧美一区久久 | 日韩第一页| 第一区在线观看免费国语入口 | 91久久国产精品 | 亚洲一区二区三区视频 | 在线观看你懂的网站 | 国产在线高清 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 国产一区高清 | 一区在线视频 | 久操伊人 | 午夜在线免费观看视频 | 户外露出一区二区三区 | 亚洲综合在线视频 | 欧美综合一区 | 久久成人精品视频 | 一区二区三区在线免费观看 | 在线免费黄色 | 中文字幕一区二区三区日韩精品 | 精品视频成人 | 中文字幕日本一区二区 | 99久久久久国产精品免费 | 毛片一区二区三区 | 少妇久久久 | 毛片在线视频 | 欧美h版 | 日本精品视频在线 | 国产在线精品一区二区 | 岛国精品| 免费国产视频 | 亚洲视频一区二区三区 |