Ubuntu上Zookeeper节点故障排查步骤
一 快速判定与恢复
二 配置与身份校验
三 网络连通性与防火墙
四 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 启动日志报Address already in use | **netstat -lnp | grep 2181** 或 **ss -ltnp |
| zkServer.sh status 报Error contacting service | 进程是否存在(jps)、端口是否监听、日志报错 | 前台启动定位、修正配置/网络/权限,必要时重启 |
| 集群无法形成leader/follower | myid是否唯一且位于dataDir、server.X配置是否一致、主机名解析是否正确 | 修正myid与server列表、校对/etc/hosts、重启节点 |
| 节点间无法互通 | ping/telnet/nc 到对端2181/2888/3888 | 开放防火墙、排查安全组/ACL、修复路由与DNS |
| 启动成功但很快退出 | dataDir或日志目录不可写、磁盘满、JVM参数不当 | 创建目录并赋权、清理磁盘、调整JAVA_OPTS与内存配置 |
五 一键排查脚本示例
#!/usr/bin/env bash
set -e
export ZK_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZK_HOME/bin
echo "=== 1) 进程与端口 ==="
jps -l | grep QuorumPeerMain || echo "QuorumPeerMain not found"
ss -ltnp | grep ':2181\|:2888\|:3888' || echo "No ZK ports listening"
echo "=== 2) 服务状态 ==="
$ZK_HOME/bin/zkServer.sh status || true
echo "=== 3) 配置与myid ==="
grep -E '^(clientPort|dataDir|server\.)' $ZK_HOME/conf/zoo.cfg || true
DATA_DIR=$(grep '^dataDir=' $ZK_HOME/conf/zoo.cfg | cut -d= -f2)
[ -f "$DATA_DIR/myid" ] && echo "myid=$(cat $DATA_DIR/myid)" || echo "myid missing in $DATA_DIR"
echo "=== 4) 防火墙 ==="
sudo ufw status || true
echo "=== 5) 最近日志 ==="
tail -n50 $ZK_HOME/logs/*.out 2>/dev/null || tail -n50 "$DATA_DIR/zookeeper.out" 2>/dev/null || echo "No log found"
将脚本保存为zk-check.sh,执行bash zk-check.sh即可快速获取进程、端口、配置、防火墙与日志的关键信息,便于定位问题。