ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)

我使用的安装文件是 apache-zookeeper-3.6.0-bin.tar.gz ,以下内容均以此版本进行说明。这个是官网的3.6.0《CLI命令说明》 感兴趣的可以查看。

1.1 启动、连接服务

由于配置了环境变量$ZOOKEEPER_HOME所以在哪里都可以启动服务和客户端:

# 启动服务 
[root@tcloud ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# 连接服务 connect to the localhost with the default port:2181
[root@tcloud ~]#  zkCli.sh
# 这里指定 connect to the remote host with timeout:3s
[root@tcloud ~]#  zkCli.sh  -timeout 3000 -server tcloud:2181
Connecting to tcloud:2181
# 部分日志信息不再贴出
Welcome to ZooKeeper!
# 先验证一下zookeeper的版本
[zk: tcloud:2181(CONNECTED) 0] version
ZooKeeper CLI version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT

1.2 全部命令

ZooKeeper -server host:port cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close
        config [-c] [-w] [-s]
        connect host:port
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b] path
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        history
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        quit
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b val path
        stat [-w] path
        sync path
        versionl

1.3 查看节点信息

查看节点信息命令为 ls [-s] [-w] [-R] path, -s状态 -w监听器 -R递归,测试一下:

# 查看根节点下的所有节点
[zk: tcloud:2181(CONNECTED) 14] ls /
[admin, brokers, cluster, config, consumers, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, workspace, zookeeper]
# 查看/admin 下的节点
[zk: tcloud:2181(CONNECTED) 15] ls -w /admin
[delete_topics]
# 递归查询/admin 下的节点
[zk: tcloud:2181(CONNECTED) 16] ls -R /admin
/admin
/admin/delete_topics
# 查看/admin 下的节点详情
[zk: tcloud:2181(CONNECTED) 17] ls -s /admin
[delete_topics]
cZxid = 0x15
ctime = Fri Aug 06 15:57:38 CST 2021
mZxid = 0x15
mtime = Fri Aug 06 15:57:38 CST 2021
pZxid = 0x16
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

1.4 新增节点

新增节点命令为 create [-s] [-e] [-c] [-t ttl] path [data] [acl]

create [-s] [-e] path data acl  #其中-s 为有序节点,-e 临时节点

创建节点并写入数据:

create /hadoop 123456

创建有序节点,此时创建的节点名为指定节点名 + 自增序号:

[zk: localhost:2181(CONNECTED) 23] create -s /a  "aaa"
Created /a0000000022
[zk: localhost:2181(CONNECTED) 24] create -s /b  "bbb"
Created /b0000000023
[zk: localhost:2181(CONNECTED) 25] create -s /c  "ccc"
Created /c0000000024

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

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

1.5 查看节点

  1. 获取节点数据
# 格式
get path [watch]
[zk: localhost:2181(CONNECTED) 31] get /hadoop
123456  #节点数据
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14b
mtime = Fri May 24 17:03:06 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
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 数据节点当前的子节点个数
  1. 查看节点状态

可以使用 stat 命令查看节点状态,它的返回值和 get 命令类似,但不会返回节点数据。

[zk: localhost:2181(CONNECTED) 32] stat /hadoop
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14b
mtime = Fri May 24 17:03:06 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

1.6 更新节点

更新节点的命令是 set ,可以直接进行修改,如下:

[zk: localhost:2181(CONNECTED) 33] set /hadoop 345
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14c
mtime = Fri May 24 17:13:05 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 1  # 注意更改后此时版本号为 1,默认创建时为 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

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

[zk: localhost:2181(CONNECTED) 34] set /hadoop 678 0
version No is not valid : /hadoop   #无效的版本号

1.7 删除节点

删除节点的语法如下:

delete path [version]

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

[zk: localhost:2181(CONNECTED) 36] delete /hadoop 0
version No is not valid : /hadoop  #无效的版本号
[zk: localhost:2181(CONNECTED) 37] delete /hadoop 1
[zk: localhost:2181(CONNECTED) 38]

要想删除某个节点及其所有后代节点,可以使用递归删除,命令为 rmr path 。

2.监听器

2.1 get path [watch]

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

[zk: localhost:2181(CONNECTED) 4] get /hadoop watch
[zk: localhost:2181(CONNECTED) 5] set /hadoop 45678
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop  #节点值改变

2.2 stat path [watch]

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

[zk: localhost:2181(CONNECTED) 7] stat /hadoop watch
[zk: localhost:2181(CONNECTED) 8] set /hadoop 112233
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop  #节点值改变

2.3 ls\ls2 path [watch]

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

[zk: localhost:2181(CONNECTED) 9] ls /hadoop watch
[]
[zk: localhost:2181(CONNECTED) 10] create /hadoop/yarn "aaa"
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop

3.zookeeper 四字命令

  • conf 打印服务配置的详细信息。
  • cons 列出连接到此服务器的所有客户端的完整连接/会话详细信息。包括接收/发送的数据包数量,会话 ID,操作延迟,上次执行的操作等信息。
  • dump 列出未完成的会话和临时节点。这只适用于 Leader 节点。
  • envi 打印服务环境的详细信息。
  • ruok 测试服务是否处于正确状态。如果正确则返回“imok”,否则不做任何相应。
  • stat 列出服务器和连接客户端的简要详细信息。
  • wchs 列出所有 watch 的简单信息。
  • wchc 按会话列出服务器 watch 的详细信息。
  • wchp 按路径列出服务器 watch 的详细信息。

使用前需要使用 yum install nc 安装 nc 命令,使用示例如下:

[root@hadoop001 bin]# echo stat | nc localhost 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03,
built on 06/29/2018 04:05 GMT
Clients:
/0:0:0:0:0:0:0:1:50584[1](queued=0,recved=371,sent=371)
/0:0:0:0:0:0:0:1:50656[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/19
Received: 372
Sent: 371
Connections: 2
Outstanding: 0
Zxid: 0x150
Mode: standalone
Node count: 167
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
7天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
14天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
14天前
|
网络协议 Unix Shell
第十一章 Shell常用命令与工具(二)
第十一章 Shell常用命令与工具(二)
|
14天前
|
移动开发 Shell Linux
第十一章 Shell常用命令与工具(一)
第十一章 Shell常用命令与工具(一)
|
14天前
|
存储 Shell 数据安全/隐私保护
ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
【4月更文挑战第11天】ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
33 7
|
14天前
|
Shell
ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
【4月更文挑战第10天】ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
26 0
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
303 2
|
14天前
|
监控 Dubbo 前端开发
快速入门分布式系统与Dubbo+zookeeper Demo
快速入门分布式系统与Dubbo+zookeeper Demo
207 0
|
14天前
|
消息中间件 Java 网络安全
JAVAEE分布式技术之Zookeeper的第一次课
JAVAEE分布式技术之Zookeeper的第一次课
275 0
|
14天前
|
监控 NoSQL Java
Zookeeper分布式锁
Zookeeper分布式锁
289 1