zookeeper 是乙個典型的分布式資料一致性解決方案,分布式應用程式可以基於 zookeeper 實現諸如資料發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、master 選舉、分布式鎖和分布式佇列等功能。
zookeeper 乙個最常用的使用場景就是用於擔任服務生產者和服務消費者的註冊中心(提供發布訂閱服務)。服務生產者將自己提供的服務註冊到zookeeper中心,服務的消費者在進行服務呼叫的時候先到zookeeper中查詢服務,獲取到服務生產者的詳細資訊之後,再去呼叫服務生產者的內容與資料。如下圖所示,在 dubbo架構中 zookeeper 就擔任了註冊中心這一角色。
zookeeper 重要概念
1、基礎概念
zookeeper 本身就是乙個分布式程式,只要半數以上節點存活,zookeeper 就能正常服務。
為了保證高可用,最好是以集群形態來部署 zookeeper,這樣只要集群中大部分機器是可用的(能夠容忍一定的機器故障),那麼 zookeeper 本身仍然是可用的。
zookeeper 將資料儲存在記憶體中,這也就保證了 高吞吐量和低延遲。
zookeeper 是高效能的。 在「讀」多於「寫」的應用程式中尤其地高效能,因為「寫」會導致所有的伺服器間同步狀態。(「讀」多於「寫」是協調服務的典型場景。)
zookeeper有臨時節點的概念。 當建立臨時節點的客戶端會話一直保持活動,瞬時節點就一直存在。而當會話終結時,瞬時節點被刪除。持久節點是指一旦這個znode被建立了,除非主動進行znode的移除操作,否則這個znode將一直儲存在zookeeper上。
zookeeper 底層其實只提供了兩個功能:①管理(儲存、讀取)使用者程式提交的資料;②為使用者程式提供資料節點監聽服務。
2、會話(session)
session 指的是 zookeeper 伺服器與客戶端會話。在 zookeeper 中,乙個客戶端連線是指客戶端和伺服器之間的乙個 tcp 長連線。
客戶端啟動的時候,首先會與伺服器建立乙個 tcp 連線,從第一次連線建立開始,客戶端會話的生命週期也開始了。
通過這個連線,客戶端能夠通過心跳檢測與伺服器保持有效的會話,也能夠向zookeeper伺服器傳送請求並接受響應,同時還能夠通過該連線接收來自伺服器的watch事件通知。session的sessiontimeout值用來設定乙個客戶端會話的超時時間。當由於伺服器壓力太大、網路故障或是客戶端主動斷開連線等各種原因導致客戶端連線斷開時,只要在sessiontimeout規定的時間內能夠重新連線上集群中任意一台伺服器,那麼之前建立的會話仍然有效。
在為客戶端建立會話之前,服務端首先會為每個客戶端都分配乙個sessionid。由於 sessionid 是 zookeeper 會話的乙個重要標識,許多與會話相關的執行機制都是基於這個 sessionid 的,因此,無論是哪台伺服器為客戶端分配的 sessionid,都務必保證全域性唯一。
3、znode
**在談到分布式的時候,我們通常說的「節點"是指組成集群的每一台機器。**然而,在zookeeper中,「節點"分為兩類:
第一類同樣是指構成集群的機器,我們稱之為機器節點;
第二類則是指資料模型中的資料單元,我們稱之為資料節點一一znode。
zookeeper將所有資料儲存在記憶體中,資料模型是一棵樹(znode tree),由斜槓(/)的進行分割的路徑,就是乙個znode,例如/foo/path1。每個上都會儲存自己的資料內容,同時還會儲存一系列屬性資訊。
在zookeeper中,node可以分為持久節點和臨時節點兩類。
持久節點是指一旦這個znode被建立了,除非主動進行znode的移除操作,否則這個znode將一直儲存在zookeeper上。
臨時節點就不一樣了,它的生命週期和客戶端會話繫結,一旦客戶端會話失效,那麼這個客戶端建立的所有臨時節點都會被移除。
4、watcher
watcher(事件***),是zookeeper中的乙個很重要的特性。zookeeper允許使用者在指定節點上註冊一些watcher,並且在一些特定事件觸發的時候,zookeeper服務端會將事件通知到感興趣的客戶端上去,該機制是zookeeper實現分布式協調服務的重要特性。
為什麼最好使用奇數臺伺服器構成 zookeeper 集群?所謂的zookeeper容錯是指,當宕掉幾個zookeeper伺服器之後,剩下的個數必須大於宕掉的個數的話整個zookeeper才依然可用。假如我們的集群中有n臺zookeeper伺服器,那麼也就是剩下的服務數必須大於n/2。先說一下結論,2n和2n-1的容忍度是一樣的,都是n-1,大家可以先自己仔細想一想,這應該是乙個很簡單的數學問題了。 比如假如我們有3臺,那麼最大允許宕掉1臺zookeeper伺服器,如果我們有4臺的的時候也同樣只允許宕掉1臺。 假如我們有5臺,那麼最大允許宕掉2臺zookeeper伺服器,如果我們有6臺的的時候也同樣只允許宕掉2臺。
zookeeper的核心概念和安裝
作用 分布式系統中的主節點擊舉!比如hbase中的老大的產生 hmaster ha 分布式系統中的主從節點感知!分布式系統中的配置檔案同步!系統伺服器的動態上下線感知 分布式系統中的分布式鎖的實現!分布式中的同乙個物件 分布式系統中的名稱服務!分布式系統中的負載均衡!zookeeper的功能其實很簡...
Zookeeper概念簡介
zookeeper是乙個分布式協調服務 就是為使用者的分布式應用程式提供協調服務 a zookeeper是為別的分布式程式服務的 b zookeeper 本身就是乙個分布式程式 只要有半數以上節點存活,zk就能正常服務,zookeeper適合裝在奇數臺機器上!c zookeeper所提供的服務涵蓋 ...
ZooKeeper的概念原理
zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,它包含乙個簡單的原語集,分布式式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper是hadoop的乙個子專案。在分布式應用中,由於工程師不能很好的使用鎖機制,以及基於訊息的協調機制不適合在某些應用中使用,因此...