11.6.3 集群状态检查与运维操作

集群状态检查与运维操作的核心是快速判断角色分布、健康度、延迟与一致性。以下以三节点集群为例,通过四字命令与运维脚本完成巡检、滚动重启与故障排错。

原理草图(状态检查与角色分布):

文章图片

一、安装与工具准备(四字命令/CLI)

# 确保 nc 可用(示例以 CentOS/Ubuntu)
sudo yum -y install nc || sudo apt-get -y install netcat

# 确认 zkServer.sh 路径
ls /opt/zookeeper/bin/zkServer.sh

二、基础健康检查与命令解释(含预期输出)

# 1) 查看节点角色(leader/follower/standalone)
/opt/zookeeper/bin/zkServer.sh status
# 预期:Mode: leader 或 Mode: follower

# 2) ruok:快速存活检查(ok 表示存活)
echo ruok | nc zk1 2181
# 预期:imok

# 3) srvr:运行信息(版本、延迟、连接数)
echo srvr | nc zk1 2181

# 4) mntr:关键指标(延迟/连接/节点数)
echo mntr | nc zk1 2181 | egrep "zk_avg_latency|zk_max_latency|zk_outstanding_requests|zk_znode_count|zk_watch_count"
# 解释:
# zk_avg_latency:平均响应延迟(ms)
# zk_max_latency:最大延迟(ms)
# zk_outstanding_requests:未完成请求数
# zk_znode_count:节点数量
# zk_watch_count:watch 数量

三、一致性与会话状态检查(排查异常会话/选举)

# 1) stat:连接与会话概要
echo stat | nc zk2 2181

# 2) cons:客户端连接明细
echo cons | nc zk2 2181 | head -n 5

# 3) wchs:watch 风险排查(watch 过多易触发风暴)
echo wchs | nc zk2 2181

# 4) srst:重置统计(适合排查高延迟)
echo srst | nc zk2 2181

四、滚动重启与运维操作示例(先 follower 后 leader)

# 假设节点:zk1(leader), zk2/zk3(follower)
# Step 1:检查角色
for h in zk1 zk2 zk3; do
  echo "== $h =="; /opt/zookeeper/bin/zkServer.sh --config /etc/zookeeper status
done

# Step 2:重启 follower
ssh zk2 "/opt/zookeeper/bin/zkServer.sh stop && sleep 3 && /opt/zookeeper/bin/zkServer.sh start"
ssh zk3 "/opt/zookeeper/bin/zkServer.sh stop && sleep 3 && /opt/zookeeper/bin/zkServer.sh start"

# Step 3:确认 follower 恢复
for h in zk2 zk3; do echo ruok | nc $h 2181; done

# Step 4:重启 leader
ssh zk1 "/opt/zookeeper/bin/zkServer.sh stop && sleep 3 && /opt/zookeeper/bin/zkServer.sh start"

五、扩容/缩容配置示例(含文件路径)

# /etc/zookeeper/zoo.cfg 示例片段
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
# 扩容新增 server.4=zk4:2888:3888

# /var/lib/zookeeper/myid 示例
# zk1: 1, zk2: 2, zk3: 3, zk4: 4

六、常见故障排查与命令

# 1) 角色异常/频繁选举:检查时间同步
timedatectl status
# 建议开启 NTP/chrony

# 2) 网络不通
nc -vz zk1 2888
nc -vz zk1 3888

# 3) 磁盘/GC 问题导致延迟高
iostat -x 1 5
jstat -gcutil $(pgrep -f zookeeper) 1s 5

# 4) 发现脑裂/选举抖动:查看 zxid 与连接数
echo srvr | nc zk1 2181 | egrep "Zxid|Connections"

七、练习题(带目标)
1. 使用 ruok/srvr/mntr 完成一次巡检报告,列出三节点的角色、平均延迟与连接数。
2. 人为停止一个 follower,验证集群可用性,并记录 stat 输出的变化。
3. 将 server.4 加入配置,完成扩容后用 zkServer.sh status 验证新节点角色。
4. 构造 watch 高峰(可用简单客户端),观察 wchs 变化并给出治理建议。