zookeeper常用命令

znode的基础操作

创建znode

# zookeeper使用create命令创建znode
[zk: localhost:2181(CONNECTED) 3] create /zqf
Created /zqf
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper, zqf]

# -e: 创建临时znode。
# -s:创建带有编号的znode。

查看znode

# 使用ls命令查看某个znode下的子znode信息,常用选项如下:
-w: 启用监听器watch功能。
-s: 查看stat命令的相关信息且查看给定znode路径的子节点信息。
-R: 对查看znode且查看给定znode路径的子节点信息。

# 使用get命令可以查看znode中存储的数据。
-s: 查看stat命令的相关信息。
-w: 启用监听器watch功能。

# 使用stat命令可以查看znode的元数据信息。
cZxid: 数据节点创建时的事物ID。        
ctime: 数据节点创建时的时间。        
mZxid: 数据节点最后一次更新时的事物ID。        
mtime: 数据节点最后一次更新时的时间。        
pZxid: 数据节点的子节点最后一次被修改时的事务ID。        
cversion: 子节点的更改次数。        
dataVersion: 数据节点的更改次数,即维护的是一个数据版本号。        
aclVersion: 节点的ACL的更改次数。        
ephemeralOwner: 如果节点是临时节点,则表示创建该节点的会话SessionID,如果节点是持久节点,则该属性值为0。        
dataLength: 数据内容的长度。        
numChildren: 数据节点当前的子节点的数量。

修改znode数据

# zookeeper使用set命令修改znode数据,常用命令选项如下所示:
-s: 修改数据后,返回znode的stat信息。      
-v: 修改数据时可以指定子节点更改的次数版本("dataVersion"),这和ES的乐观锁机制有点类似

删除znode

使用delete命令删除znode,要求该znode没有子znode节点。

使用deleteall命令删除包含子znode节点,生产环境中慎用,有点类似于linux的"rm -rf"指令。

监听器案例

使用"get -w path"注册监听器,监听znode的数据变化

get /hadoop
set /hadoop "HADOOP2021"
get -w /hadoop  # 注意哈,此时我用"-w"监听了当前的znode。HADOOP2021
set /hadoop "SPARK"  # 当我们修改znode的数据后,在当前终端会触发相应的通知机制。
set /hadoop "FLINK"  # 当我们在此修改时,发现并没有新的通知机制,说明"-w"选项只能触发一次

使用"stat -w path"注册监听器,监听znode的数据变化

stat -w /hadoop 
set /hadoop "Storm"
set /hadoop "HBase"

使用"ls -w path"注册监听器,监听znode的子节点数量的变化

ls -w /hadoop  # 注意哈,此处我启用了监听器
set /hadoop "HADOOP"  # 修改当前znode数据发现并没有触发监听器的通知机制
set /hadoop/hdfs "NN DN JN"  # 修改子znode的数据发现依旧是没有触发监听器机制
create /hadoop/hive "Hive"  # 但当我们在监听的znode节点下创建(你也可以尝试一下删除)新节点时,就会触发监听器的通知机制。

删除监听器

get -w /zqf  # 注意哈,此处使用了get指令添加了一个监视器
removewatches /zqf  # 此处我又使用"removewatches"指令删除了监听器
set /zqf "ZQF"  # 当我们修改znode发现并没有触发监听器,这正是由于上面我们删除监听器导致的。

zookeeper常用的监控命令

zookeeper支持某些特定的四字命令与其的交互。它们大多是查询命令,用来获取zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或者nc向zookeeper提交相应的命令。
zookeeper常用四字命令如下所示:

conf: 输出相关服务配置的详细信息。比如端口,zookeeper数据及日志配置路径,最大连接数,session超时时间,serverId等。
ruok: 测试服务是否处于正确运行状态,如果回复的不是"imok",那就说明该节点挂掉啦!注意观察输出结果
envi: 输出关于服务器的环境变量。
cons: 列出所有连接到这台服务器的客户端连接/会话的详细信息。包括"接收/发送"的包数量,session id,操作延迟,最后的操作执行等信息。
dump: 列出未经处理的会话和临时节点。打印集群的所有会话信息,包括ID,以及临时节点等信息。用在Leader节点上才有效果。
stat: 输出服务器的详细信息,接收/发送包数量,连接数,模式(leader/follower),节点总数,延迟。所有客户端的列表。
查看统计信息,一般用来查看哪个节点被选择作为follower或者leader。
srvr: 和stat输出信息一样,只不过少了客户端连接信息。
mntr: 输出比stat更为详细的服务器统计信息。列出集群的健康状态。
wchs: 列出服务器watches的简洁信息,如连接总数,watching节点总数和watches总数。
wchc: 通过session分组,列出watch的所有节点,它的输出是一个与watch相关的会话的节点列表。
wchp: 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。
reqs: 查看未经处理的请求。
crst: 重置当前这台服务器所有连接/会话的统计信息。
srst: 重置server状态。

部署命令行工具:

yum -y install nc telnet

案例:

# reqs命令(查看未经处理的请求)
echo reqs | nc 100.100.137.71 2181

可能会遇到的报错: "conf is not executed because it is not in the whitelist."解决方案:

# 如果出现"conf is not executed because it is not in the whitelist."的报错信息,说明咱们的zookeeper集群并没有开启四字命令。

# 我们需要修改"zoo.cfg"配置文件,并添加"4lw.commands.whitelist=*"这行配置信息即可:
vim /usr/local/zookeeper/conf/zoo.cfg
4lw.commands.whitelist=*

zkServer.sh restart
posted @ 2025-08-03 15:35  阿峰博客站  阅读(7)  评论(0)    收藏  举报