“Linux 上 ZooKeeper 用不上”这个问题比较宽泛,通常可能是起不来、连不上、或客户端用不了。下面按最常见原因给你一个排查清单,你可以对照看看是哪一种。
# 正确启动方式
cd /opt/zookeeper
bin/zkServer.sh start
查看状态:
bin/zkServer.sh status
如果提示:
Error contacting service. It is probably not running.
说明没起来。
关键文件:
conf/zoo.cfg
最小可用配置:
tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181
常见错误:
dataDir 目录不存在或没权限server.x 配错netstat -tunlp | grep 2181
如果 2181 被占用,ZooKeeper 起不来。
ZooKeeper 必须有 Java
java -version
没有就装:
yum install java-1.8.0-openjdk
# 或
apt install openjdk-8-jdk
# 查看
iptables -L
# 或
firewall-cmd --list-all
开放端口:
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --reload
检查:
netstat -an | grep 2181
如果是:
127.0.0.1:2181
说明只能本机连。
解决(zoo.cfg):
clientPortAddress=0.0.0.0
✅ 正确:
bin/zkCli.sh -server 127.0.0.1:2181
❌ 错误:
dataDir 下必须有:
echo 1 > /tmp/zookeeper/myid
每台机器不同(1、2、3)
ZooKeeper 必须 > 半数节点存活
例如:
否则不可用。
| 现象 | 原因 |
|---|---|
java.net.BindException |
端口被占 |
myid file is missing |
没建 myid |
Cannot open channel to x |
集群配置错 |
Connection refused |
服务没起 / 防火墙 |
Session expired |
网络断或超时 |
ps -ef | grep zookeeper
netstat -tunlp | grep 2181
cat logs/zookeeper-*.out
如果你愿意,可以把下面信息发我,我可以直接帮你定位:
zoo.cfg 内容我可以一步一步帮你搞通。