Zookeeper 常用Shell命令总结

目录

一、概述

二、基础命令使用


一、概述

前面一篇文章我们介绍了Zookeeper中节点Znode的数据结构以及特性,本篇我们将总结一些常用的Zookeeper操作数据节点的shell命令。

二、基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。首先执行命令,打开新的 session 会话,进入终端。下面我们介绍一些基本常用命令的使用。

进入bin目录启动zookeeper服务端和客户端:

[root@localhost bin]# ./zkCli.sh 

【a】ls 查看节点列表命令

ls 命令用于查看某个路径下目录列表。格式:

ls path   #path代表路径

 如:查看 /路径下的所有节点:

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

可以看到,目前/根目录下只有一个节点:zookeeper节点。

【b】ls2 命令

ls2 命令用于查看某个路径下目录列表,它比 ls 命令列出更多的详细信息。格式:

ls2 path   #path代表路径

如查看 /根目录路径下节点详细信息:

[zk: localhost:2181(CONNECTED) 1] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

【c】create创建节点命令

create 命令用于创建节点并赋值。格式:

create [-s] [-e] path data acl   #其中-s 为有序节点,-e 临时节点
  • [-s] [-e]:-s 和 -e 都是可选的,-s 代表顺序节点, -e 代表临时节点,注意其中 -s 和 -e 可以同时使用的,并且临时节点不能再创建子节点;
  • path:指定要创建节点的路径;
  • data:要在此节点存储的数据;
  • path:访问权限相关,默认是 world;

如创建持久化节点/animal并写入数据:

[zk: localhost:2181(CONNECTED) 2] create /animal 0
Created /animal
[zk: localhost:2181(CONNECTED) 3] ls2 /animal 
[]
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x6
mtime = Mon Dec 14 11:03:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

如添加临时顺序节点,此时创建的节点名为指定节点名 + 自增序号:

[zk: localhost:2181(CONNECTED) 4] create -s -e /people "a"
Created /people0000000001
[zk: localhost:2181(CONNECTED) 5] create -s -e /people "b"
Created /people0000000002
[zk: localhost:2181(CONNECTED) 6] create -s -e /people "c"
Created /people0000000003
[zk: localhost:2181(CONNECTED) 7] create -s -e /people "d"
Created /people0000000004

可以看到, 此时创建的节点既是有序的,又是临时节点。注意:临时节点会在会话过期后被删除。

【d】set 更新节点命令

set 命令用于修改节点存储的数据。格式:

set path data [version]
  • path:节点路径。
  • data:需要存储的数据。
  • [version]:可选项,版本号(可用作乐观锁)。
[zk: localhost:2181(CONNECTED) 0] ls /  
[animal, zookeeper]
[zk: localhost:2181(CONNECTED) 1] set /animal "a"
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 2] get /animal
a
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

当然set更新命令也可以基于版本号进行更改,此时类似于乐观锁机制,当你传入的数据版本号(dataVersion) 和当前节点的数据版本号不符合时,zookeeper 会拒绝本次修改:

[zk: localhost:2181(CONNECTED) 2] get /animal
a
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1    #当前数据节点的版本号为1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] set /animal "a" 0   #版本号0与当前版本号不一致,不允许修改
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 4] set /animal "a" 2
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 5] set /animal "a" 3
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 6] set /animal "aaaa" 1
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x12
mtime = Mon Dec 14 11:11:52 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] get /animal 
aaaa
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x12
mtime = Mon Dec 14 11:11:52 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

【e】get 查看节点命令

get 命令用于获取节点数据和状态信息。格式:

get path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。
[zk: localhost:2181(CONNECTED) 13] create /node "node"
Created /node
[zk: localhost:2181(CONNECTED) 14] get /node
node
cZxid = 0x58
ctime = Mon Dec 21 11:25:02 CST 2020
mZxid = 0x58
mtime = Mon Dec 21 11:25:02 CST 2020
pZxid = 0x58
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

节点各个属性如下表。其中一个重要的概念是 Zxid(ZooKeeper Transaction Id),ZooKeeper 节点的每一次更改都具有唯一的 Zxid,如果 Zxid1 小于 Zxid2,则Zxid1 的更改发生在 Zxid2 更改之前。

状态属性说明如下:

  • cZxid:数据节点创建时的事务 ID。
  • ctime:数据节点创建时的时间。
  • mZxid:数据节点最后一次更新时的事务 ID。
  • mtime:数据节点最后一次更新时的时间。
  • pZxid:数据节点的子节点最后一次被修改时的事务 ID。
  • cversion:子节点的更改次数。
  • dataVersion:节点数据的更改次数。
  • aclVersion:节点的 ACL 的更改次数。
  • ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为 0。
  • dataLength:数据内容的长度
  • numChildren:数据节点当前的子节点个数。

