09 一致性協議 zab協議

2021-10-19 19:27:36 字數 2502 閱讀 4320

3 leader選舉

4 observer角色及其配置

zab協議 的全稱是 zookeeper atomic broadcast (zookeeper原子廣播)。 zookeeper 是通過 zab協議來保證分布式事務的最終一致性

基於zab協議,zookeeper集群中的角色主要有以下三類,如下表所示:

角色描述

leader (領導者)

領導者負責進行投票的發起和決議,更新系統狀態

follower(跟隨者)

用於接受客戶請求,並向客戶端返回結果,並在選主過程中參與投票

observer(觀察者)

不參與投票,只同步leader的狀態,observer是為了擴充套件系統,提供讀取速度

zab廣播模式工作原理,通過類似兩階段提交協議的方式解決資料一致性:

zk的集群當中,每乙個節點都會儲存乙份資料的副本,所以無論客戶端請求到哪個節點都可以獲取到資料

寫操作只能leader節點完成,即使是其他節點接受到寫操作請求,也會**給leader節點

leader從客戶端收到乙個寫請求(或者其他節點的**的寫請求)

leader生成乙個新的事務並為這個事務生成乙個唯一的zxid

leader將這個事務提議(propose)傳送給所有的follows節點

follower節點將收到的事務請求加入到歷史佇列(history queue)中,並傳送ack給 leader

當leader收到大多數follower(半數以上節點)的ack訊息,leader會傳送commit請 求

當follower收到commit請求時,從歷史佇列中將事務請求commit

在集群初始化階段,當有一台伺服器server1啟動時,其單獨無法進行和完成 leader選舉,當第二台伺服器server2啟動時,此時兩台機器可以相互通訊,每台機器都 試圖找到leader,於是進入leader選舉過程。選舉過程如下:

每個server發出乙個投票。由於是初始情況,server1和server2都會將自己作為 leader伺服器來進行投票,每次投票會包含所推舉的伺服器的myid和zxid(事務id),使用 (myid, zxid)來表示,此時server1的投票為(1, 0),server2的投票為(2, 0),然後各自 將這個投票發給集群中其他機器。

集群中的每台伺服器接收來自集群中各個伺服器的投票。

處理投票。針對每乙個投票,伺服器都需要將別人的投票和自己的投票進行pk,pk 規則如下

統計投票。每次投票後,伺服器都會統計投票資訊,判斷是否已經有過半機器接受到 相同的投票資訊,對於server1、server2而言,都統計出集群中已經有兩台機器接受 了(2, 0)的投票資訊,此時便認為已經選出了leader

改變伺服器狀態。一旦確定了leader,每個伺服器就會更新自己的狀態,如果是 follower,那麼就變更為following,如果是leader,就變更為leading

在zookeeper執行期間,leader與非leader伺服器各司其職,即便當有非leader 伺服器宕機或新加入,此時也不會影響leader,但是一旦leader伺服器掛了,那麼整個集 群將暫停對外服務,進入新一輪leader選舉,其過程和啟動時期的leader選舉過程基本 一致。

假設正在執行的有server1、server2、server3三颱伺服器,當前leader是 server2,若某一時刻leader掛了,此時便開始leader選舉。選舉過程如下:

變更狀態。leader掛後,餘下的伺服器都會將自己的伺服器狀態變更為looking,然 後開始進入leader選舉過程。

每個server會發出乙個投票。在執行期間,每個伺服器上的zxid可能不同,此時假定 server1的zxid為122,server3的zxid為122,在第一輪投票中,server1和server3 都會投自己,產生投票(1, 122),(3, 122),然後各自將投票傳送給集群中所有機器。

接收來自各個伺服器的投票。與啟動時過程相同

處理投票。與啟動時過程相同,此時,server3將會成為leader。

統計投票。與啟動時過程相同。

改變伺服器的狀態。與啟動時過程相同。

為什麼先比較事務id?因為事務id大,表示當前伺服器最近接受到客戶端的請求,保證資料不會丟失。

observer角色特點:

為了使用observer角色,在任何想變成observer角色的配置檔案中加入如下配 置:

peertype=observer
並在所有server的配置檔案中,配置成observer模式的server的那行配置追 加:observer,例如:

#server.a=b:c:d 

#a:是乙個數字,表示這個是伺服器的編號

#c:zookeeper伺服器之間的通訊埠

#d:leader選舉的埠

server.3=192.168.60.130:2289:3389:observer

Zookeeper的一致性協議 Zab協議

zab協議 的全稱是zookeeper atomic broadcast zookeeper原子廣播 zookeeper 是通過 zab 協議來保證分布式事務的最終一致性。zab協議是為分布式協調服務zookeeper專門設計的一種支援崩潰恢復的原子廣播協議,是zookeeper保證資料一致性的核心...

一致性協議

節點在進行事務處理過程中保持原子性和一致性而設計的一種演算法。1.事務詢問。2.執行事務。3.各參與者向協調者反饋事務詢問的響應。理解 類似協調者組織各參與者對一次事務操作進行投票表態的過程。假如參與者全部反饋yes 1.傳送提交請求 2.事務提交 3.反饋事務提交結果 4.完成事務。假如任何乙個參...

一致性協議

在分布式系統中,每乙個機器節點雖然都能夠明確地知道自己在進行事務操作過程中的結果是成功或失敗,但卻無也直接獲取到其他分布式節點的操作結果。因此,當乙個事務操作需要跨越多個分布式節點的時候,為了保持事務處理的acid特性,就需要引人乙個稱為 協調者 的元件來統一排程所有分布式節點的執行邏輯,這些被排程...