在 Linux 上排查 ZooKeeper 问题,核心就是看日志 + 看状态 + 看配置。下面按“从快到慢、从常见到深入”给你一套实用排错思路。
一般在:
$ZOOKEEPER_HOME/logs
常见文件:
zookeeper.out —— 最常用(启动 & 运行错误)zookeeper-<user>-server-<host>.logzookeeper-<user>-server-<host>.out如果你用 systemd:
journalctl -u zookeeper -f
查看 zoo.cfg:
cat $ZOOKEEPER_HOME/conf/zoo.cfg
重点关注:
dataDir=/var/lib/zookeeper
dataLogDir=/var/lib/zookeeper/log
dataDir:快照dataLogDir:事务日志(性能 & 一致性问题重点看)ps -ef | grep zookeeper
或
ss -lntp | grep 2181
tail -n 200 $ZOOKEEPER_HOME/logs/zookeeper.out
常见错误:
Address already in use
My id 2 not in the peer list
Cannot open channel to X at election address
echo stat | nc localhost 2181
或
echo ruok | nc localhost 2181
返回:
imok → 正常其他常用:
echo conf | nc localhost 2181
echo mntr | nc localhost 2181
每个节点:
cat /var/lib/zookeeper/myid
必须和 zoo.cfg 里对应:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
日志特征:
LOOKING
Cannot open channel to 2
排查:
iptables -L
telnet node2 2888
修改:
$ZOOKEEPER_HOME/conf/log4j.properties
例如:
zookeeper.root.logger=DEBUG,CONSOLE
重启 ZooKeeper。
| 现象 | 可能原因 |
|---|---|
| 启动就退出 | myid / 配置错误 |
| 一直 LOOKING | 集群节点不通 |
| 客户端连不上 | 防火墙 / 端口 |
| 性能差 | dataLogDir 在 HDD |
| 数据不一致 | 强制杀进程 |
ps -ef | grep zookeeper
tail -n 200 $ZOOKEEPER_HOME/logs/zookeeper.out
echo ruok | nc localhost 2181
echo stat | nc localhost 2181
cat /var/lib/zookeeper/myid
如果你愿意,可以把 具体报错日志贴出来(或 zookeeper.out 片段),我可以直接帮你定位是哪一类问题。