本文简单介绍下zk客户端中增删改查命令的使用,首先,在ZK安装目录下的bin目录下执行以下命令,启动3个zk服务
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
使用如下命令链接zk客户端
./zkCli.sh -server ip:port
我的zk服务启动在本地,3个端口分别为2182,2183,2184,随便选择一台进行连接:
./zkCli.sh -server 127.0.0.1:2184
启动成功后如图
首先输入help命令看看都有哪些客户端命令
1、Create - 创建Zookeeper节点
语法如下:
create [-s] [-e] path data acl
-s:代表SEQUENTIAL,即顺序节点特性-e:代表EPHEMERAL,即临时节点特性,不加-s -e默认创建永久节点path:为节点路径,如/zkParentNode,/zkParentNode/subNodeacl:用于zk权限控制,一般用不到
测试永久节点创建
create /persistentNode 1
测试顺序节点创建
create -s /senquentialNode 1
测试临时节点创建
create -e /ephemeralNode 1
查看节点数据,节点数据如下
断开连接(quit)后,重新连接客户端,看临时节点是否存在
可以看到,临时节点ephemeralNode已经没了(连接断开后自动删除)
2、ls / get - 读取节点信息
- 列出指定节点路径下子节点信息
ls path [watch]
path-节点路径watch-为该节点添加一个监听器,监听器只会触发一次,如果在该path下创建子节点,会产生NodeChildrenChanged事件,如果在path下删除子节点,会产生NodeChildrenChanged事件,删除该path所在节点,会产生NodeDeleted事件
如上图例子中 ls / 列出了 /目录下所有节点信息,其中zookeeper节点为默认节点信息
测试watch机制
先执行如下命令,给persistentNode下添加个名为myWatcher的监听器
ls /persistentNode myWatcher
此时在persistentNode下新建节点,效果如下图所示
- 读取指定节点数据信息和属性信息
get path [watch]
箭头处内容为数据内容
属性字段如下:
| 属性名 | 说明 |
|---|---|
| cZxid | 节点创建时事务id |
| cTime | 节点创建时间 |
| mZxid | 节点最后一次更新时事务id |
| mTime | 节点最后一次更新时间 |
| pZxid | 节点子节点列表变化的事务id(子节点列表变化,不是子节点内容变化) |
| cVersion | 子节点版本号 |
| dataVersion | 数据节点内容版本号,更新后+1 |
| aclVersion | ACL版本号 |
| ephemeralOwner | 若为临时节点,则为创建节点的会话sessionId,若为永久节点则为0 |
| dataLength | 节点数据长度 |
| numChildren | 子节点数量 |
3、set - 更新节点信息
set path data [version]
version:标识更新是基于节点哪个dataVersion进行更新
本地对持久节点进行更新测试,结果如下
set /persistentNode 2
可以看到mZxid变大了,mTime变成当前时间,同时dataVersion从0变成1
4、delete - 删除节点信息
删除指定路径节点(节点下必须没有子节点)
delete path [version]
创建一个节点delete,并在delete下新建delete1节点信息
尝试删除delete节点,提示node not empty
先删除子节点,此时delete父节点下午子节点,再删除父节点,删除成功