在乙個分布式集群中負責對其他節點的協調和管理,其他節點都必須聽從主節點的安排。主節點的存在,就可以保證其他節點的有序執行,以及資料庫集群中的寫入資料在每個節點上的一致性。這裡的一致性是指,資料在每個集群節點中都是一樣的,不存在不同的情況。選舉的作用就是選出乙個主節點,由它來協調和管理其他節點,以保證集群有序執行和節點間資料的一致性。
節點的角色有兩種:普通節點和主節點。初始化時,所有節點都是平等 的,都是普通節點,並且都有成為主的權利。但是,當選主成功後,有且僅有乙個節點成為主節點,其他所有節點都是普通節點。當且僅當主節點故障或與其他節點失去聯絡後,才會重新選主。
原則:「長者為大」,意味著它的假設條件是,集群中每個節點均知道其 他節點的 id
raft 演算法是典型的多數派投票選舉演算法,其選舉機制與我們日常生活中的民主投票機制類似,核心思想是「少數服從多數」。也就是說,raft 演算法中,獲 得投票最多的節點成為主。
選舉流程
初始化時,所有節點均為 follower 狀態。
開始選主時,所有節點的狀態由 follower 轉化為 candidate,並向其他節點傳送選舉請求。
其他節點根據接收到的選舉請求的先後順序,回覆是否同意成為主。這裡需要注意的是,在每一輪選舉中,乙個節點只能投出一張票。若發起選舉請求的節點獲得超過一半的投票,則成為主節點,其狀態轉化為 leader,
其他節點的狀態則由 candidate 降為 follower。leader 節點與 follower 節點之間會 定期傳送心跳包,以檢測主節點是否活著。
當 leader 節點的任期到了,即發現其他伺服器開始下一輪選主週期時,leader 節點的狀態由 leader 降級為 follower,進入新一輪選主。
zab(zookeeper atomic broadcast)選舉演算法是為 zookeeper 實現分布式協調功能而 設計的。相較於 raft 演算法的投票機制,zab 演算法增加了通過節點 id 和資料 id 作為參考 進行選主,節點 id 和資料 id 越大,表示資料越新,優先成為主。相比較於 raft 演算法, zab 演算法盡可能保證資料的最新性。所以,zab 演算法可以說是對 raft 演算法的改進。
集群中的節點4種狀態
選舉過程
zab 選舉演算法的核心是「少數服從多數,id 大的節點優先成為主」,因此選舉過程中通過 (vote_id, vote_zxid) 來表明投票給哪個節點,其中 vote_id 表示被投票節點的 id, vote_zxid 表示被投票節點的伺服器 zxid
第一步:當系統剛啟動時,3 個伺服器當前投票均為第一輪投票,即 epoch=1,且 zxid 均為 0。此時每個伺服器都推選自己,並將選票資訊 廣播出
第二步:根據判斷規則,由於 3 個 server 的 epoch、zxid 都相同,因此比較 server_id, 較大者即為推選物件,因此 server 1 和 server 2 將 vote_id 改為 3,更新自己的投票箱並重新廣播自己的投票。
第三步:此時系統內所有伺服器都推選了 server 3,因此 server 3 當選 leader,處於 leading 狀態,向其他伺服器傳送心跳包並維護連線;server1 和 server2 處於 following 狀態。
bully演算法
raft演算法
zab演算法
選舉訊息回覆型別
alive訊息
同意或不同意選舉的訊息
投票資訊
leader選舉機制
偏向於讓id更大的節點作為leader
收到過半數的投票,則當選為leader
傾向於讓資料最新或者id值最大的節點作為leader
選舉過程
選舉所需時間短較短
較長新能
bully
分布式計算(三)分布式的昨天
當今的我們已經處於計算機比較發達的時代,計算機的很多技術已經發展很久,很多我們現在使用的都是在一定基礎結構之上的研究,就好像我們學會了hadoop,webservices.學會了大資料計算,就是掌握了分布式技術嗎?感覺心慌 疑惑。這些疑惑不知道從什麼時候開始的,所以要想弄清是怎麼回事,還是回到遙遠的...
分布式面試題(三) 分布式Memachche
q memcached的 cache機制是怎樣的?memcached主要的 cache機制是lru最近最少用演算法 超時失效。當存資料到 memcached中,可以指定該資料在快取中可以呆多久 如果 memcached的記憶體不夠用了,過期的 slabs會優先被替換,接著就輪到老的未被使用的 sla...
分布式 2分布式事務
分布式 1概述cap和base 分布式 2分布式事務 分布式 3分布式一致性演算法 分布式 4集群 分布式 5服務限流演算法 分布式 6分布式id 分布式 7效能壓測 分布式 8日誌鏈路跟蹤 分布式 9分布式鎖 redis鎖的幾種實現 參考 分布式系統間各種問題 宕機 網路不穩定 本地事務無法滿足需...