Zookeeper是一個分佈式的應用程序協調服務,是Hadoop和Hbase的重要組件,是樹型的服務目錄,支持變動推送。還可做爲微服務架構(spring cloud、dubbo)的服務註冊中心。node
1.Zookeeper安裝有三種方式:spring
單擊模式:Zookeeper運行一臺機器上
僞集羣模式:一臺物理機上運行多個zookeeper實例
集羣模式:Zookeeper運行一個集羣上,適合生產環境
Zookeeper經過複製實現高可用,集羣中有超過半數以上機器處於可用狀態,就能繼續提供服務。跟Zookeeper的複製策略有關:Zookeeper確保對實例節點znode樹的每個修改被複制到集羣中超過半數以上的服務器。集羣中只有一個Leader,剩下節點爲follower。apache
2.集羣安裝(以安裝三個Zookeeper-3.4.10實例集羣爲例)服務器
其中某個Zookeeper節點操做爲例,其餘相似。
下載:wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar -xzvf zookeeper-3.4.10.tar.gz
cd zookeeper-3.4.10
cp conf/zoo_sample.cfg conf/zoo.cfg架構
啓動:bin/zkServer.sh start (其餘節點分別依次啓動)分佈式
查看狀態:bin/zkServer.sh statuside
[root@zookeeper1 zookeeper]# sh bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower
3.配置微服務
配置zoo.cfgoop
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper clientPort=2181 #tickTime:這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳,以毫秒爲單位。 initLimit:LF初始通訊時限,集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量) syncLimit:集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。 #dataDir:就是 Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。 #clientPort:這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。 dataLogDir:日誌文件目錄,Zookeeper保存日誌文件的目錄 ##服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通訊端口,選舉端口),規則如:server.N=yyy:A:B 其中N表示服務器編號,YYY表示服務器的IP地址,A爲LF通訊端口,表示該服務器與集羣中的leader交換的信息的端口。B爲選舉端口,表示選舉新leader時服務器間相互通訊的端口(當leader掛掉時,其他服務器會相互通訊,選擇出新的leader)。通常來講,集羣中每一個服務器的A端口都是同樣,每一個服務器的B端口也是同樣。可是當所採用的爲僞集羣時,IP地址都同樣,只能時A端口和B端口不同。 server.1=10.42.10.1:8888:8889 server.2=10.42.10.2:8888:8889 server.3=10.42.10.3:8888:8889
4.新建myid文件日誌
集羣模式下需配置myid文件,dataDir對應目錄下建立myid文件,即/tmp/zookeeper下要有myid文件。Zookeeper啓動時讀取myid文件內容,與zoo.cfg文件配置信息「server.n」相比較判斷出哪一個server。ls /tmp/zookeepermyid version-2 zookeeper_server.pidmyid指明本身的ID,對應」server.n「數字n,第一臺爲數字1,第一臺爲數字2,第一臺爲數字3。Zookeeper根據該文件來決定Zookeeper集羣各個znode節點的身份。