Ubuntu 上 Zookeeper 故障排查清单
一 快速定位与常用命令
二 常见故障与修复对照表
| 症状 | 可能原因 | 快速修复 |
|---|---|---|
| 启动输出 “Starting zookeeper … FAILED TO START” | 使用了不带二进制文件的源码包(3.5.x 起需下载带 bin 的包) | 重新下载 apache-zookeeper-x.y.z-bin.tar.gz,解压即用 |
| 前台或日志报 “Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain” | 包类型错误(源码包)或 classpath 异常 | 使用带 bin 的发行包;不要拷贝旧版 lib 目录“救急” |
| “Error contacting service. It is probably not running.” | 配置目录不存在、端口被占用、主机名解析错误、防火墙阻断、myid 不一致等 | 见下方“关键配置检查”与“网络连通性检查” |
| “Address already in use” / “Bind failed” | clientPort(默认 2181)被占用 | 释放端口或改为未占用端口,重启 |
| “Error: JAVA_HOME is not set …” | 未设置 JAVA_HOME 或 PATH 无 java | 正确设置 JAVA_HOME 并加入 PATH,再启动 |
三 关键配置检查
四 网络连通性检查
五 一键排查脚本示例
#!/usr/bin/env bash
set -e
echo "=== 1) Java 与 JAVA_HOME ==="
if [ -z "$JAVA_HOME" ]; then
echo "JAVA_HOME 未设置,请先 export JAVA_HOME=/your/jdk/path"
exit 1
fi
"$JAVA_HOME/bin/java" -version
echo "=== 2) 进程与端口 ==="
jps | grep -E 'QuorumPeerMain|Jps'
sudo netstat -lnp | grep -E '2181|clientPort'
echo "=== 3) 前台启动看错误 ==="
cd "$ZOOKEEPER_HOME/bin"
./zkServer.sh start-foreground
# 如前台启动成功但后台异常,再回到脚本开头逐项检查