使用systemctl命令确认Zookeeper服务是否正在运行,若未运行则尝试启动并查看启动结果:
sudo systemctl status zookeeper # 查看服务状态
sudo systemctl start zookeeper # 启动服务(若未运行)
若启动失败,需结合日志进一步分析原因。
Zookeeper的日志默认存储在/var/log/zookeeper/目录下,核心日志文件为zookeeper.out(或zookeeper.log)。使用以下命令实时查看日志内容,定位错误信息:
tail -f /var/log/zookeeper/zookeeper.out # 实时查看日志
cat /var/log/zookeeper/zookeeper.out # 查看完整日志
日志中的ERROR、FATAL级别信息是故障排查的关键线索。
Zookeeper的主配置文件为/etc/zookeeper/conf/zoo.cfg,需检查以下核心配置项的正确性:
dataDir:数据存储目录是否存在,且Zookeeper进程有读写权限(如mkdir -p /var/lib/zookeeper && chown -R zookeeper:zookeeper /var/lib/zookeeper);clientPort:客户端连接端口(默认2181)是否被占用(可通过netstat -tuln | grep 2181检查);server.X:集群节点配置是否正确(格式为server.id=host:port1:port2,其中id与dataDir下的myid文件内容一致)。Zookeeper依赖Java 8及以上版本,需确认Java已正确安装并配置JAVA_HOME:
java -version # 检查Java版本(需输出1.8及以上)
echo $JAVA_HOME # 检查JAVA_HOME环境变量(需指向Java安装目录,如/usr/lib/jvm/java-1.8.0-openjdk-amd64)
若未安装Java,使用以下命令安装OpenJDK:
sudo apt update && sudo apt install openjdk-11-jdk -y # Debian 11+示例
Zookeeper集群节点间需通过网络互相通信,需检查:
ping命令测试节点IP是否可达(如ping <other-node-ip>);telnet或nc命令测试客户端端口(2181)及集群同步端口(2888、3888)是否开放(如telnet <node-ip> 2181);ufw防火墙,允许Zookeeper端口:sudo ufw allow 2181/tcp # 允许客户端端口
sudo ufw allow 2888/tcp # 允许集群同步端口(Follower到Leader)
sudo ufw allow 3888/tcp # 允许选举端口(Leader选举)
Zookeeper提供的四字命令可快速监控集群状态,需通过nc或telnet执行:
ruok:检查节点是否存活(返回imok表示正常);stat:显示集群详细状态(包括Leader/Follower信息、连接数等);mntr:输出监控指标(如延迟、节点数、watch数量等)。echo stat | nc localhost 2181 # 本地节点状态
echo mntr | nc localhost 2181 # 监控指标
Zookeeper对内存、磁盘空间、CPU有一定要求,需使用以下命令检查资源是否充足:
free -h(确保剩余内存足够,避免OOM);df -h(dataDir所在分区剩余空间需大于1GB);top或htop(确保CPU占用率未长期超过80%)。/var/log/syslog)确认宕机原因(如OOM、硬件故障),重启服务后查看Zookeeper日志是否有异常;mntr命令查看leader_transfers指标(频繁切换可能因网络延迟、节点性能不足);clientPort是否开放、防火墙是否阻止,或客户端配置是否正确(如hosts文件是否包含Zookeeper节点IP)。