Zookeeper集羣詳解

Zookeeper集羣角色

Leader:領導者,一個Zookeeper集羣同一時間只能有一個Leader,,Leader服務器是整個Zookeeper集羣工作制中的核心,其主要工作有以下:

  • 事務請求的唯一調度和處理者,保證集羣事務處理的順序性。Zookeeper中所有事務操作都是由leader服務器進行處理。
  • 集羣內部服務器的調用者。
  • 接受所有的Follower的提案請求並統一協調發起提案投票,負責與所有Follower進行內部數據交換(同步)。

Follower:跟隨者,主要工作:

  • 處理客戶端的非事務請求,並轉發事務請求給Leader服務器。
  • 參與事務請求的同步提交投票。同時與Leader進行數據交換(同步)。
  • 參與Leader選舉投票。

Observer:觀察者,從Zookeeper3.3.0引入的一個全新的服務器角色,該服務器充當一個觀察者角色,觀察Zookeeper集羣的最新狀態變化,並將這些狀態變更同步過來。Observer服務器在工作原理上和Follower基本一致,對於非事務請求,可以直接獨立處理,而對於事務請求,則會轉發給Leader服務器進行處理。和Follower唯一區別是,Observer不參與任何形式投票,包括事務請求提交投票、Leader選舉投票。僅僅觀察集羣狀態變化並把變化同步過來。

Observer不屬於Zookeeper的關鍵部位,通常用於在不影響集羣事務處理能力的前提下提升進去非事務處理的能力,就是不影響集羣寫性能的情況下,提高集羣讀性能。因爲使用增加Follower固然會提高集羣的讀性能,但是也會降低集羣事務處理的寫性能。因爲Follower太多的話,會把時間浪費在事務投票同步過程和Leader選舉過程中,因爲要通信、投票的機器多了。而Observer不參與任何形式投票,僅僅只是進行讀操作。所以增加再多Observer也不會影響集羣的寫性能,反而能夠提升集羣的讀性能。但是Observer太多,而Follower太少的話會降低系統的可用性。

Zookeeper集羣中有一半以上的機器正常工作的話,集羣對外提供的服務就是可用的。假如有1個Leader,100個Follower,那麼就算有50臺機器宕機,集羣照樣可用。假設現在採用1個Leader,10個Follower,90個Observer的話,只要集羣裏面有大於5臺機器宕機,集羣就會處於不可用狀態,至少處理不了事務請求,因爲事務投票需要一半以上的同意,而可用的Leader加Follower已經不足一半了。

在這裏插入圖片描述

集羣構建

在進行集羣搭建時,一般要知道單機環境的搭建https://blog.csdn.net/qq_40837310/article/details/106792984
環境:
五臺虛擬機模擬:192.168.18.130、192.168.18.131、192.168.18.132、192.168.18.133、192.168.18.134。一臺Leader、3臺Follower、1臺Observer(192.168.18.134)。Leader是選舉出來的,Observer是指定的。
第一步:修改配置文件:

server.1=192.168.18.130:2182:2183
server.2=192.168.18.131:2182:2183
server.3=192.168.18.132:2182:2183
server.4=192.168.18.133:2182:2183
server.5=192.168.18.134:2182:2183:observer

語法:server.id=host:port1:port2

  1. server固定。
  2. id:集羣中節點的唯一標誌,是一個整形數字。
  3. host:可以是ip,也可以是IP的映射。
  4. port1:集羣中進行leader選舉的端口號。
  5. port2:集羣中服務器進行通信的端口。

集羣中每個節點的zoo.cfg配置文件都要加上這段修改,這段修改就好比一個通信錄,然集羣中的每一個節點都能互相知道其他節點的存在。

集羣中一臺服務器需要三個端口,面向客戶端連接的端口,集羣中進行leader選舉的端口、集羣中服務器進行通信的端口。

指定某節點爲Observer:

  1. 要設置爲Observer節點的配置文件添加配置peerType=observer
  2. 在server.id=host:port1:port2 後面加observer ,比如server.5=192.168.18.134:2182:2183:observer

第二步:創建myid文件
在Zookeeper服務器dataDir創建一個myid文件,文件內容就是該集羣服務器的唯一id,就是上面配置文件配置的server.id中的id。比如192.168.18.131服務器的id爲2,192.168.18.132的id爲3。
在這裏插入圖片描述
第三步:啓動Zookeeper
就跟單機環境下那樣啓動就行了。前提是服務器的配置的Zookeeper的那三個端口的要對外開放。

驗證:
在這裏插入圖片描述
啓動成功,爲Follower節點。
在這裏插入圖片描述
啓動成功,爲leader節點。
在這裏插入圖片描述
啓動成功,爲observer。還有其他幾臺服務器就不貼了。

使用該三種角色分別進行添加一個節點和查看節點操作。
Leader:
在這裏插入圖片描述
Follower
在這裏插入圖片描述
Observer:
在這裏插入圖片描述

  1. 三種集羣角色都能進行節點新增(事務操作),原因是Follower和Observer會把事務操作轉發給Leader,實際上只有Leader會進行事務處理。
  2. 能夠獲取到其他節點添加的節點,說明Zookeeper各個節點會進行事務提交和數據同步。

javaAPI進行集羣連接:

連接集羣與連接單機類似,只是連接的地址是多個,用逗號分隔起來。其他操作與單機操作基本一致。
在這裏插入圖片描述
單機java API操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章