1. 前言
在3台机器分别部署了zookeeper-3.4.5,本文操作是在此基础上进行的。部署详情参见上一篇文章
2. 客户端登录与帮助查看
1 # 由于是集群模式,所以可以在3台机器的其中任意一台进行登录,操作结果和数据也会同步到其他机器 2 [root@docker01 bin]# pwd 3 /app/zookeeper-3.4.5/bin 4 [root@docker01 bin]# ll 5 total 64 6 -rwxr-xr-x 1 501 games 238 Oct 1 2012 README.txt 7 -rwxr-xr-x 1 501 games 1909 Oct 1 2012 zkCleanup.sh 8 -rwxr-xr-x 1 501 games 1049 Oct 1 2012 zkCli.cmd 9 -rwxr-xr-x 1 501 games 1512 Oct 1 2012 zkCli.sh 10 -rwxr-xr-x 1 501 games 1333 Oct 1 2012 zkEnv.cmd 11 -rwxr-xr-x 1 501 games 2599 Oct 1 2012 zkEnv.sh 12 -rwxr-xr-x 1 501 games 1084 Oct 1 2012 zkServer.cmd 13 -rwxr-xr-x 1 501 games 5467 Oct 1 2012 zkServer.sh 14 -rw-r--r-- 1 root root 25108 May 26 14:51 zookeeper.out 15 [root@docker01 bin]# ./zkCli.sh # 客户端登录 16 ……………… # 一些摘要信息 17 [zk: localhost:2181(CONNECTED) 0] 18 [zk: localhost:2181(CONNECTED) 0] help # 客户端帮助信息 19 ZooKeeper -server host:port cmd args 20 stat path [watch] # 查看路径【节点】属性信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次 21 set path data [version] # 设置/修改节点信息 22 ls path [watch] # 查看路径【节点】 [watch] 观察模式,有改变则会被通知,watch一次有效一次 23 delquota [-n|-b] path 24 ls2 path [watch] 25 setAcl path acl 26 setquota -n|-b val path 27 history 28 redo cmdno 29 printwatches on|off 30 delete path [version] # 删除节点 31 sync path 32 listquota path 33 rmr path # 递归删除 34 get path [watch] # 更具路径【节点】得到信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次 35 create [-s] [-e] path data acl # 创建节点和数据 -s 序列化【避免重复】 -e 临时数据【常用】 36 addauth scheme auth 37 quit # 退出客户端 38 getAcl path 39 close 40 connect host:port # 可以连接到其他客户端,前提在一个集群内 41 [zk: localhost:2181(CONNECTED) 1]
2.1. 数据的属性说明
属性 |
描述 |
czxid |
节点被创建的Zxid值 |
mzxid |
节点被修改的Zxid值 |
ctime |
节点被创建的时间 |
mtime |
节点最后一次被修改的时间 |
versoin |
节点被修改的版本号 |
cversion |
节点的所拥有子节点被修改的版本号 |
aversion |
节点的ACL被修改的版本号 |
emphemeralOwner |
如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0 |
dataLength |
节点数据域的长度 |
numChildren |
节点拥有的子节点个数 |
3. 常用操作
3.1. 切换到其他客户端
1 [zk: localhost:2181(CONNECTED) 1] connect 172.16.1.13:2181 2 ……………… # 一些摘要信息 3 WATCHER:: 4 5 WatchedEvent state:SyncConnected type:None path:null 6 7 [zk: 172.16.1.13:2181(CONNECTED) 2]
3.2. 节点的增删改查
3.2.1. 增加节点
1 [zk: 172.16.1.13:2181(CONNECTED) 2] ls / 2 [zookeeper] 3 [zk: 172.16.1.13:2181(CONNECTED) 3] create /zhang01/yang01 test0001 # 保证父节点存在 4 Node does not exist: /zhang01/yang01 5 [zk: 172.16.1.13:2181(CONNECTED) 4] 6 [zk: 172.16.1.13:2181(CONNECTED) 4] create /zhang01 test01 7 Created /zhang01 8 [zk: 172.16.1.13:2181(CONNECTED) 5] ls / 9 [zookeeper, zhang01]
3.2.2. 查询节点
1 [zk: 172.16.1.13:2181(CONNECTED) 7] ls / 2 [zookeeper, zhang01] 3 [zk: 172.16.1.13:2181(CONNECTED) 8] get /zhang01 4 test01 # 内容 5 cZxid = 0x100000007 # 创建数据时的事物编号 6 ctime = Sat May 26 15:11:40 CST 2018 # 创建时间 7 mZxid = 0x100000007 # 修改数据时的事物编号 8 mtime = Sat May 26 15:11:40 CST 2018 # 修改时间 9 pZxid = 0x100000007 # 持久化事物编号 10 cversion = 0 # 创建版本号 11 dataVersion = 0 # 数据版本 12 aclVersion = 0 # 权限版本 13 ephemeralOwner = 0x0 # 持久接待 14 dataLength = 6 # 数据长度 15 numChildren = 0 # 子节点数
3.2.3. 修改节点
1 [zk: 172.16.1.13:2181(CONNECTED) 9] ls / 2 [zookeeper, zhang01] 3 [zk: 172.16.1.13:2181(CONNECTED) 10] set /zhang01 1111111 # 修改节点信息 4 cZxid = 0x100000007 5 ctime = Sat May 26 15:11:40 CST 2018 6 mZxid = 0x100000009 7 mtime = Sat May 26 15:15:38 CST 2018 8 pZxid = 0x100000007 9 cversion = 0 10 dataVersion = 1 11 aclVersion = 0 12 ephemeralOwner = 0x0 13 dataLength = 7 14 numChildren = 0 15 [zk: 172.16.1.13:2181(CONNECTED) 11] get /zhang01 16 1111111 17 cZxid = 0x100000007 18 ctime = Sat May 26 15:11:40 CST 2018 19 mZxid = 0x100000009 20 mtime = Sat May 26 15:15:38 CST 2018 21 pZxid = 0x100000007 22 cversion = 0 23 dataVersion = 1 24 aclVersion = 0 25 ephemeralOwner = 0x0 26 dataLength = 7 27 numChildren = 0
3.2.4. 节点常规删除
1 [zk: localhost:2181(CONNECTED) 1] ls /zhang01 2 [test04, test03, test02, test01] 3 [zk: localhost:2181(CONNECTED) 3] ls /zhang01/test04 # 没有子节点 4 [] 5 [zk: localhost:2181(CONNECTED) 4] get /zhang01/test04 6 date_test04 7 cZxid = 0x10000000d 8 ……………… 9 [zk: localhost:2181(CONNECTED) 5] delete /zhang01/test04 # 删除子节点 10 [zk: localhost:2181(CONNECTED) 6] ls /zhang01 # 经常看删除成功 11 [test03, test02, test01] 12 [zk: localhost:2181(CONNECTED) 7] delete /zhang01 # 如果有子节点那么不能删除 13 Node not empty: /zhang01
3.2.5. 递归删除节点
1 [zk: localhost:2181(CONNECTED) 8] ls /zhang01 2 [test03, test02, test01] 3 [zk: localhost:2181(CONNECTED) 9] rmr /zhang01 # 递归删除 4 [zk: localhost:2181(CONNECTED) 10] ls /zhang01 # 删除成功 5 Node does not exist: /zhang01 6 [zk: localhost:2181(CONNECTED) 11] ls / 7 [zookeeper]
3.3. 持久节点和临时节点
第一台客户端
1 [zk: localhost:2181(CONNECTED) 14] ls / 2 [zookeeper] 3 [zk: localhost:2181(CONNECTED) 15] create /zhang01 yang01 # 默认持久节点 4 Created /zhang01 5 [zk: localhost:2181(CONNECTED) 16] create -e /zhang02 yang02 # 创建临时节点 6 Created /zhang02 7 [zk: localhost:2181(CONNECTED) 17] ls / 8 [zookeeper, zhang02, zhang01] 9 [zk: localhost:2181(CONNECTED) 18] get /zhang01 10 yang01 11 cZxid = 0x100000018 12 ctime = Sat May 26 15:33:47 CST 2018 13 mZxid = 0x100000018 14 mtime = Sat May 26 15:33:47 CST 2018 15 pZxid = 0x100000018 16 cversion = 0 17 dataVersion = 0 18 aclVersion = 0 19 ephemeralOwner = 0x0 # 代表持久节点 20 dataLength = 6 21 numChildren = 0 22 [zk: localhost:2181(CONNECTED) 19] get /zhang02 23 yang02 24 cZxid = 0x100000019 25 ctime = Sat May 26 15:33:55 CST 2018 26 mZxid = 0x100000019 27 mtime = Sat May 26 15:33:55 CST 2018 28 pZxid = 0x100000019 29 cversion = 0 30 dataVersion = 0 31 aclVersion = 0 32 ephemeralOwner = 0x1639b3087ac0002 # 代表临时节点 33 dataLength = 6 34 numChildren = 0 35 [zk: localhost:2181(CONNECTED) 20] quit # 退出当前客户端【那么当前这个客户端创建的临时节点会被自动删除】
第二台客户端
1 # 之前可以正常查到,但是当上面的客户端退出后,节点/zhang02 被自动删除了 2 [zk: localhost:2181(CONNECTED) 4] ls / 3 [zookeeper, zhang01]
3.4. 节点序列化
1 [zk: localhost:2181(CONNECTED) 14] ls / 2 [zookeeper, zhang01] 3 [zk: localhost:2181(CONNECTED) 15] ls /zhang01 4 [] 5 [zk: localhost:2181(CONNECTED) 16] 6 [zk: localhost:2181(CONNECTED) 16] create -s /zhang01/test01 test01 7 Created /zhang01/test010000000002 8 [zk: localhost:2181(CONNECTED) 17] create -s -e /zhang01/test02 test02 9 Created /zhang01/test020000000003 10 [zk: localhost:2181(CONNECTED) 18] 11 [zk: localhost:2181(CONNECTED) 18] ls /zhang01 12 [test020000000003, test010000000002]
3.5. watch模式节点操作
watch监听有不同的类型,有监听状态的stat ,内容的get,目录结构的ls。
3.5.1. watch节点属性
监听自身属性改变和节点删除
1 # 第一台客户端监听 2 [zk: localhost:2181(CONNECTED) 4] ls / 3 [zookeeper, zhang01] 4 [zk: localhost:2181(CONNECTED) 5] stat /zhang01 watch 5 cZxid = 0x100000018 6 ctime = Sat May 26 15:33:47 CST 2018 7 mZxid = 0x10000001e 8 mtime = Sat May 26 15:44:20 CST 2018 9 pZxid = 0x100000018 10 cversion = 0 11 dataVersion = 2 12 aclVersion = 0 13 ephemeralOwner = 0x0 14 dataLength = 8 15 numChildren = 0 16 17 # 第二台客户端操作 18 [zk: localhost:2181(CONNECTED) 10] set /zhang01 yyyywwwww # 修改节点信息 19 …………………… 20 21 # 第一台客户端自动响应 22 [zk: localhost:2181(CONNECTED) 6] 23 WATCHER:: 24 25 WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01
3.5.2. watch路径
1 # 第一台客户端 2 [zk: localhost:2181(CONNECTED) 6] ls /zhang01 watch 3 [] 4 5 # 第二台客户端操作 6 [zk: localhost:2181(CONNECTED) 11] create -e /zhang01/test01 test01 7 Created /zhang01/test01 8 9 # 第一台客户端自动响应 10 [zk: localhost:2181(CONNECTED) 7] 11 WATCHER:: 12 13 WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zhang01 14 15 [zk: localhost:2181(CONNECTED) 7]
3.5.3. watch节点
节点自身属性改变和节点被删除都会被通知
自身属性改变
1 # 第一台客户端 2 [zk: localhost:2181(CONNECTED) 7] ls / 3 [zookeeper, zhang01] 4 [zk: localhost:2181(CONNECTED) 8] ls /zhang01 5 [test01] 6 [zk: localhost:2181(CONNECTED) 9] 7 [zk: localhost:2181(CONNECTED) 9] get /zhang01/test01 watch 8 test01 9 cZxid = 0x100000020 10 ……………… 11 12 # 第二台客户端操作 13 [zk: localhost:2181(CONNECTED) 12] set /zhang01/test01 kkkk 14 cZxid = 0x100000020 15 ctime = Sat May 26 15:49:30 CST 2018 16 ……………… 17 18 # 第一台客户端自动响应 19 [zk: localhost:2181(CONNECTED) 10] 20 WATCHER:: 21 22 WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01/test01 23 24 [zk: localhost:2181(CONNECTED) 10]
节点删除
1 # 第一台客户端 2 [zk: localhost:2181(CONNECTED) 10] get /zhang01/test01 watch 3 kkkk 4 cZxid = 0x100000020 5 ……………… 6 7 # 第二台客户端操作 8 [zk: localhost:2181(CONNECTED) 14] delete /zhang01/test01 9 10 # 第一台客户端自动响应 11 [zk: localhost:2181(CONNECTED) 11] 12 WATCHER:: 13 14 WatchedEvent state:SyncConnected type:NodeDeleted path:/zhang01/test01 15 16 [zk: localhost:2181(CONNECTED) 11]