Zookeeper理解 ZAB協議

2021-10-06 02:38:29 字數 1455 閱讀 1556

zab協議

協議介紹

關鍵字:過半數節點

訊息廣播

順序性保證

奔潰恢復

基本特性

leader選舉

資料同步

丟棄資料 結論

深入zab協議

系統模型

//存在任意q q是 ∏ 的子集

∧ ∀q,q ⊆ ∏

//存在任意時候的q1 q2,他們的交集不等於空集合(此處的意義在於q1或q2 任意乙個都超過半數,應此不管如何去交集都能得到乙個子集合,極端情況是正好半數多乙個元素的情況)

∧ ∀q1和q2, q1∩q2≠∅

完整性

前置性問題描述

主程序週期 事物

演算法描述

術語名說明f.p

follower f處理過的最後乙個事務proposal

f.zxid

follower f處理過的歷史事務proposal中最後乙個proposal的事務表示zxid

h_f每乙個follower f通常都已經處理(接受)了不少事務proposal,並且會有乙個針對已經處理過的事務的集合,將其表示為hf,表示follower f已經處理過的事務的序列

i_e初始化歷史記錄,在某個主程序週期epoch中,當準leader完成階段一之後,此時他的h_f就被標記為i_e

階段一:發現

當leader l接受到來自過半follower的確認訊息ack後,leader l就會從這過半伺服器中選取出乙個follower f,使用他的i_e最為初始化事務結婚i_e』

關於這個follower f的選取對於quorum中其他任意乙個follower f』 ,f需要滿足以下兩個條件中的乙個:

//任意follower f'的epoch主節點週期值小於 follower f主節點週期值(主節點週期值也就是leader節點序列號每次選舉+1這個)

cepoch

(f'.p)

<

cepoch

(f.p)

//如果兩節點follower f與follower f'的epoch值相同也就是在同乙個主節點週期,那麼我們比較follower f'處理的最後乙個事務的zxid要小於 選出來的follower f處理的最後乙個事務的zxid,也就是我們選出來的必然是up集合中擁有最大zxid事務的follower節點,或者兩個都相同則都可以是leader列表的備選

(cepoch

(f'.p) = cepoch(f.p)) & ( f'

.zxid < f.zxid 或 f'.zxid = f.zxid)

階段二:同步

階段三:廣播 總結

如下圖是以上三個流程總結,各個訊息說明如下:

Zookeeper原子廣播Zab

zookeeper的原子廣播 zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做zab協議。zab協議有兩種模式,它們分別是恢復模式 選主 和廣播模式 同步 當服務啟動或者在領導者崩潰後,zab就進入了恢復模式,當領導者被選舉出來,且大多數serve...

Zookeeper集群搭建以及zab協議

單機環境下,jdk zookeeper安裝完畢,基於一台虛擬機器,進行zookeeper的偽集群搭建,zookeeper集群中包含三個節點,節點對外提供服務埠號分別為2181,2182,2183 基於zookeeper 3.4.10複製三份zookeeper安裝好的伺服器檔案,目錄名稱分別為zook...

怎麼理解 ZAB 協議?

zab協議是為分布式協調服務 zookeeper 專門設計的一種支援崩潰恢復的原子廣播協議。zab 協議包括兩種基本的模式 崩潰恢復 和 訊息廣播。當整個 zookeeper 集群 剛剛啟動或者 leader 伺服器宕機 重啟或者網路故障導致不存在過半的伺服器與 leader 伺服器保持正常通訊時,...