1. 集群环境

192.168.43.205 master
192.168.43.79
slave1
192.168.43.32
slave2
安装有jdk、hadoop

2. 安装zookeeper

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
[root@master src]# tar -xvf zookeeper-3.4.5.tar.gz

-C /opt
解压即可用

3. 环境变量配置

[root@master ~]# vim /etc/profile
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.5
export PATH=$ZOOKEEPER_HOME/bin:$PATH
[root@master ~]# source /etc/profile

4. 配置过程

[root@master ~]# cd /opt/zookeeper-3.4.5/
创建数据、日记保存目录
[root@master zookeeper-3.4.5]# mkdir data
[root@master zookeeper-3.4.5]# mkdir log
[root@master zookeeper-3.4.5]# cd conf
[root@master conf]# cp zoo_sample.cfg zoo.cfg
[root@master conf]# vim zoo.cfg
dataDir=/opt/zookeeper-3.4.5/data
dataLogDir=/opt/zookeeper-3.4.5/log
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

5. 传输给其他两台服务器

[root@master ~]# scp -r /opt/zookeeper-3.4.5/ slave1:/opt
[root@master ~]# scp -r /opt/zookeeper-3.4.5/ slave2:/opt
[root@master ~]# scp /etc/profile slave1:/etc/
[root@master ~]# scp /etc/profile slave2:/etc/
[root@slave1 ~]# source /etc/profile
[root@slave2 ~]# source /etc/profile

6. 添加mydi文件

要求 myid中的值要与配置文件server.X 中设置的X 相一致,且路径要与datadir中一致
[root@master ~]# echo 1 >/opt/zookeeper-3.4.5/data/myid
[root@slave1 ~]# echo 2 >/opt/zookeeper-3.4.5/data/myid
[root@slave2 ~]# echo 3 >/opt/zookeeper-3.4.5/data/myid

7. 启动服务

[root@master ~]# zkServer.sh start
[root@master ~]# zkServer.sh status 启动完了查看状态
其它两台也是一样的,注意关闭selinux、防火墙

[root@master bin]# jps
4404 NameNode
4565 SecondaryNameNode
6524 Jps
3277 JobHistoryServer
4749 ResourceManager
6493 QuorumPeerMain #zookeeper进程

8.

测试leader故障后切换情况 [root@slave2 bin]# zkServer.sh stop
[root@slave2 bin]# ps -aux | grep zookeeper

这时查看其他两台服务器状态
[root@master bin]# zkServer.sh status
JMX enabled by default
Using config:/opt/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower

[root@slave1 ~]# zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
现在slave1成为主了

9. Zookeeper客户端四字符指令

conf 配置信息
cons 连接信息
dump 未处理会话节点
envi 环境信息
reqs 未处理请求
stat 统计信息
wchs 服务器watch的详细信息
wchp 列出指定路径下服务器信息
[root@master bin]# echo conf | nc 192.168.43.205 2181
clientPort=2181
dataDir=/opt/zookeeper-3.4.5/data/version-2
dataLogDir=/opt/zookeeper-3.4.5/log/version-2
。。。。。。

[root@master ~]# echo envi |nc192.168.43.205 2181
[root@master ~]# echo stat |nc 192.168.43.205 2181

10. Zookeeper客户端命令

通过zkCli.sh 连接服务器
zkCli.sh -server master/slave1/slave2:2181
[root@master bin]# ./zkCli.sh
Connecting to localhost:2181
。。。。。。
WATCHER::
WatchedEvent state:SyncConnected type:Nonepath:null
[zk: localhost:2181(CONNECTED) 0] h ##帮助命令
ZooKeeper -server host:port cmd args
statpath [watch]
setpath data [version]
。。。。。。

[zk: localhost:2181(CONNECTED) 1] ls / #列出目录内容
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper/quota
[]
[zk: localhost:2181(CONNECTED) 5] create /root test #创建目录及数据
Created /root
[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper, root]
[zk: localhost:2181(CONNECTED) 8] get /root #获取数据
test
cZxid = 0x500000006
ctime = Sat Feb 24 06:16:16 CST 2018
mZxid = 0x500000006
mtime = Sat Feb 24 06:16:16 CST 2018
pZxid = 0x500000006
。。。。。。

需要注意的是ZK是不能一次创建多级节点的
[zk: localhost:2181(CONNECTED) 9] create /root/s1/s1-1 #报错
[zk: localhost:2181(CONNECTED) 10] ls /root #查看为空
[]
[zk: localhost:2181(CONNECTED) 11] create /root/s1 s1-data
Created /root/s1
[zk: localhost:2181(CONNECTED) 12] create /root/s2 s2-data
Created /root/s2
[zk: localhost:2181(CONNECTED) 13] create /root/s3 s3-data
Created /root/s3
[zk: localhost:2181(CONNECTED) 14] ls /root
[s3, s1, s2]

查看状态
[zk: localhost:2181(CONNECTED) 15] stat /root
cZxid = 0x500000006
ctime = Sat Feb 24 06:16:16 CST 2018
。。。。。。

删除目录
[zk: localhost:2181(CONNECTED) 16] delete /root/s3
[zk: localhost:2181(CONNECTED) 17] ls /root
[s1, s2]

断开连接
[zk: localhost:2181(CONNECTED) 18] close
2018-02-24 06:27:08,915 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509]- EventThread shut down
2018-02-24 06:27:08,917 [myid:] - INFO [main:ZooKeeper@684] - Session:0x161c4b008a20002 closed

重新连接
由于ZK服务器间的数据是一致的,因此这次我连接其它服务器
[zk: localhost:2181(CLOSED) 19] connect master:2181
[zk: master:2181(CONNECTED) 20] get /root
test
cZxid = 0x500000006
。。。。。。

[zk: master:2181(CONNECTED) 21] get /root/s1
s1-date
。。。。。。

退出:quit