zookeeper常用客户端命令

zookeeper常用客户端命令

zookeeper 命令用于在 zookeeper 服务上执行操作。首先执行命令,打开新的 session 会话,进入终端:

sh zkCli.shsh zkCli.sh -server 127.0.0.1:2181

一、新增节点

create [-s] [-e] [-c] [-t ttl] path [data] [acl] //其中-s为有序节点 -e为临时节点 -c为容器节点 -t指定ttl节点

1、创建持久化节点

[zk: localhost:2181(CONNECTED) 3] create /wfj "123456"
Created /wfj
[zk: localhost:2181(CONNECTED) 4] create /wfj1 ""
Created /wfj1

2、创建持久化有序节点,此时创建的节点名为指定节点名 + 自增序号

[zk: localhost:2181(CONNECTED) 7] create -s /a "a"
Created /a0000000003
[zk: localhost:2181(CONNECTED) 8] create -s /b "b"
Created /b0000000004
[zk: localhost:2181(CONNECTED) 9] create -s /c "c"
Created /c0000000005

 3、创建临时节点,临时节点在会话过期后被删除

[zk: localhost:2181(CONNECTED) 10] create -e /tmp "tmp"
Created /tmp

4、创建临时有序节点,临时节点在会话过期后被删除

[zk: localhost:2181(CONNECTED) 1] create -s -e /aa "aa"
Created /aa0000000007
[zk: localhost:2181(CONNECTED) 2] create -s -e /bb "bb"
Created /bb0000000008
[zk: localhost:2181(CONNECTED) 3] create -s -e /cc "cc"
Created /cc0000000009

 5、创建容器节点,当删除掉container节点下的所有子节点后, container节点本身也会被清除掉,默认被清除的时间是60s

[zk: localhost:2181(CONNECTED) 11] create -c /container
Created /container
[zk: localhost:2181(CONNECTED) 12] create /container/sub1
Created /container/sub1
[zk: localhost:2181(CONNECTED) 13] create /container/sub2
Created /container/sub2
[zk: localhost:2181(CONNECTED) 14] ls -R /container
/container
/container/sub1
/container/sub2
[zk: localhost:2181(CONNECTED) 15] delete /container/sub1
[zk: localhost:2181(CONNECTED) 16] delete /container/sub2
[zk: localhost:2181(CONNECTED) 17] ls -R /container
/container
[zk: localhost:2181(CONNECTED) 18] ls -R /container
Node does not exist: /container

 6、创建就ttl节点 -t ,ttl节点的特性是可以创建一个打失效时间的节点,失效时间过来之后节点会被自动删除。需要添加扩展业务,修改zkServer.sh。 -Dzookeeper.extendedTypesEnabled=true

[zk: localhost:2181(CONNECTED) 0] create -t 5000 /ttl-node ttttt
Created /ttl-node

 二、修改节点

通过set命令可以对节点进行修改,如下:

[zk: localhost:2181(CONNECTED) 3] set /wfj "345"
[zk: localhost:2181(CONNECTED) 4] get /wfj
345
[zk: localhost:2181(CONNECTED) 5] stat /wfj
cZxid = 0x54
ctime = Tue May 11 07:32:08 UTC 2021
mZxid = 0x55
mtime = Tue May 11 08:03:06 UTC 2021
pZxid = 0x54
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

也可以基于版本号进行修改,类似于乐观锁机制。如果传入的版本号dataVersion和当前版本号不一致时,zookeeper会拒绝本次修改:

[zk: localhost:2181(CONNECTED) 13] set -v 2 /wfj "123"
version No is not valid : /wfj

三、删除节点

可以用过delete命令或者delateall命令对节点进行删除,使用delete删除节点时,如果该节点下存在子节点,该节点不允许删除。如果想删除某个节点极其所有后代节点,可以使用deleteall命令进行删除。部分老版本不支持deleteall命令,可以使用rmr path命令进行递归删除。删除节点和更新节点一样,也可以传入版本号,当传入的数据版本号和当前节点的数据版本不一致时,zookeeper不会执行删除操作。

