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