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可以做很多服務中間的配置資料儲存,比...