[zk: localhost:2181(CONNECTED) 7] delete /wfj
Node not empty: /wfj
[zk: localhost:2181(CONNECTED) 10] deleteall /wfj
[zk: localhost:2181(CONNECTED) 24] delete -v 1 /wfj 
version No is not valid : /wfj
[zk: localhost:2181(CONNECTED) 25] delete -v 0 /wfj

四、查看节点

查看节点列表有 ls 和 ls2 两个命令,后者时前者的增强。不近可以查看指定路径下的所有节点,还可以查看当前节点的信息,zookeeper最新版本已经取消了对 ls2 命令的支持,提供了-s参数来取代ls2。-R参数递归显示子节点,-w参数为节点设置监视,此处我们只演示ls命令。

[zk: localhost:2181(CONNECTED) 33] ls /wfj 
[node1]
[zk: localhost:2181(CONNECTED) 34] ls -R /wfj 
/wfj
/wfj/node1
[zk: localhost:2181(CONNECTED) 35] ls -s /wfj 
[node1]
cZxid = 0x69
ctime = Mon May 17 10:55:29 UTC 2021
mZxid = 0x69
mtime = Mon May 17 10:55:29 UTC 2021
pZxid = 0x6a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: localhost:2181(CONNECTED) 36] ls -w /wfj 
[node1]

 通过get查看节点数据,通过stat查看节点属性。在旧版本中,通过get命令即可以同时获取到节点属性和节点数据。新版本也可以通过 -s 参数同时获取节点属性和数据,-w参数为在数据更改上做监视。

[zk: localhost:2181(CONNECTED) 38] get /wfj
123
[zk: localhost:2181(CONNECTED) 39] stat /wfj
cZxid = 0x69
ctime = Mon May 17 10:55:29 UTC 2021
mZxid = 0x69
mtime = Mon May 17 10:55:29 UTC 2021
pZxid = 0x6a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

五、监听器

zookeeper的具有监听机制,注册事件监听器可以在节点发生变化的时候向客户端发起通知。需要注意的是zookeeper的触发器是一次性的,即触发一次后立即失效。

5.1、监听器get -w path

使用get -w path注册的监听器能够在节点内容发生改变的时候,向客户端发起通知。在旧版本的zookeeper中,注册监听器的方式为 get path [watch]。在注册监听之后,在另一个会话set修改节点数据,可以看到客户端收到了server发来的节点变更消息

[zk: localhost:2181(CONNECTED) 45] get -w /wfj
123
[zk: localhost:2181(CONNECTED) 46] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/wfj

5.2、监听器stat -w path

使用stat -w path注册的监听器能够在节点状态发送改变的时候,向客户端发起通知。在旧版本的zookeeper中,注册监听器的方式为 stat path [watch]。在注册监听之后,在另一个会话set修改节点数据,可以看到客户端收到了server发来的节点变更消息

[zk: localhost:2181(CONNECTED) 47] stat -w /wfj
cZxid = 0x69
ctime = Mon May 17 10:55:29 UTC 2021
mZxid = 0x6c
mtime = Mon May 17 12:02:27 UTC 2021
pZxid = 0x6a
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: localhost:2181(CONNECTED) 48] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/wfj

5.3、监听器ls -w path

使用ls -w path注册的监听器能够监听该节点下所有子节点的增加和删除操作。在旧版本的zookeeper中,注册监听器的方式为 ls/ls2 path [watch]。在注册监听之后,在另一个会话删除子节点,可以看到客户端收到了server发来的节点变更消息 

[zk: localhost:2181(CONNECTED) 49] ls -w /wfj
[node1]
[zk: localhost:2181(CONNECTED) 50] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/wfj

zookeeper常用的客户端命令基本就这些,同时还存在这许多其他命令,但是日常会很少用到。可以登录zookeeper客户端之后,执行help来查看。

原文地址:https://www.cnblogs.com/jkin/p/14752075.html