對於Zookeeper的理解

2021-06-27 16:39:11 字數 3895 閱讀 6238

zookeeper是google 的chubby乙個開源的實現,是hadoop 的分布式協調服務。

它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。

zookeeper包括乙個leader和多個follower。

為什麼使用zookeeper?

»大部分分布式應用需要乙個主控、協調器或控制器來管理物理分布的子程序(如資源、任務分配等)。

»目前,大部分應用需要開發私有的協調程式,缺乏乙個通用的機制。

»協調程式的反覆編寫浪費,且難以形成通用、伸縮性好的協調器。

»zookeeper:提供通用的分布式鎖服務,用以協調分布式應用。

zookeeper的特性:

»zookeeper是簡單的

»zookeeper是富有表現力的

»zookeeper具有高可用性

»zookeeper採用松耦合互動方式

»zookeeper是乙個資源庫

zookeeper的單機模式:

只執行在一台伺服器上,適合測試環境;

zookeeper的啟動指令碼在 bin 目錄下

;在啟動指令碼之前,還有幾個基本的配置項需要配置一下,

ticktime

:這個時間是作為

zookeeper

伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個

ticktime 

時間就會傳送乙個心跳;

datadir

:顧名思義就是

zookeeper

儲存資料的目錄,預設情況下,

zookeeper

將寫資料的日誌檔案也儲存在這個目錄裡;

clientport

:這個埠就是客戶端連線

zookeeper

伺服器的埠,

zookeeper

會監聽這個埠,接受客戶端的訪問請求。當這些配置項配置好後,就可以啟動

zookeeper

了,啟動後使用命令

echoruok | nc localhost 2181

檢查zookeeper

是否已經在服務。

zookeeper

不僅可以單機提供服務,同時也支援多機組成集群來提供服務

,實際上

zookeeper

還支援另外一種偽集群的方式,也就是可以在一台物理機上執行多個

zookeeper例項;

nitlimit

:這個配置項是用來配置

zookeeper

接受客戶端(這裡所說的客戶端不是使用者連線

zookeeper

伺服器的客戶端,而是

zookeeper

伺服器集群中連線到

leader

的 follower

伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。當已經超過

10 個心跳的時間(也就是

ticktime

)長度後

zookeeper

伺服器還沒有收到客戶端的返回資訊,那麼表明這個客戶端連線失敗。總的時間長度就是

5*2000=10

秒;synclimit

:這個配置項標識

leader

與 follower

之間傳送訊息,請求和應答時間長度,最長不能超過多少個

ticktime

的時間長度,總的時間長度就是

2*2000=4

秒;server.a=b:c

:d:其中

a 是乙個數字,表示這個是第幾號伺服器;

b 是這個伺服器的

ip 位址;

c 表示的是這個伺服器與集群中的

leader

伺服器交換資訊的埠;

d 表示的是萬一集群中的

leader

伺服器掛了,需要乙個埠來重新進行選舉,選出乙個新的

leader

,而這個埠就是用來執行選舉時伺服器相互通訊的埠。如果是偽集群的配置方式,由於

b 都是一樣,所以不同的

zookeeper

例項通訊埠號不能一樣,所以要給它們分配不同的埠號。除了修改

zoo.cfg

配置檔案,集群模式下還要配置乙個檔案

myid

,這個檔案在

datadir

目錄下,這個檔案裡面就有乙個資料就是

a 的值,

zookeeper

啟動時會讀取這個檔案,拿到裡面的資料與

zoo.cfg

裡面的配置資訊比較從而判斷到底是那個

server

。分別在3臺機器上啟動zookeeper的server:shbin/zkserver.sh start

;執行於乙個集群上,適合生產環境,這個計算機集群被稱為乙個「集合體」(

ensemble

)。zookeeper

通過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。為什麼一定要超過半數呢?這跟

zookeeper

的複製策略有關:

zookeeper

確保對znode

樹的每乙個修改都會被複製到集合體中超過半數的機器上。

zookeeper

的資料模型

»層次化的目錄結構,命名符合常規檔案系統規範

»每個節點在zookeeper中叫做znode,並且其有乙個唯一的路徑標識

»節點znode可以包含資料和子節點,但是ephemeral型別的節點不能有子節點

»znode中的資料可以有多個版本,比如某乙個路徑下存有多個資料版本,那麼查詢這個路徑下的資料就需要帶上版本

»客戶端應用可以在節點上設定監視器

»節點不支援部分讀寫,而是一次性完整讀寫

-znode可以被監控,包括這個目錄節點中儲存的資料的修改,子節點目錄的變化等,一旦變化可以通知設定監控的客戶端,這個功能是zookeeper對於應用最重要的特性,通過這個特性可以實現的功能包括配置的集中管理,集群管理,分布式鎖等等。

zookeeper

的節點

»znode有兩種型別,短暫的(ephemeral)和持久的(persistent)

»znode的型別在建立時確定並且之後不能再修改

»短暫znode的客戶端會話結束時,zookeeper會將該短暫znode刪除,短暫znode不可以有子節點

»持久znode不依賴於客戶端會話,只有當客戶端明確要刪除該持久znode時才會被刪除

»znode有四種形式的目錄節點,persistent、persistent_sequential、ephemeral、ephemeral_sequential

-znode可以是臨時節點,一旦建立這個znode的客戶端與伺服器失去聯絡,這個znode也將自動刪除,zookeeper的客戶端和伺服器通訊採用長連線方式,每個客戶端和伺服器通過心跳來保持連線,這個連線狀態稱為 session,如果 znode 是臨時節點,這個 session失效,znode也就刪除了;持久化目錄節點,這個目錄節點儲存的資料不會丟失;順序自動編號的目錄節點,這種目錄節點會根據當前已近存在的節點數自動加1,然後返回給客戶端已經成功建立的目錄節點名;臨時目錄節點,一旦建立這個節點的客戶端與伺服器端口也就是session超時,這種節點會被自動刪除;臨時自動編號節點

zookeeper

的角色»領導者(leader),負責進行投票的發起和決議,更新系統狀態

»學習者(learner),包括跟隨者(follower)和觀察者(observer),follower用於接受客戶端請求並想客戶端返回結果,在選主過程中參與投票

»observer可以接受客戶端連線,將寫請求**給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴充套件系統,提高讀取速度

»客戶端(client),請求發起方

zookeeper的個人理解

相信很多朋友很早就聽說過zookeeper,也用過他,比如在使用dubbo或者kafka集群時,但是我們當時只是知道dubbo是為了實現業務介面分布式部署,kafka集群是為了實現訊息的發布和訂閱,但是zookeeper幹嘛的卻總是有些模糊 下面就用最直白的話語說一下他到底是幹嘛的 他就是用來協調這...

ZooKeeper 簡單理解

zookeeper 概覽 zookeeper 是乙個開源的分布式協調服務,zookeeper 框架最初是在 yahoo 上構建的,用於以簡單而穩健的方式訪問他們的應用程式。zookeeper 是乙個典型的分布式資料一致性解決方案,分布式應用程式可以基於 zookeeper 實現諸如資料發布 訂閱 負...

Zookeeper入門理解

zookeeper是乙個底層的分布式協調服務工具,把框架告訴它,它自動協調 只要集群中有一台能連上就能獲取zookeeper的資料資訊 1.zookeeper可以做很多服務中介軟體的協調元件,比如hadoop,kafka,hbase.可以協調不同集群節點的狀態。2可以做很多服務中間的配置資料儲存,比...