一文了解ZooKeeper基础命令和应用

ZooKeeper基础命令和应用

本文ZooKeeper版本:3.8.0

通过终端在zookeeper的bin打开新的session会话

ajisun@ajisun-2 bin> sh zkCli.sh

随便输入一些命令之后就会出现ZooKeeper的命令列表,如下

zk-client-api

下面详细介绍下主要API的使用

config

config

查看仲裁成员的配置

[zk: 1] config
server.1=127.0.0.1:2888:3888:participant
server.2=127.0.0.1:2898:3898:participant
server.3=127.0.0.1:2988:3988:participant
version=0

ls

ls [-s] [-w] [-R] path

查看某个节点下的节点列表

  • -s: 显示节点信息数据
  • -w: 设置监听
  • -R: 递归展示子节点
  • path:某一节点名
# 获取根节点列表
[zk: 4] ls /
[ajisun, zookeeper]

# 显示根节点数据
[zk: 5] ls -s /
[ajisun, zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x40000000a
cversion = 36
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2

# 递归展示根节点下的所有子节点
[zk: 6] ls -R /
/
/ajisun
/zookeeper
/zookeeper/config
/zookeeper/quota

# 添加监听,当子节点发生变更的时候输出信息
[zk: 7] ls /
[ajisun, zookeeper]
[zk: 8] create /ajisun/01
Created /ajisun/01
[zk: 9] ls -w /ajisun
[01]
[zk: 10] delete /ajisun/01
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/ajisun

如下命令代表查询的根节点下的所有节点

zk-client-api-ls

create

create [-s] [-e] [-c] [-t ttl] path [data] [acl]

创建一个节点

  • -s: 顺序节点
  • -e: 临时节点
  • -c: 容器节点
  • -t: ttl节点(有过期时间的节点)
  • data: 存储在节点上的数据
  • acl: 访问权限相关,默认全部可见
# 创建持久化节点 /ajisun
[zk: 6] create /ajisun 
Created /ajisun

# 创建持久化顺序节点 /ajisun(相同的节点名是自动加上了递增的序号来保证顺序的)
[zk: 7] create -s /ajisun data
Created /ajisun0000000005
[zk: 8] create -s /ajisun data
Created /ajisun0000000006

# 创建临时节点 /ajisun_ephemeral(当这个session连接断开的时候就会删除此节点)
[zk: 9] create -e /ajisun_e data
Created /ajisun_e

# 创建顺序临时节点 /ajisun_s_e 
[zk: 10] create -s -e /ajisun_s_e data
Created /ajisun_s_e0000000008
[zk: 11] create -s -e /ajisun_s_e data
Created /ajisun_s_e0000000009

# 创建容器节点(当容器节点的最后一个子节点被删除,此容器会被删除,但是并不是立即删除)
[zk: 34] create -c /ajisun_c data
Created /ajisun_c
[zk: 35] create -c /ajisun_c/01 data
Created /ajisun_c/01
[zk: 36] ls /ajisun_c
[01]
[zk: 37] delete /ajisun_c/01
[zk: 38] get /ajisun_c
data
[zk: 39] get /ajisun_c
Node does not exist: /ajisun_c

# 创建有过期时间的节点
# 需要在配置文件zoo.cfg中手动开启这个功能,增加配置 extendedTypesEnabled=true
[zk: 40] create -t 3000 /ajisun_t data
Created /ajisun_t
[zk: 41] get /ajisun_t
data
[zk: 42] get /ajisun_t
Node does not exist: /ajisun_t

get

get [-s] [-w] path

获取节点数据

  • -s: 显示节点信息
  • -w: 设置监听,节点发生变化的时候有监听信息输出
[zk: 45] create /ajisun 纪先生笔记
Created /ajisun

# 直接获取节点数据
[zk: 46] get /ajisun
纪先生笔记

# 显示节点数据信息
[zk: 47] get -s /ajisun
纪先生笔记    					# 节点内容数据
cZxid = 0x400000015   # 节点创建的事务ID(序号递增,每次create操作都会+1,创建session也会+1)
ctime = Thu Apr 28 17:09:13 CST 2022  # 节点创建的时间
mZxid = 0x400000015    # 节点最后一个更新时的事务ID
mtime = Thu Apr 28 17:09:13 CST 2022   # 节点最后一次更新的时间
pZxid = 0x400000015    # 节点的子节点最后一次被修改的事务ID
cversion = 0					 # 节点的版本号,更改次数
dataVersion = 0        # 节点数据的版本号 
aclVersion = 0         # 节点ACL的更改次数
ephemeralOwner = 0x0   # 如果是临时节点,则表示该节点的会话session ID;如果是持久化节点,则是0
dataLength = 15        # 节点数据的长度
numChildren = 0        # 当前节点的子节点数

# 节点设置监听,然后更改节点的数据
[zk: 48] get -w /ajisun
纪先生笔记
[zk: 49] set /ajisun 纪先生
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/ajisun
[zk: 50] get /ajisun
纪先生

delete

delete [-v version] path

删除节点(可以根据版本号删除)

  • -v version : 版本号
  • path: 节点路径
# 直接删除节点 /ajisun/02
[zk: 54] ls /ajisun
[01, 02]
[zk: 55] delete /ajisun/02
[zk: 56] ls /ajisun
[01]

#指定版本删除节点 /ajisun/01
 # 查看节点信息
[zk: 57] ls -s /ajisun/01
......
dataVersion = 0  # 此时版本是0
......

# 更新节点信息 并查看
[zk: 58] set /ajisun/01 ajisun01-01
[zk: 59] ls -s /ajisun/01
......
dataVersion = 1
......

# 指定不存在的版本号删除,删除失败
[zk: 60] delete -v 0 /ajisun/01
version No is not valid : /ajisun/01

# 指定正确版本号删除,删除成功
[zk: 61] delete -v 1 /ajisun/01
[zk: 62] ls /ajisun
[]

deleteall

deleteall path

删除指定路径下的所有节点

  • path:节点路径
[zk: 64] ls /
[ajisun, zookeeper]

# 删除 /ajisun节点
[zk: 65] deleteall /ajisun
[zk: 66] ls /
[zookeeper]

set

set [-s] [-v version] path data

更新指定节点的数据

  • -s:显示节点信息
  • -v version:指定版本(通过 CAS设置)
  • path:节点路径
[zk: 77] create /ajisun 纪先生
Created /ajisun

# 设置并显示节点信息
[zk: 78] set -s /ajisun 纪先生01
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x40000001f
mtime = Sun May 01 11:23:32 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 1 # 数据版本变成1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

# 设置0版本失败
[zk: 79] set -v 0 /ajisun 纪先生02
version No is not valid : /ajisun

# 设置1版本 成功
[zk: 80] set -s  -v 1 /ajisun 纪先生02
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000021
mtime = Sun May 01 11:28:05 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 2 # 版本号+1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

stat

stat [-w] path

查看节点的状态信息

  • -w:对节点设置监听
  • path:节点路径
# 查看节点 /ajisun 信息
[zk: 90] stat /ajisun
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000021
mtime = Sun May 01 11:28:05 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

# 节点设置监听(会话一)
[zk: 91] stat -w /ajisun
cZxid = 0x40000001e
ctime = Sun May 01 11:22:19 CST 2022
mZxid = 0x400000022
mtime = Sun May 01 14:58:59 CST 2022
pZxid = 0x40000001e
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0

# 变更节点(会话二)
[zk: 0] set /ajisun ajisun-stat

# 收到通知(会话一)
[zk: 92] 
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/ajisun

removewatches

removewatches path

移除监听

# 设置监听
[zk: 93] get -w /ajisun
ajisun-stat

# 移除监听
[zk: 94] removewatches  /ajisun

WATCHER::
WatchedEvent state:SyncConnected type:DataWatchRemoved path:/ajisun

history 和 redo

history

查看最近执行的11个命令

redo cmdno

重新执行某命令

# 历史cmd记录
[zk: 94] history 
0 - stat -w /ajisun
1 - get /ajisun
2 - get -s /ajisun
3 - get -s /ajisun
4 - create /ajisun/01 01
5 - get -s /ajisun
6 - llll
7 - set -w /ajisun 
8 - get -w /ajisun
9 - removewatches  /ajisun
10 - history 
​
# 重做1命令
[zk: 95] redo 1
ajisun-stat

以上是常用命令的详细说明和使用方式,包括增删改查以及设置监听等命令,还有个比较重要的权限控制ACL的命令后面会单独介绍的。

我是纪先生,用输出倒逼输入而持续学习,持续分享技术系列文章,以及全网值得收藏好文,欢迎关注公众号,做一个持续成长的技术人。

猜你喜欢

转载自juejin.im/post/7127543539759579144