ZooKeeper 第二節 ZooKeeper集群

2021-10-09 14:18:11 字數 4504 閱讀 8634

1、 zookeeper 有兩種執行模式:

1)單機模式    standalone    只有乙個server,測試用,不支援高可用

2)集群模式 執行在一群機器上成為 zookeeper 集群,支援高可用

2、 zookeeper 集群通常由 2n+1 臺 server 組成,每個 server 都知道彼此的存在。只要有 n+1 臺(大多數) server 可用,整個系統就可用

3、 集群角色

leader 角色,是整個 zookeeper 集群的核心,主要的工作任務有兩項

1)事務請求的唯一排程和處理者,保證集群事務處理的順序性

2)集群內部各伺服器的排程者

follower 角色

1)處理客戶端非事務請求、**事務請求給 leader 伺服器

2)參與事務請求 proposal 的投票(leader 發起的提案,要求 follower 投票,需要半數以上伺服器通過才能通知 leader commit 資料 )

3)參與 leader 選舉的投票

observer 角色

1)observer 是 zookeeper3.3 開始引入的乙個全新的伺服器角色,觀察者角色。觀察 zookeeper 集群中最新的狀態變化,並將這些狀態變化同步到 observer 伺服器上 

2)observer 的工作原理與 follower 角色基本一致,和 follower 角色唯一的不同在於 observer 不參與任何形式的投票(事務請求投票、leader 選舉投票)

3)observer 伺服器只提供非事務請求服務,通常在於不影響集群事務處理能力的前提下提公升集群非事務處理的能力    

4、 zookeeper 主要是解決分布式環境下的服務協調問題

1)防止單點故障 —— 用集群來解決

2)集群需要保證每個節點資料的一致性 —— leader 節點負責協調和資料同步操作

3)如何選舉出 leader 節點,以及 leader 掛了以後,如何恢復? zookeeper 用了基於 paxos 理論所衍生出來的 zab 協議(zab 理論來做選舉)

5、 一致性分類:

從系統外部讀取系統內部的資料時,在一定約束條件相同的情況下,資料變動在系統內部各節點之間應該是同步的。根據一致性的強弱程度不同,分為如下五個級別:

1)強一致性(strong consistency)。任何時刻,任何使用者都能讀取到最近一次成功更新的資料

2)單調一致性(monotonic consistency)。任何時刻,任何使用者一旦讀到某個資料在某次更新後的值,就不會再讀到比這個值更舊的值。可獲取的資料順序必是單調遞增的。

3)會話一致性(session consistency)。任何使用者在某次會話中,一旦讀到某個資料在某次更新後的值,那麼在本次會話中就不會再讀到比這個值更舊的值。

會話一致性是在單調一致性的基礎上進一步放鬆約束,只保證單個使用者單個會話內的單調性,在不同使用者或同一使用者不同會話間則沒有保障。

4)最終一致性(eventual consistency)。使用者只能讀到某次更新後的值,但系統保證資料將最終達到完全一致的狀態,只是所需時間不能保障。

5)弱一致性(weak consistency)。使用者無法在確定時間內讀到最新更新的值

6、 zookeeper 從以下幾點保證了資料的一致性

1)順序一致性:客戶端的更新都會按其傳送順序被提交。

如乙個客戶端將znode z的值更新為a,之後又將z的值更新為b,那麼沒有客戶端能夠在看到z的值為b之後再看到z的值為a。

2)原子性:每個更新要麼成功,要麼失敗

3)單一系統映像:乙個客戶端無論連線到哪一台伺服器,它看到的都是同樣的系統檢視。

如果乙個客戶端在同乙個會話中連線到一台新的伺服器,它所看到的系統狀態不會比在之前伺服器上所看到的更老。當一台伺服器出現故障,

導致它的乙個客戶端需要嘗試連線集合體中其他的伺服器時,所有滯後於故障伺服器的伺服器都不會接受該連線請求,除非這些伺服器趕上故障伺服器。

4)永續性:乙個更新一旦成功,其結果就會持久存在並且不會被撤銷。這表明更新不會受到伺服器故障的影響。

7、 paxos 演算法就是一種基於訊息傳遞模型的一致性演算法。paxos 演算法適用的幾種情況:

1)一台機器中多個程序/執行緒達成資料一致

2)分布式檔案系統或者分布式資料庫中多客戶端併發讀寫資料

3)分布式儲存中多個副本響應讀寫請求的一致性

8、 zab 協議 (zookeeper atomic broadcast)

zab 協議是為分布式協調服務 zookeeper 專門設計的一種支援崩潰恢復的原子廣播協議。zookeeper 主要依賴 zab 協議來實現分布式資料一致性,

基於該協議 zookeeper 實現了一種主備模式的系統架構來保持集群中各個副本之間的資料一致性。

9、 zab 兩個保證    :

1)已經被處理的訊息不能丟失

2)被丟棄的訊息不能再次出現

10、zab 協議包含兩種基本模式:

