ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。html
ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。node
ZooKeeper包含一個簡單的原語集, [1] 提供Java和C的接口。apache
官網:https://zookeeper.apache.org服務器
安裝環境:分佈式
一、系統:CentOS 7.4ide
二、Java環境:JDK8oop
zookeeper有單機、僞集羣、集羣三種部署方式,本例使用的zookeeper版本是:zookeeper-3.4.12性能
一、下載ZooKeeper,地址:http://mirrors.hust.edu.cn/apache/zookeeper/ui
注意版本,啓動報錯可能找不到主類,能夠下載源碼版this
二、解壓,命令:tar -zxvf zookeeper-3.4.12.tar.gz -C /data/soft/
解壓後目錄以下:
三、進入conf目錄,建立一個zookeeper的配置文件zoo.cfg,可複製conf/zoo_sample.cfg做爲配置文件
命令:cd conf
命令:cp zoo_sample.cfg zoo.cfg
配置文件說明:
1 # The number of milliseconds of each tick 2 # tickTime:CS通訊心跳數 3 # Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。tickTime以毫秒爲單位。 4 tickTime=2000 5 6 # The number of ticks that the initial 7 # synchronization phase can take 8 # initLimit:LF初始通訊時限 9 # 集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量)。 10 initLimit=5 11 12 # The number of ticks that can pass between 13 # sending a request and getting an acknowledgement 14 # syncLimit:LF同步通訊時限 15 # 集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。 16 syncLimit=2 17 18 # the directory where the snapshot is stored. 19 # do not use /tmp for storage, /tmp here is just 20 # example sakes. 21 # dataDir:數據文件目錄 22 # Zookeeper保存數據的目錄,默認狀況下,Zookeeper將寫數據的日誌文件也保存在這個目錄裏。 23 dataDir=/data/soft/zookeeper-3.4.12/data 24 25 26 # dataLogDir:日誌文件目錄 27 # Zookeeper保存日誌文件的目錄。 28 dataLogDir=/data/soft/zookeeper-3.4.12/logs 29 30 # the port at which the clients will connect 31 # clientPort:客戶端鏈接端口 32 # 客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。 33 clientPort=2181 34 35 # the maximum number of client connections. 36 # increase this if you need to handle more clients 37 #maxClientCnxns=60 38 # 39 # Be sure to read the maintenance section of the 40 # administrator guide before turning on autopurge. 41 # 42 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 43 # 44 # The number of snapshots to retain in dataDir 45 #autopurge.snapRetainCount=3 46 # Purge task interval in hours 47 # Set to "0" to disable auto purge feature 48 #autopurge.purgeInterval=1 49 50 51 # 服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通訊端口,選舉端口) 52 # 這個配置項的書寫格式比較特殊,規則以下: 53 54 # server.N=YYY:A:B 55 56 # 其中N表示服務器編號,YYY表示服務器的IP地址,A爲LF通訊端口,表示該服務器與集羣中的leader交換的信息的端口。B爲選舉端口,表示選舉新leader時服務器間相互通訊的端口(當leader掛掉時,其他服務器會相互通訊,選擇出新的leader)。通常來講,集羣中每一個服務器的A端口都是同樣,每一個服務器的B端口也是同樣。可是當所採用的爲僞集羣時,IP地址都同樣,只能時A端口和B端口不同。
四、能夠不修改zoo.cfg,默認配置就行,進去zookeeper安裝目錄,啓動ZooKeeper
啓動命令:./bin/zkServer.sh start
中止命令:./bin/zkServer.sh stop
重啓命令:./bin/zkServer.sh restart
狀態查看命令:./bin/zkServer.sh status
僞集羣模式就是在同一主機啓動多個zookeeper並組成集羣
一、在同一臺主機上,經過複製獲得三個zookeeper實例
二、對三個zookeeper節點進行配置
zookeeper1配置文件conf/zoo.cfg修改以下:
1 tickTime=2000 2 initLimit=5 3 syncLimit=2 4 dataDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12181/data 5 dataLogDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12181/logs 6 clientPort=12181 7 8 server.1=127.0.0.1:12888:13888 9 server.2=127.0.0.1:14888:15888 10 server.3=127.0.0.1:16888:17888
注:server.1中的數字1爲服務器的ID,須要與myid文件中的id一致,下一步將配置myid
zookeeper1的data/myid配置,使用以下命令(即新建一個文件data/myid,在其中添加內容爲:1):
1 echo '1' > data/myid
zookeeper2配置文件conf/zoo.cfg修改以下:
1 tickTime=2000 2 initLimit=5 3 syncLimit=2 4 dataDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12182/data 5 dataLogDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12182/logs 6 clientPort=12182 7 8 server.1=127.0.0.1:12888:13888 9 server.2=127.0.0.1:14888:15888 10 server.3=127.0.0.1:16888:17888
zookeeper2的data/myid配置,使用以下命令:
1 echo '2' > data/myid
zookeeper3配置文件conf/zoo.cfg修改以下:
1 tickTime=2000 2 initLimit=5 3 syncLimit=2 4 dataDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12183/data 5 dataLogDir=/data/soft/zookeeper-cluster/zookeeper-3.4.12-12183/logs 6 clientPort=12183 7 8 server.1=127.0.0.1:12888:13888 9 server.2=127.0.0.1:14888:15888 10 server.3=127.0.0.1:16888:17888
zookeeper3的data/myid配置,使用以下命令:
1 echo '3' > data/myid
三、分別啓動三個zookeeper節點
四、查看節點狀態
命令:./zookeeper-3.4.12-12181/bin/zkServer.sh status
集羣模式就是在不一樣主機上安裝zookeeper而後組成集羣的模式,能夠參考僞集羣模式安裝
一、在三臺機器上分別部署1個ZooKeeper實例
二、zookeeper配置文件conf/zoo.cfg,以下:
1 tickTime=2000 2 initLimit=5 3 syncLimit=2 4 dataDir=/data/soft/zookeeper-3.4.12/data 5 dataLogDir=/data/soft/zookeeper-3.4.12/logs 6 clientPort=2181 7 8 server.1=127.0.0.1:2888:3888 9 server.2=127.0.0.2:2888:3888 10 server.3=127.0.0.3:2888:3888
三、zookeeper的data/myid配置,使用以下命令:
1 echo '1' > data/myid
固然zookeeper1 對應的是 1,zookeeper2 對應的是 2,zookeeper3 對應的是 3
四、分別啓動三個zookeeper節點,即完成對ZooKeeper集羣的安裝
下面操做在zookeeper單機模式下完成的
a、使用客戶端鏈接ZooKeeper服務
命令:./bin/zkCli.sh -server 127.0.0.1:2181
./bin/zkCli.sh默認鏈接到本地127.0.0.1:2181
b、使用 ls 命令來查看當前 ZooKeeper 中所包含的內容:
命令:ls /
c、建立了一個新的 znode 節點「 zk 」以及與它關聯的字符串
命令:create /zk myData
d、獲取znode節點「 zk 」
命令:get /zk
e、刪除znode節點「 zk 」
命令:delete /zk
f、推出客戶端
命令:quit