ZooKeeper介紹
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
ZooKeeper的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
ZooKeeper包含一個簡單的原語集, [1] 提供Java和C的接口。
官網:https://zookeeper.apache.org
ZooKeeper安裝
安裝環境:
1、系統:CentOS 7.4
2、Java環境:JDK8
zookeeper有單機、偽集群、集群三種部署方式,本例使用的zookeeper版本是:zookeeper-3.4.12
單機模式
1、下載ZooKeeper,地址:http://mirrors.hust.edu.cn/apache/zookeeper/
注意版本,啟動報錯可能找不到主類,可以下載源碼版
2、解壓,命令:tar -zxvf zookeeper-3.4.12.tar.gz -C /data/soft/
解壓后目錄如下:
3、進入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 保留數量3 45 autopurge.snapRetainCount=3 46 # Purge task interval in hours 47 # Set to "0" to disable auto purge feature 清理時間間隔1小時 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端口不一樣。
4、可以不修改zoo.cfg,默認配置就行,進去zookeeper安裝目錄,啟動ZooKeeper
啟動命令:./bin/zkServer.sh start
停止命令:./bin/zkServer.sh stop
重啟命令:./bin/zkServer.sh restart
狀態查看命令:./bin/zkServer.sh status
偽集群模式
偽集群模式就是在同一主機啟動多個zookeeper並組成集群
1、在同一台主機上,通過復制得到三個zookeeper實例
2、對三個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
3、分別啟動三個zookeeper節點
4、查看節點狀態
命令:./zookeeper-3.4.12-12181/bin/zkServer.sh status
集群模式
集群模式就是在不同主機上安裝zookeeper然后組成集群的模式,可以參考偽集群模式安裝
1、在三台機器上分別部署1個ZooKeeper實例
2、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
3、zookeeper的data/myid配置,使用如下命令:
1 echo '1' > data/myid
當然zookeeper1 對應的是 1,zookeeper2 對應的是 2,zookeeper3 對應的是 3
4、分別啟動三個zookeeper節點,即完成對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