簡介
Zookeeper 分布式服務架構是Apache Hadoop的一個子項目它主要是用來解決分布式應用中經常遇到的一些資料管理問題如統一命名服務、狀态同步服務、叢集管理、分布式應用配置項的管理等等。zookeeper本身可以單節點狀态運作不過它的長處在于通過分布式zookeeper叢集一個leader多個follower基于一定的政策來保證zookeeper叢集的穩定性和可用性進而實作分布式應用的可靠性。
Zookeeper叢集中主要有兩個角色leader和follower。
上司者leader,用于負責進行投票的發起和決議,更新系統狀态。
學習者learner,包括跟随者follower和觀察者observer。
其中follower用于接受用戶端請求并想用戶端傳回結果,在選主過程中參與投票。
而observer可以接受用戶端連接配接,将寫請求轉發給leader,但observer不參加投票過程,隻同步leader的狀态,observer的目的是為了擴充系統,提高讀取速度。
Zookeeper叢集個數一般設定為2n+1奇數個。這裡用三節點為例搭建一個zookeeper叢集。
一、安裝Java
操作之前建議改下hostname
192.168.100.21 zookeeper-001
192.168.100.22 zookeeper-002
192.168.100.23 zookeeper-003
zookeeper依賴java環境首先安裝java三台機器分别操作如下
二、安裝zookeeper
截止目前17年5月zookeeper最新穩定版本是3.4.10可以選擇在官網的download連接配接上下載下傳安裝。因為這裡Ubuntu自帶系統源的版本是3.4.5我這裡對版本号沒有特殊要求友善起見我直接使用了系統源安裝。
檢視目前系統源版本号
3台機器上分别安裝
三、修改配置檔案
安裝完成後預設位于/etc/zookeeper目錄下我的配置檔案如下把所有zookeeper節點加到配置檔案的server裡即可。所有節點的配置相同。
配置參數說明
tickTime這個時間是作為zookeeper伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發送一個心跳。
initLimit這個配置項是用來配置zookeeper接受用戶端這裡所說的用戶端不是使用者連接配接zookeeper伺服器的用戶端,而是zookeeper伺服器叢集中連接配接到leader的follower 伺服器初始化連接配接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳的時間也就是tickTime長度後 zookeeper伺服器還沒有收到用戶端的傳回資訊,那麼表明這個用戶端連接配接失敗。總的時間長度就是 10*2000=20秒。
syncLimit這個配置項辨別leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
dataDir:顧名思義就是zookeeper儲存資料的目錄,預設情況下zookeeper将寫資料的日志檔案也儲存在這個目錄裡
clientPort這個端口就是用戶端連接配接Zookeeper伺服器的端口,Zookeeper會監聽這個端口接受用戶端的通路請求
server.A=B:C:D中的A是一個數字,表示這個是第幾号伺服器,B是這個伺服器的IP位址C第一個端口用來叢集成員的資訊交換,表示這個伺服器與叢集中的leader伺服器交換資訊的端口D是在leader挂掉時專門用來進行選舉leader所用的端口。
四、叢集初始化操作
1、由于之前在zookeeper的配置檔案裡規定了data目錄如果沒有的話在啟動服務之前需要手動建立
2、建立serverID
zookeeper叢集模式下需要配置myid檔案,這個檔案需要放在dataDir目錄下。這個檔案裡面有一個資料就是A的值該A就是zoo.cfg檔案中server.A=B:C:D中的A,在zoo.cfg檔案中配置的dataDir路徑中建立myid檔案。
在分别在zookeeper-001、002、003上執行
以上都配置完成之後分别在三個節點上啟動zookeeper服務
五、zookeeper叢集狀态檢測
1、檢視目前叢集狀态可以使用nc指令mode行顯示目前是leader還是follower

2、也可以用自帶的zkCli.sh連接配接到zookeeper檔案系統
3、這裡推薦一個python的zookeeper指令行工具"zk-shell",pip安裝即可
使用幫助如下
示例,執行'ls /'指令:
zookeeper官方文檔https://zookeeper.apache.org/doc/trunk/
zookeeper下載下傳連接配接http://mirrors.hust.edu.cn/apache/zookeeper/