zookeeper常用命令行操作

image

常见的zookeeper命令行操作。
在3台机器分别部署了zookeeper-3.4.5【集群】,本文操作是在此基础上进行的。部署详情参见上一篇文章

客户端登录与帮助查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 由于是集群模式,所以可以在3台机器的其中任意一台进行登录,操作结果和数据也会同步到其他机器 
[root@docker01 bin]# pwd
/app/zookeeper-3.4.5/bin
[root@docker01 bin]# ll
total 64
-rwxr-xr-x 1 501 games 238 Oct 1 2012 README.txt
-rwxr-xr-x 1 501 games 1909 Oct 1 2012 zkCleanup.sh
-rwxr-xr-x 1 501 games 1049 Oct 1 2012 zkCli.cmd
-rwxr-xr-x 1 501 games 1512 Oct 1 2012 zkCli.sh
-rwxr-xr-x 1 501 games 1333 Oct 1 2012 zkEnv.cmd
-rwxr-xr-x 1 501 games 2599 Oct 1 2012 zkEnv.sh
-rwxr-xr-x 1 501 games 1084 Oct 1 2012 zkServer.cmd
-rwxr-xr-x 1 501 games 5467 Oct 1 2012 zkServer.sh
-rw-r--r-- 1 root root 25108 May 26 14:51 zookeeper.out
[root@docker01 bin]# ./zkCli.sh # 客户端登录
……………… # 一些摘要信息
[zk: localhost:2181(CONNECTED) 0]
[zk: localhost:2181(CONNECTED) 0] help # 客户端帮助信息
ZooKeeper -server host:port cmd args
stat path [watch] # 查看路径【节点】属性信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次
set path data [version] # 设置/修改节点信息
ls path [watch] # 查看路径【节点】 [watch] 观察模式,有改变则会被通知,watch一次有效一次
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version] # 删除节点
sync path
listquota path
rmr path # 递归删除
get path [watch] # 更具路径【节点】得到信息 [watch] 观察模式,有改变则会被通知,watch一次有效一次
create [-s] [-e] path data acl # 创建节点和数据 -s 序列化【避免重复】 -e 临时数据【常用】
addauth scheme auth
quit # 退出客户端
getAcl path
close
connect host:port # 可以连接到其他客户端,前提在一个集群内
[zk: localhost:2181(CONNECTED) 1]

数据的属性说明

属性 描述
czxid 节点被创建的Zxid值
mzxid 节点被修改的Zxid值
ctime 节点被创建的时间
mtime 节点最后一次被修改的时间
versoin 节点被修改的版本号
cversion 节点的所拥有子节点被修改的版本号
aversion 节点的ACL被修改的版本号
emphemeralOwner 如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0
dataLength 节点数据域的长度
numChildren 节点拥有的子节点个数

常用操作

切换到其他客户端

1
2
3
4
5
6
7
[zk: localhost:2181(CONNECTED) 1] connect 172.16.1.13:2181  
……………… # 一些摘要信息
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: 172.16.1.13:2181(CONNECTED) 2]

节点的增删改查

增加节点

1
2
3
4
5
6
7
8
9
[zk: 172.16.1.13:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: 172.16.1.13:2181(CONNECTED) 3] create /zhang01/yang01 test0001 # 保证父节点存在
Node does not exist: /zhang01/yang01
[zk: 172.16.1.13:2181(CONNECTED) 4]
[zk: 172.16.1.13:2181(CONNECTED) 4] create /zhang01 test01
Created /zhang01
[zk: 172.16.1.13:2181(CONNECTED) 5] ls /
[zookeeper, zhang01]

查询节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[zk: 172.16.1.13:2181(CONNECTED) 7] ls /     
[zookeeper, zhang01]
[zk: 172.16.1.13:2181(CONNECTED) 8] get /zhang01
test01 # 内容
cZxid = 0x100000007 # 创建数据时的事物编号
ctime = Sat May 26 15:11:40 CST 2018 # 创建时间
mZxid = 0x100000007 # 修改数据时的事物编号
mtime = Sat May 26 15:11:40 CST 2018 # 修改时间
pZxid = 0x100000007 # 持久化事物编号
cversion = 0 # 创建版本号
dataVersion = 0 # 数据版本
aclVersion = 0 # 权限版本
ephemeralOwner = 0x0 # 持久接待
dataLength = 6 # 数据长度
numChildren = 0 # 子节点数

修改节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[zk: 172.16.1.13:2181(CONNECTED) 9] ls /
[zookeeper, zhang01]
[zk: 172.16.1.13:2181(CONNECTED) 10] set /zhang01 1111111 # 修改节点信息
cZxid = 0x100000007
ctime = Sat May 26 15:11:40 CST 2018
mZxid = 0x100000009
mtime = Sat May 26 15:15:38 CST 2018
pZxid = 0x100000007
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: 172.16.1.13:2181(CONNECTED) 11] get /zhang01
1111111
cZxid = 0x100000007
ctime = Sat May 26 15:11:40 CST 2018
mZxid = 0x100000009
mtime = Sat May 26 15:15:38 CST 2018
pZxid = 0x100000007
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

节点常规删除

1
2
3
4
5
6
7
8
9
10
11
12
13
[zk: localhost:2181(CONNECTED) 1] ls /zhang01
[test04, test03, test02, test01]
[zk: localhost:2181(CONNECTED) 3] ls /zhang01/test04 # 没有子节点
[]
[zk: localhost:2181(CONNECTED) 4] get /zhang01/test04
date_test04
cZxid = 0x10000000d
………………
[zk: localhost:2181(CONNECTED) 5] delete /zhang01/test04 # 删除子节点
[zk: localhost:2181(CONNECTED) 6] ls /zhang01 # 经查看删除成功
[test03, test02, test01]
[zk: localhost:2181(CONNECTED) 7] delete /zhang01 # 如果有子节点那么不能删除
Node not empty: /zhang01

