天天看點

zookeeper

工作原理:

Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實作這個機制的協定叫做Zab協定。Zab協定有兩種模式,它們分别是恢複模式(選舉)和廣播模式(同步)。當服務啟動或者在上司者崩潰後,Zab就進入了恢複模式,當上司者被選舉出來,且大多數Server完成了和leader的狀态同步以後,恢複模式就結束了。狀态同步保證了leader和Server具有相同的系統狀态。

Paxos算法 :解決的問題是如何在分布式環境中保證資料的一緻性;

角色分工:

Leader: 負責進行投票的發起和決議,更新系統狀态

Follower:接收客戶請求并向用戶端傳回結果,在選舉過程中參與投票

Observer:接收用戶端連接配接,将寫請求轉發給leader節點,不參與投票過程,隻同步leader狀态;主要為擴充系統,提高讀取速度

各個角色的工作流程:

Leader主要有三個功能:

1 .恢複資料;

2 .維持與Learner的心跳,接收Learner請求并判斷Learner的請求消息類型;

3 .Learner的消息類型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根據不同的消息類型,進行不同的處理;PING消息是指Learner的心跳資訊;REQUEST消息是Follower發送的提議資訊,包括寫請求及同步請求;ACK消息是Follower的對提議的回複,超過半數的Follower通過,則commit該提議;REVALIDATE消息是用來延長SESSION有效時間

Follower主要有四個功能:

1. 向Leader發送請求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);

2 .接收Leader消息并進行處理;

3 .接收Client的請求,如果為寫請求,發送給Leader進行投票;

4 .傳回Client結果。

選舉階段:

Leader選舉處理過程:

1.将自己的server.id和zxid資訊發送出去

2.如果收到的資訊中receive.zxid>= my.zxid,但receive.server.id> my.server.id,則将自己的選票修改為(received.zxid,receive.server.id),否則是(my.zxid,my.server.id)

3.一旦收到的選票超過半數的伺服器節點數,便将狀态修改為LEADING,并通知投票者将狀态設定為FOLLOWING狀态

server.id:是節點的服務辨別符

zxid:是zookeeper事物ID,zookeeper狀态的每一次改變,都會對應一個遞增的Transaction id,即zxid,zxid=epoch(32bit)+counter(32bit) ;epoch表示叢集中leader所改變的次數

廣播階段:

同一時刻存在一個Leader節點,其他的節點為Follower,如果是更新請求,用戶端連接配接到leader節點,由leader節點執行請求,如果連接配接到Follower節點,則需将轉發請求到leader執行,但對于讀請求,用戶端可以直接從Follower上讀取資料,如果需要讀取到最新的資料,在發起讀操作時設定強制同步,則會從Leader節點擷取

配置檔案說明:

tickTime:伺服器和用戶端之間的心跳機制,用于檢測對方的健康狀态,這個時間是健康檢測頻率,每隔tickTime會發送一個心跳,機關為ms

dataDir:zookeeper所産生的資料存放目錄,目錄下的myid檔案要和叢集的server ID對應

dataLogDir:事物日志檔案存放目錄

clientPort:和用戶端互動時所使用的服務端口

initLimit:叢集中的其他節點在于Leader建立連接配接,以及建立完成後同步資料所運作的最大時間,它是以tickTime的倍數計算 即initLimit*tickTime

syncTime:叢集中Leader與其他節點進行資料同步所運作的最大時間,它是以tickTime的倍數計算,即syncTime*tickTime

server.x=[hostname]:port1:port2[:observer] :x表示伺服器ID,即為myid檔案中對應;port1 叢集内各個節點進行資料互動的端口;port2 進行選舉leader時所使用的端口,如果該節點為observer,可以在最後追加一個observer辨別

peerType=observer 如果該節點是一個observer節點,則需要添加該配置

zookeeper監控(四字指令):

可通過nc 工具 發送四字指令,如:

zk常用指令:

服務端

用戶端

zk叢集示範:

IP:192.168.229.128 上啟3個zk docker

zk 基礎配置

zk start 腳本

zk Dockerfile

zk Build

zk Run

上一篇: Flink 時間
下一篇: zookeeper