【f】stat查看节点状态命令

stat 命令用于查看节点状态,它的返回值和 get 命令类似,但不会返回节点数据。格式:

stat path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。

如查看 /animal 节点状态:

[zk: localhost:2181(CONNECTED) 1] stat /animal
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x14
mtime = Mon Dec 14 11:16:57 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

【g】delete 删除节点命令

delete 命令用于删除某节点,和更新节点数据一样,也可以传入版本号,当你传入的数据版本号 (dataVersion)和当前节点的数据版本号不符合时,zookeeper 不会执行删除操作。格式:

delete path [version]
  •  path:节点路径。
  • [version]:可选项,版本号(同 set 命令)。

如删除 /animal 节点的子节点:

[zk: localhost:2181(CONNECTED) 2] ls /animal
[]
[zk: localhost:2181(CONNECTED) 4] create /animal/dog "dog"
Created /animal/dog
[zk: localhost:2181(CONNECTED) 5] create /animal/cat "cat"
Created /animal/cat
[zk: localhost:2181(CONNECTED) 6] ls /animal
[dog, cat]
[zk: localhost:2181(CONNECTED) 7] delete /animal/dog  
[zk: localhost:2181(CONNECTED) 8] ls /animal        
[cat]
[zk: localhost:2181(CONNECTED) 9] delete /animal/cat
[zk: localhost:2181(CONNECTED) 10] ls /animal        
[]

注意:删除数据节点只能一级一级删除,如果需要递归删除,可以使用rmr命令,如下示例:

[zk: localhost:2181(CONNECTED) 5] create /node "node"
Created /node
[zk: localhost:2181(CONNECTED) 6] create /node/node11 "node11"
Created /node/node11
[zk: localhost:2181(CONNECTED) 7] create /node/node22 "node22" 
Created /node/node22
[zk: localhost:2181(CONNECTED) 8] ls /node
[node11, node22]
[zk: localhost:2181(CONNECTED) 9] delete /node   #子节点不为空,不允许删除父节点  
Node not empty: /node
[zk: localhost:2181(CONNECTED) 10] rmr /node   #递归删除/node以及子节点
[zk: localhost:2181(CONNECTED) 11] ls /node
Node does not exist: /node

【h】监听器get path [watch]

使用 get path [watch] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。需要注意的是 zookeeper 的触发器是一次性的 (One-time trigger),即触发一次后就会立即失效。这里我们启动两个终端窗口:

终端一:查看节点的值并设置监听

[zk: localhost:2181(CONNECTED) 16] create /node1 "node1"
Created /node1
[zk: localhost:2181(CONNECTED) 17] get /node1 watch
node1
cZxid = 0x5b
ctime = Mon Dec 21 11:36:27 CST 2020
mZxid = 0x5b
mtime = Mon Dec 21 11:36:27 CST 2020
pZxid = 0x5b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

终端二:设置节点的值

[zk: localhost:2181(CONNECTED) 1] set /node1 "node11"

再次回到终端一,可以看到,监听反馈的事件信息:

WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/node1

可以看到,成功监听到NodeDataChanged 节点数据变更的事件。

【i】监听器stat path [watch]

使用 stat path [watch] 注册的监听器能够在节点状态发生改变的时候,向客户端发出通知。

终端一:查看节点的状态并设置监听

[zk: localhost:2181(CONNECTED) 18] stat /node1 watch
cZxid = 0x5b
ctime = Mon Dec 21 11:36:27 CST 2020
mZxid = 0x5c
mtime = Mon Dec 21 11:36:55 CST 2020
pZxid = 0x5b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

终端二:设置节点的值

[zk: localhost:2181(CONNECTED) 2] set /node1 "node111111"

再次回到终端一,可以看到,监听反馈的事件信息:

[zk: localhost:2181(CONNECTED) 19] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/node1

【j】监听器ls\ls2 path [watch]

使用 ls path [watch] 或 ls2 path [watch] 注册的监听器能够监听该节点下所有子节点的增加和删除操作。

终端一:查看节点的状态并设置监听

[zk: localhost:2181(CONNECTED) 19] ls /node1 watch
[]

 终端二:创建一个子节点

[zk: localhost:2181(CONNECTED) 3] create /node1/node11 "node11"
Created /node1/node11

再次回到终端一,可以看到,监听反馈的事件信息:

[zk: localhost:2181(CONNECTED) 20] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node1

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值