递归删除节点

1
2
3
4
5
6
7
[zk: localhost:2181(CONNECTED) 8] ls /zhang01
[test03, test02, test01]
[zk: localhost:2181(CONNECTED) 9] rmr /zhang01 # 递归删除
[zk: localhost:2181(CONNECTED) 10] ls /zhang01 # 删除成功
Node does not exist: /zhang01
[zk: localhost:2181(CONNECTED) 11] ls /
[zookeeper]

持久节点和临时节点

第一台客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[zk: localhost:2181(CONNECTED) 14] ls /            
[zookeeper]
[zk: localhost:2181(CONNECTED) 15] create /zhang01 yang01 # 默认持久节点
Created /zhang01
[zk: localhost:2181(CONNECTED) 16] create -e /zhang02 yang02 # 创建临时节点
Created /zhang02
[zk: localhost:2181(CONNECTED) 17] ls /
[zookeeper, zhang02, zhang01]
[zk: localhost:2181(CONNECTED) 18] get /zhang01
yang01
cZxid = 0x100000018
ctime = Sat May 26 15:33:47 CST 2018
mZxid = 0x100000018
mtime = Sat May 26 15:33:47 CST 2018
pZxid = 0x100000018
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0 # 代表持久节点
dataLength = 6
numChildren = 0
[zk: localhost:2181(CONNECTED) 19] get /zhang02
yang02
cZxid = 0x100000019
ctime = Sat May 26 15:33:55 CST 2018
mZxid = 0x100000019
mtime = Sat May 26 15:33:55 CST 2018
pZxid = 0x100000019
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1639b3087ac0002 # 代表临时节点
dataLength = 6
numChildren = 0
[zk: localhost:2181(CONNECTED) 20] quit # 退出当前客户端【那么当前这个客户端创建的临时节点会被自动删除】

第二台客户端

1
2
3
# 之前可以正常查到,但是当上面的客户端退出后,节点/zhang02 被自动删除了  
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper, zhang01]

节点序列化

1
2
3
4
5
6
7
8
9
10
11
12
[zk: localhost:2181(CONNECTED) 14] ls /
[zookeeper, zhang01]
[zk: localhost:2181(CONNECTED) 15] ls /zhang01
[]
[zk: localhost:2181(CONNECTED) 16]
[zk: localhost:2181(CONNECTED) 16] create -s /zhang01/test01 test01
Created /zhang01/test010000000002
[zk: localhost:2181(CONNECTED) 17] create -s -e /zhang01/test02 test02
Created /zhang01/test020000000003
[zk: localhost:2181(CONNECTED) 18]
[zk: localhost:2181(CONNECTED) 18] ls /zhang01
[test020000000003, test010000000002]

watch模式节点操作

watch监听有不同的类型,有监听状态的stat ,内容的get,目录结构的ls。

watch节点属性

监听到自身属性改变则被通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 第一台客户端监听
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper, zhang01]
[zk: localhost:2181(CONNECTED) 5] stat /zhang01 watch
cZxid = 0x100000018
ctime = Sat May 26 15:33:47 CST 2018
mZxid = 0x10000001e
mtime = Sat May 26 15:44:20 CST 2018
pZxid = 0x100000018
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

# 第二台客户端操作
[zk: localhost:2181(CONNECTED) 10] set /zhang01 yyyywwwww # 修改节点信息,节点属性被改变
……………………

# 第一台客户端自动响应
[zk: localhost:2181(CONNECTED) 6]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01

watch路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 第一台客户端
[zk: localhost:2181(CONNECTED) 6] ls /zhang01 watch
[]

# 第二台客户端操作
[zk: localhost:2181(CONNECTED) 11] create -e /zhang01/test01 test01
Created /zhang01/test01

# 第一台客户端自动响应
[zk: localhost:2181(CONNECTED) 7]
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zhang01

[zk: localhost:2181(CONNECTED) 7]

watch节点内容

节点自身内容改变和节点被删除都会被通知

自身属性改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 第一台客户端
[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper, zhang01]
[zk: localhost:2181(CONNECTED) 8] ls /zhang01
[test01]
[zk: localhost:2181(CONNECTED) 9]
[zk: localhost:2181(CONNECTED) 9] get /zhang01/test01 watch
test01
cZxid = 0x100000020
………………

# 第二台客户端操作
[zk: localhost:2181(CONNECTED) 12] set /zhang01/test01 kkkk
cZxid = 0x100000020
ctime = Sat May 26 15:49:30 CST 2018
………………

# 第一台客户端自动响应
[zk: localhost:2181(CONNECTED) 10]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/zhang01/test01

[zk: localhost:2181(CONNECTED) 10]

节点删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 第一台客户端
[zk: localhost:2181(CONNECTED) 10] get /zhang01/test01 watch
kkkk
cZxid = 0x100000020
………………

# 第二台客户端操作
[zk: localhost:2181(CONNECTED) 14] delete /zhang01/test01

# 第一台客户端自动响应
[zk: localhost:2181(CONNECTED) 11]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDeleted path:/zhang01/test01

[zk: localhost:2181(CONNECTED) 11]

<-------------the end------------->
lightzhang wechat
欢迎扫一扫,订阅我的微信公众号!
坚持原创分享,你的支持就是我最大的动力!