bigywater.tech
ZooKeeper · 33

五节点 Quorum 可视化检查

一个 5 节点的 ZooKeeper 集群「看起来是否健康」,最少要看哪几项?这篇写一个只用四字命令的检查表,在健康、一个 follower 掉线、leader 被杀三种状态下各打印一次。

synced_followers
leader 上这一项少于 N−1,说明有 follower 掉线
zxid 一致
健康时各节点 zxid 相同
ruok 不够
只起 1/3 时 ruok 回 imok,srvr 却是不服务

健康时

实测 · 本机执行输出
  [健康]
  节点      端口    角色        zxid             连接数 outstanding synced_followers   avg延迟ms
  z33-1   7300  follower  0x100000065        1           0                -       0.0
  z33-2   7301  follower  0x100000065        1           0                -       0.0
  z33-3   7302  leader    0x100000065        1           0                4       0.0
  z33-4   7303  follower  0x100000065        2           0                -    6.7426
  z33-5   7304  follower  0x100000065        1           0                -       0.0

一个 follower 掉线

实测 · 本机执行输出
  [1 个 follower 停止]
  节点      端口    角色        zxid             连接数 outstanding synced_followers   avg延迟ms
  z33-1   7300  已停止      
  z33-2   7301  follower  0x100000065        1           0                -       0.0
  z33-3   7302  leader    0x100000065        1           0                3       0.0
  z33-4   7303  follower  0x100000065        2           0                -    6.6863
  z33-5   7304  follower  0x100000065        1           0                -       0.0

leader 被杀

实测 · 本机执行输出
  [leader 刚被杀]
  节点      端口    角色        zxid             连接数 outstanding synced_followers   avg延迟ms
  z33-1   7300  已停止      
  z33-2   7301  不服务      
  z33-3   7302  已停止      
  z33-4   7303  不服务      
  z33-5   7304  不服务      

  [选举完成后]
  节点      端口    角色        zxid             连接数 outstanding synced_followers   avg延迟ms
  z33-1   7300  已停止      
  z33-2   7301  follower  0x100000065        2           0                -       1.0
  z33-3   7302  已停止      
  z33-4   7303  follower  0x100000065        1           0                -       0.0
  z33-5   7304  leader    0x200000000        1           0                2       0.0

为什么不能只看 ruok

实测 · 本机执行输出
  只起 1/3:ruok = imok | srvr 首行 = This ZooKeeper instance is not currently serving requests

分步演示

五节点检查表
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。5 节点伪集群;检查表用 srvr 与 mntr(白名单设为 *);「已停止」是脚本里进程已退出,不是四字命令的返回
    • 没有验证:Prometheus 指标(第 63 篇)、JMX(第 64 篇)、更多运维指标的阈值、四字命令的访问控制(第 67 篇)
    京ICP备2026067502号-1京公网安备11010502063487号