Debian 上 Zookeeper 故障排查流程
一 快速判定与恢复
sudo systemctl status zookeeper 查看是否 active(running)。sudo netstat -tulpen | grep 2181 确认 2181 端口监听正常。sudo tail -n50 /var/log/zookeeper/zookeeper.out 或 journalctl -u zookeeper -xe 抓取最近错误与堆栈。sudo systemctl start zookeeper,再次查看状态与日志定位启动失败原因。二 配置与依赖核查
tickTime、initLimit、syncLimit、dataDir、clientPort=2181、server.X=host:2888:3888 是否完整且一致。server.X 的 X 一一对应,且唯一。java -version,确认已安装且版本与 Zookeeper 兼容(常见为 OpenJDK 8)。三 网络连通与防火墙
ping <zk_ip>、telnet <zk_ip> 2181 或 nc -vz <zk_ip> 2181 验证可达与端口开放。sudo firewall-cmd --permanent --add-port=2181/tcp && sudo firewall-cmd --reloadsudo iptables -I INPUT -p tcp --dport 2181 -j ACCEPTsudo setenforce 0;或按需调整策略以允许 Zookeeper 网络访问。server.X 中主机名可解析(/etc/hosts 或 DNS 正确)。四 集群状态与健康检查
echo stat | nc localhost 2181(查看角色与连接)echo ruok | nc localhost 2181(返回 imok 表示进程存活)echo mntr | nc localhost 2181(关键指标:zk_avg_latency、zk_packets_received、zk_outstanding_requests 等)/usr/share/zookeeper/bin/zkServer.sh status(显示 leader/follower 状态)/usr/share/zookeeper/bin/zkCli.sh -server <zk_ip>:2181,观察会话建立与 ls / 是否正常。五 日志与数据目录深度分析
java -cp "$ZOOKEEPER_HOME/lib/*:$ZOOKEEPER_HOME/zookeeper-*.jar" org.apache.zookeeper.server.LogFormatter <logfile>autopurge.snapRetainCount=3autopurge.purgeInterval=1(单位:小时)top/htop、free -m、iostat -x 1 检查 CPU/内存/磁盘 I/O;高占用时结合配置与负载优化(如 JVM 堆、I/O 优化、连接数限制 maxClientCnxns)。附 常见错误对照表
| 症状 | 快速检查 | 处理建议 |
|---|---|---|
| 端口 2181 被占用 | `netstat -tulpen | grep 2181` |
| 启动失败且报权限/路径错误 | ls -ld dataDir、日志报错 |
修正 dataDir 权限/属主,确保磁盘可写 |
| 集群无法选主或节点异常 | `echo stat | nc、查看 zoo.cfg的server.X` |
| 客户端连接超时/拒绝 | telnet/nc 到 2181 |
放行防火墙、检查客户端超时与版本兼容 |
| 事务日志/快照异常或磁盘满 | 查看 dataDir/version-2 |
清理过期数据、配置自动清理、扩容磁盘 |
| 频繁 GC 或 OOM | GC 日志、堆设置 | 调整 JVM 堆、优化会话与连接数、降低负载 |