官网首页:Apache ZooKeeper
2、单机模式安装 2.1、安装前准备- 安装JDK拷贝Zookeeper安装包apache-zookeeper-3.6.3-bin.tar.gz到Linux机器上面解压到/opt/zookeeper/目录:
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/zookeeper/2.2、修改配置
将/opt/zookeeper/apache-zookeeper-3.6.3-bin/conf这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
[root@VM-20-13-centos conf]# mv zoo_sample.cfg zoo.cfg
打开 zoo.cfg 文件,修改 dataDir 路径:
[root@VM-20-13-centos conf]# vim zoo.cfg
修改如下内容:
dataDir=/opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData
在/opt/zookeeper/apache-zookeeper-3.6.3-bin/这个目录上创建 zkData 文件夹
[root@VM-20-13-centos apache-zookeeper-3.6.3-bin]# mkdir zkData3、操作Zookeeper 3.1、启动Zookeeper服务端
[root@VM-20-13-centos bin]# ./zkServer.sh start /usr/bin/java ZooKeeper JMX enabled by default Using config: /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@VM-20-13-centos bin]# jps 8272 QuorumPeerMain 8363 Jps [root@VM-20-13-centos bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX enabled by default Using config: /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: standalone [root@VM-20-13-centos bin]#3.2、启动Zookeeper客户端
[root@VM-20-13-centos apache-zookeeper-3.6.3-bin]# bin/zkCli.sh3.3、退出客户端
[zk: localhost:2181(CONNECTED) 0] quit3.4、停止Zookeeper服务端
[root@VM-20-13-centos bin]# ./zkServer.sh stop /usr/bin/java ZooKeeper JMX enabled by default Using config: /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED [root@VM-20-13-centos bin]# jps 9127 Jps [root@VM-20-13-centos bin]4、配置参数解析
Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
4.1. tickTime =2000: Zookeeper 服务端与客户端心跳时间Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳, 时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。 (session的最小超时时间是2*tickTime)
4.2. initLimit =10: Leader与Follower 初始通信时限集群中的Follower与Leader之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
4.3. syncLimit =5: Leader与Follower同步通信时限集群初始化完成后,Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime, Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.4. dataDir:数据文件目录+数据持久化路径主要用于保存 Zookeeper 中的数据。
4.5. clientPort =2181:客户端连接端口监听客户端连接的端口。
5、客户端命令行操作使用help命令查看支持的操作
[zk: localhost:2181(CONNECTED) 26] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
version
Command not found: Command not found help
[zk: localhost:2181(CONNECTED) 27]
个人理解:
Zookeeper中的Znode就是一个路径,Znode的子节点就是这个路径下的子目录,Znode的父节点就是这个路径的父目录。
同时Zookeeper中的一个Znode也是一个Key,Key的值就是这个Znode对应的路径,对应的可以为这个Key设置一个Value,也就是这个Znode的值,Value可以不设置,默认为null。
[zk: localhost:2181(CONNECTED) 27] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 28] create /node1 Created /node1 [zk: localhost:2181(CONNECTED) 29] ls / [node1, zookeeper] [zk: localhost:2181(CONNECTED) 30] ls /node1 [] [zk: localhost:2181(CONNECTED) 31] get node1 Path must start with / character [zk: localhost:2181(CONNECTED) 32] get /node1 null [zk: localhost:2181(CONNECTED) 33] set /node1 "node1-value" [zk: localhost:2181(CONNECTED) 34] get /node1 node1-value [zk: localhost:2181(CONNECTED) 35] ls / [node1, zookeeper] [zk: localhost:2181(CONNECTED) 36] ls /node1 [] [zk: localhost:2181(CONNECTED) 37]
测试临时节点,客户端退出后再重新连接,临时节点已被删除
[zk: localhost:2181(CONNECTED) 7] create -e /temp-node Created /temp-node [zk: localhost:2181(CONNECTED) 8] ls / [temp-node, zookeeper] [zk: localhost:2181(CONNECTED) 9] quit WATCHER:: WatchedEvent state:Closed type:None path:null 2022-02-13 22:15:38,695 [myid:] - INFO [main:ZooKeeper@1619] - Session: 0x101b5fd62a60001 closed 2022-02-13 22:15:38,699 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@578] - EventThread shut down for session: 0x101b5fd62a60001 2022-02-13 22:15:38,700 [myid:] - ERROR [main:ServiceUtils@42] - Exiting JVM with code 0 [root@VM-20-13-centos apache-zookeeper-3.6.3-bin]# bin/zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1]
测试带序号的节点
[zk: localhost:2181(CONNECTED) 2] create -s /node Created /node0000000004 [zk: localhost:2181(CONNECTED) 3] ls / [node0000000004, zookeeper] [zk: localhost:2181(CONNECTED) 4] create -s /node Created /node0000000005 [zk: localhost:2181(CONNECTED) 5] create -s /new-node Created /new-node0000000006 [zk: localhost:2181(CONNECTED) 6] ls / [new-node0000000006, node0000000004, node0000000005, zookeeper] [zk: localhost:2181(CONNECTED) 7]
测试监听节点值变化
在客户端1上面创建一个节点
[zk: localhost:2181(CONNECTED) 12] create /node1 Created /node1 [zk: localhost:2181(CONNECTED) 13] ls /node1 [] [zk: localhost:2181(CONNECTED) 14] ls / [node1, zookeeper] [zk: localhost:2181(CONNECTED) 15]
在客户端2上面监听此节点
[zk: localhost:2181(CONNECTED) 2] ls / [node1, zookeeper] [zk: localhost:2181(CONNECTED) 3] get -w /node1 null [zk: localhost:2181(CONNECTED) 4]
在客户端1上面改变节点的值
[zk: localhost:2181(CONNECTED) 16] set /node1 "value1"
客户端2上面监听到变化
[zk: localhost:2181(CONNECTED) 4] WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/node1
测试监听节点的子节点变化
在客户端1上面创建一个节点
[zk: localhost:2181(CONNECTED) 18] ls / [node1, zookeeper]
在客户端2上面监听这个节点的子节点变化情况
[zk: localhost:2181(CONNECTED) 0] ls / [node1, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls -w /node1 []
在客户端1上面创建一个子节点
[zk: localhost:2181(CONNECTED) 19] create /node1/subnode Created /node1/subnode [zk: localhost:2181(CONNECTED) 20]
在客户端2上面监听到子节点变化事件
[zk: localhost:2181(CONNECTED) 2] WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node1