1)崩潰恢復模式        產生新的 leader,完成資料同步

2)原子廣播模式        zxid 是乙個全域性唯一的64 位自增 id

11、zxid 是全域性唯一的64 位自增 id,高 32 位是 epoch 編號,每經過一次 leader 選舉產生乙個新的 leader 會將 epoch 編號 +1 ,

低 32 位是訊息計數器,每接收到一條訊息這個值 +1 ,新 leader 選舉後這個值重置為 0。

12、epoch +1的好處是老的 leader 掛了以後重啟,它不會被選舉為 leader,因為此時它的 zxid 肯定小於當前新 leader 的zxid。

當老的 leader 作為 follower 接入新的 leader 後,新 leader 會讓它將所擁有的舊 epoch 號的未被 commit 的投票清除

13、伺服器啟動時的 leader 選舉 (伺服器執行期間的 leader 選舉和啟動時期的 leader 選舉基本過程是一致的)

優先檢查 zxid,zxid 比較大的伺服器優先作為leader

如果 zxid 相同,那麼就比較 myid。 myid 較大的伺服器作為 leader 伺服器

leader 選舉演算法能夠保證新選舉出來的 leader 伺服器擁有集群中所有機器最高編號(zxid 最大)

14、leader 選舉的狀態:looking、leading、following、observering

15、zookeeper 提供了三種 leader 選舉機制:

leaderelection  

authfastleaderelection

fastleaderelection (最新預設)    

16、選舉流程簡述

目前有5臺伺服器,每台伺服器均沒有資料,它們的編號分別是1,2,3,4,5,按編號依次啟動,它們的選擇舉過程如下:

伺服器1啟動,給自己投票,然後發投票資訊,由於其它機器還沒有啟動所以它收不到反饋資訊,伺服器1的狀態一直屬於 looking (選舉狀態)。

伺服器2啟動,給自己投票,同時與之前啟動的伺服器1交換結果,由於伺服器2的編號大所以伺服器2勝出,但此時投票數沒有大於半數,所以兩個伺服器的狀態依然是 looking 。

伺服器3啟動,給自己投票,同時與之前啟動的伺服器1,2交換資訊,由於伺服器3的編號最大所以伺服器3勝出,此時投票數正好大於半數,所以伺服器3成為領導者,伺服器1,2成為小弟。

伺服器4啟動,給自己投票,同時與之前啟動的伺服器1,2,3交換資訊,儘管伺服器4的編號大,但之前伺服器3已經勝出,所以伺服器4只能成為小弟。

伺服器5啟動,後面的邏輯同伺服器4成為小弟。

17、服務腦裂 :

18、當乙個事務操作涉及到跨節點的時候,就需要用到分布式事務,分布式事務的資料一致性協議有 2 pc 協議和3 pc 協議。

19、2 pc 提交 (two phase commitment protocol)

因為整個事務是分為兩個階段提交,所以叫 2pc。

階段一:提交事務請求(投票),事務詢問、執行事務、各個參與者向協調者反饋事務詢問的響應

階段二:執行事務提交(提交事務或中斷事務)

20、zookeeper 實現分布式事務:

1)客戶端先給 zookeeper 節點傳送寫請求

2)zookeeper 節點將寫請求**給 leader 節點,leader 廣播給集群要求投票,等待確認

3)leader 收到確認,統計投票,票數過半則提交事務

4)事務提交成功後,zookeeper 節點告知客戶端

21、zookeeper 實現分布式鎖:

1)客戶端連線 zookeeper,並在 /lock 下建立臨時的且有序的子節點,第乙個客戶端對應的子節點為 /lock/lock-10000000001,第二個為 /lock/lock-10000000002,以此類推。

2)客戶端獲取 /lock 下的子節點列表,判斷自己建立的子節點是否為當前子節點列表中序號最小的子節點,如果是則認為獲得鎖,

否則監聽剛好在自己之前一位的子節點刪除訊息,獲得子節點變更通知後重複此步驟直至獲得鎖;

3)執行業務**;

4)完成業務流程後,刪除對應的子節點釋放鎖。    

彙編 第二節

第二節 cpu主要有有運算器,控制器,暫存器,三部分組成 8086 cpu有14個暫存器,如ax,bx,cx,dx,si。8086所有暫存器都是16位的,可以存放2個byte即位元組,16位二進位制數 所能存放的最大數值是 11111111111 2 16 1 從0開始,所以 1嘛 通用暫存器為4個...

函式第二節

coding utf 8 1.定義乙個方法get num num num引數是列表型別,判斷列表裡面的元素為數字型別。其他型別則報錯,並且返回乙個偶數列表 注 列表裡面的元素為偶數 def get num l l for i in l 判斷列表l的元素是否都為整形 if not isinstance...

第二節練習

a b 2 鏈式賦值 print a print b c id a 位址print c c type a 型別 print c a,b 2,3 系列解包賦值 a,b b,a print a print b 基本運算 print 3 2 print 30 5 print 30 5 print 30 5...