Zookeeper入門指南

1.     簡介

Zookeeper分佈式服務框架是ApacheHadoop的一個子項目,它主要是用來解決分佈式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等。本文將從使用者角度介紹Zookeeper的安裝和配置文件中各個配置項的意義。

2.     Zookeeper特性

Zookeeper是一種高性能、可擴展的服務。Zookeeper的讀寫速度非常快,並且讀的速度要比寫的速度更快。另外,在進行讀操作的時候,Zookeeper依然能夠爲舊的數據提供服務。這些都是Zookeeper所提供的一致性保證,它具有如下特點:

u 結構簡單

類似於文件系統的樹狀結構

u 最終一致性

無論客戶端連接到哪一個服務器,他將看到相同的Zookeeper視圖

u 可靠性

具有簡單、健壯、良好的性能,如果消息m被一臺服務器接受,那麼它將被所有的服務器接受

u 實時性

Zookeeper保證客戶端將在一個時間間隔範圍內獲得服務器的更新信息,或者服務器失效的信息。但由於網絡延時等原因,Zookeeper不能保證兩個客戶端能同時得到剛更新的數據,如果需要最新數據,應該在讀數據之前調用sysnc()接口。

u 有序性

包括全局有序和偏序兩種:全局有序是指如果在一臺服務器上消息a在消息b前發佈,則在所有Server上消息a將在消息b前被髮布;偏序是指如果一個消息b在消息a後被同一個發送者發佈,a必將排在b前面

u 原子性

更新操作要麼成功,要麼失敗,沒有第三種結果

3.     Zookeeper工作原理

Zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做Zab協議。Zab協議有兩種模式,他們分別是恢復模式(選主)和廣播模式(同步)。當服務啓動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數server完成了和leader的狀態同步以後,恢復模式就結束了。狀態同步保證了leader和server具有相同的系統狀態。

爲了保證事務的順序一致性,Zookeeper採用了遞增的事務id號(zxid)來標示事務。所有的提議都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它都會有一個新的紀元,標示當前屬於哪個leader的統治時期。低於32位用於遞增計數。

每個Server在工作過程中有三種狀態:

u Looking:當前server不知道leader是誰,正在搜尋

u Leading:當前Server即爲選舉出來的leader

u Following:leader已經選舉出來,當前server與之同步

4.     安裝和配置詳解

本文介紹的Zookeeper是以zookeeper-3.4.5這個穩定版本爲基礎,最新的版本可以通過http://hadoop.apache.org/zookeeper/來獲取,Zookeeper的安裝非常簡單,下面將從單機模式和集羣模式這兩方面介紹Zookeeper的安裝和配置。

5.     單機模式

單機安裝非常簡單,只要把Zookeeper的壓縮包解壓到某個磁盤目錄下即可。Zookeeper的啓動腳本在bin目錄下,Linux下的啓動腳本是zkServer.sh,windows下的啓動腳本是zkServer.cmd。

在執行啓動腳本之前,還有幾個基本配置項需要配置以下,Zookeeper的配置文件在conf目錄下,這個目錄下有zoo_sample.cfg和log4j.properties,你需要做的就是將zoo_sample.cfg重命名爲zoo.cfg,因爲Zookeeper在服務啓動時會默認加載這個文件。下面詳細介紹一下,這個配置文件中各個配置項的意義。

tickTime=2000

 dataDir=D:/temp/zookeeper

 clientPort=2181

u tickTime:這個時間是作爲Zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個tickTime時間就會發送一個心跳。

u dataDir:顧名思義就是Zookeeper保存數據的目錄,默認情況下,Zookeeper將寫數據的日誌文件也保存到這個目錄裏。

u clientPort:這個端口就是客戶端連接Zookeeper服務器的端口,Zookeeper會監聽這個端口,接受客戶端的請求訪問。

當這些配置項配置好後,就可以啓動Zookeeper了,啓動後要檢查Zookeeper是否已經存在服務,可以通過netstat – ano命令查看時候有你配置的clientPort端口號在監聽服務。

6.     集羣模式

Zookeeper不僅可以單機提供服務,同時也支持多機組成集羣來提供服務。實際上Zookeeper還支持另外一種僞集羣的方式,也就是可以在一臺物理機運行多個Zookeeper示例,下面將介紹集羣模式的安裝和配置。

Zookeeper的集羣模式的安裝和配置也不是很複雜,所要做的就是增加幾個配置項。集羣模式除了上面的三個配置項還有增加下面幾個配置項:

initLimit=5

 syncLimit=2

 server.1=192.168.211.1:2888:3888

 server.2=192.168.211.2:2888:3888

u initLimit:這個配置項是用來配置Zookeeper接受客戶端(這裏所說的客戶端不是用戶連接Zookeeper服務器的客戶端,而是Zookeeper服務器集羣連接到Leader和Follower服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳的時間(也就是tickTime)長度後Zookeeper服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長就是5*2000=10秒

u sysncLimit:這個配置項標示Leader與Follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime是的時間長度,總的時間長度就是2*2000=4秒

u server.A=B:C:D:其中A是一個數字,表示這個是第幾號服務器;B是這個服務器的ip地址;C表示的是這個服務器與集羣中的Leader服務器交互信息的端口;D表示的是萬一集羣中的Leader服務器掛了,需要一個端口來重新進行選舉,選出一個新的Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是僞集羣的配置方式,由於B都是一樣,所以不同的Zookeeper實例通信端口號不能一樣,所以要給他們分配不同的端口號。

除了修改zoo.cfg配置文件,集羣模式下還要配置一個文件myid,這個文件在dataDir目錄下,這個文件裏面就有一個數據就是A的值,Zookeeper啓動時讀取這個文件,拿到裏面的數據與zoo.cfg裏面的配置信息比較從而判斷到底是哪個server。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章