分布式選舉的原因
分布式系統中需要一個主節點,該節點用于負責對其他節點進行協調和管理,同時主節點的存在能夠保證分布式集群資料的一致性,
分布式選舉演算法
1. Bully演算法
選舉原則:偏向于讓ID更大的節點作為集群的leader
前提條件:假設集群中所有節點都知道其他節點的id
訊息型別/節點狀態:
election訊息,用于發起選舉
alive訊息,用于對election訊息的應答
victory訊息,競選成功的主節點向其他節點發送宣誓主權的訊息
選舉程序:
觸發條件: ID比當前主節點大的節點加入集群,主節點故障
具體程序:
(1) 每個節點判斷自己的ID是否最大,最大則直接發送victory訊息
(2) 如果ID不是最大的,則向比自己id大的節點發送election訊息
(3) 在給定時間范圍內,本節點沒有收到其他節點回復的alive訊息,則認為自己是主節點,并向其他節點發送victory訊息;若收到alive訊息,則等待其他節點的victory訊息
(4) 收到比本節點id小的節點發送的election訊息則回復一個alive訊息
優缺點:
優點: 選舉速度快,演算法復雜度低,簡單易實作
缺點:每個節點額外存盤資訊較多,任意一個ID比前主節點大的節點加入時都會觸發重新選舉程序
軟體舉例: MongoDB
2. Raft演算法
選舉原則:獲得多數投票的集群節點成為leader
前提條件:假設集群中所有節點之間都能相互通信
訊息型別/節點狀態:
leader: 主節點
candidate:候選者,每個節點都可以成功候選者
follower:leader的跟隨者
選舉程序:
觸發條件: leader任期到了,新節點加入集群或者主節點故障
具體程序:
(1) 初始化所有節點為follower,開始選舉時有follower轉化為candidate,并向其他節點發送選舉訊息
(2) 收到訊息的節點進行投票,票數超過一半的節點成為主節點,其他節點由candidate降為follower
優缺點:
優點: 選舉速度快,演算法復雜度低,簡單易實作,當有新節點加入或者節點故障恢復時不會觸發真正的切主
缺點:每個節點之間都需要相互通信,所以通信量較大
軟體舉例: ETCD
3. ZAB(Zookeeper Atomic Broadcast)選舉演算法
選舉原則:少數服從多數,節點id大的或者資料最新的優先成為主節點
訊息型別/節點狀態:
投票資訊 <epoch, vote_id, vote_zxID>
leader: 主節點
follower:leader的跟隨者
observer: 觀察者,無投票權
Looking,Following,Leading,Observing
優缺點:
優點: 穩定性較好,性能較好
缺點:容易出現廣播風暴,投票時間較長,復雜度較高
軟體舉例:zookeeper
總結圖

說明:
本文是極客時間付費課程《分布式技術原理與演算法決議》筆記
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/16276.html
標籤:架構設計
上一篇:搭建DevOps模式的專案
下一篇:分布式協調與同步之分布式共識
