安装及启动
1.安装前准备(1)安装Jdk(2)拷贝Zookeeper安装包到Linux系统下(3)解压到指定目录[atguigu@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/2.配置修改(1)将/opt/module/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;[atguigu@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg(2)打开zoo.cfg文件,修改dataDir路径:[atguigu@hadoop102 zookeeper-3.4.10]$ vim zoo.cfg修改如下内容:dataDir=/opt/module/zookeeper-3.4.10/zkData(3)在/opt/module/zookeeper-3.4.10/这个目录上创建zkData文件夹[atguigu@hadoop102 zookeeper-3.4.10]$ mkdir zkData3.操作Zookeeper(1)启动Zookeeper[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start(2)查看进程是否启动[atguigu@hadoop102 zookeeper-3.4.10]$ jps4020 Jps4001 QuorumPeerMain(3)查看状态:[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: standalone(4)启动客户端:[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkCli.sh(5)退出客户端:[zk: localhost:2181(CONNECTED) 0] quit(6)停止Zookeeper[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh stop
配置参数解读
Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2tickTime)
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径
主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口
监听客户端连接的端口。
集群配置
- 在/opt/module/zoopeeper-3.5.7/这个目录下创建zkData
mkdir zkData
- 在/opt/module/zoopeeper-3.5.7/zkData目录下创建一个myid的文件,在文件中添加与server对应的编号(上下不要有空行,左右不要有空格)
vim myid 内容为2
- 拷贝配置好的zookeeper到其他机器上
xsync zookeeper-3.5.7,并分别在hadoop103、hadoop104上修改myid文件中内容为3、4 - 增加如下配置 ```shell server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
配置参数解读 server.A=B:C:D A是一个数字,表示这个是低几台服务器,集群模式下配置一个文件myid,这个文件在dataDir目录下, 这个文件里面有一个数据就是A的值,zookeeper启动时读取此文件,拿到里面的数据和zoo.cfg里面的 配置信息
5. 启动每一个节点`bin.zkServer.sh start`
5. 查看节点状态,myid大的节点为主节点,其他的为从节点`bin.zkServer.sh status`
5. 启动客户端`bin/zkCli.sh -server hadoop102:2181`
<a name="zd2NF"></a>
## 编写启动和停止脚本
`vim /home/lhd/bin/zk.sh`
```shell
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ----------------zookeeper $i 启动-----------------
ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo -----------------zookeeper $i 停止----------------
ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------------zookeeper $i 状态----------------
ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh status"
done
}
;;
esac
客户端的基本操作
| 命令基本语法 | 功能描述 |
|---|---|
| help | 显示所有操作命令 |
| ls path [watch] | 使用 ls 命令来查看当前znode中所包含的内容 |
| ls2 path [watch] | 查看当前节点数据并能看到更新次数等数据 |
| create | 普通创建 -s 含有序列 -e 临时(重启或者超时消失) |
| get path [watch] | 获得节点的值 |
| set | 设置节点的具体值 |
| stat | 查看节点状态 |
| delete | 删除节点 |
| rmr | 递归删除节点 |
[zk: localhost:2181(CONNECTED) 1] ls2 /
[zookeeper]
cZxid = 0x0 创建节点的事务ID
ctime = Thu Jan 01 08:00:00 CST 1970 znode被创建的毫秒数
mZxid = 0x0 znode最后更新的事务zxid
mtime = Thu Jan 01 08:00:00 CST 1970 znode最后修改的毫秒数
pZxid = 0x0 znode最后更新的子节点zxid
cversion = -1 znode子节点变化号,znode子节点修改次数
dataVersion = 0 znode数据变化号
aclVersion = 0 znode访问控制列表的变化号
ephemeralOwner = 0x0 如果是临时节点,这个是znode拥有者的session id,如果不是临时节点则是0
dataLength = 0 znode的数据长度
numChildren = 1 znode子节点数量
监听器
监听器原理
- 首先要有一个main()线程
- 在main线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信,一个负责监听
- 通过connect线程将注册的监听事件发送给zookeeper
- 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
- Zooleeper监听到有数据或路径变化,就会将这个消息发送给listener线程
- listener线程内部调用了process()方法
(1)在 hadoop104 主机上注册监听/sanguo 节点数据变化 [zk: localhost:2181(CONNECTED) 26] get -w /sanguo (2)在 hadoop103 主机上修改/sanguo 节点的数据 [zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi" (3)观察 hadoop104 主机收到数据变化的监听 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo 注意:在hadoop103再多次修改/sanguo的值,hadoop104上不会再收到监听。因为注册 一次,只能监听一次。想再次监听,需要再次注册。 2)节点的子节点变化监听(路径变化) (1)在 hadoop104 主机上注册监听/sanguo 节点的子节点变化 [zk: localhost:2181(CONNECTED) 1] ls -w /sanguo [shuguo, weiguo] (2)在 hadoop103 主机/sanguo 节点上创建子节点 [zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi" Created /sanguo/jin (3)观察 hadoop104 主机收到子节点变化的监听 WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo 注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。API应用
