zookeeper常用客户端命令
zookeeper 命令用于在 zookeeper 服务上执行操作。首先执行命令,打开新的 session 会话,进入终端:
sh zkCli.sh 或 sh 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来查看。