首先确认Zookeeper服务是否正在运行,可使用以下命令:
sudo systemctl status zookeepersudo systemctl start zookeeper启动;若需开机自启,执行sudo systemctl enable zookeeper。Zookeeper日志是故障排查的核心依据,日志文件通常位于/var/log/zookeeper/zookeeper.out(部分版本可能在/var/log/zookeeper/目录下)。使用以下命令实时查看最新日志:
tail -f /var/log/zookeeper/zookeeper.out
重点关注ERROR或WARN级别的日志,如“Connection refused”“NoRouteToHostException”等,可直接定位网络或服务问题。
Zookeeper的主配置文件通常为/etc/zookeeper/conf/zoo.cfg(部分版本可能在/etc/zookeeper/目录下),需检查以下关键参数:
dataDir(数据目录是否存在且进程有读写权限)、clientPort(客户端端口,默认2181是否被占用)、tickTime(心跳时间,默认2000ms,需与集群节点一致);server.x(集群节点列表,如server.1=zk1:2888:3888,其中x为节点ID,需与对应节点dataDir下的myid文件内容一致)。Zookeeper依赖Java运行环境,需确保已安装兼容版本(推荐OpenJDK 8或11)。使用以下命令检查Java版本:
java -version
若未安装或版本不符,可通过包管理器安装(如CentOS:sudo yum install java-1.8.0-openjdk-devel;Debian:sudo apt install openjdk-8-jdk)。
Zookeeper集群节点间需通过端口通信(默认2181为客户端端口,2888为Leader选举端口,3888为数据同步端口),需检查:
sudo netstat -tuln | grep 2181(确认端口是否处于监听状态);sudo systemctl stop firewalld),或永久放行端口(firewall-cmd --permanent --add-port=2181/tcp && firewall-cmd --reload)。Zookeeper提供内置四字命令(需通过nc或telnet工具执行),可快速获取集群状态:
echo stat | nc localhost 2181(显示服务器角色、连接客户端数、延迟等信息);echo ruok | nc localhost 2181(返回imok表示服务正常);echo mntr | nc localhost 2181(显示Leader/Follower状态、事务处理数量、内存使用等指标)。Zookeeper的数据目录(dataDir配置项指定)存储了集群状态和事务日志,需检查:
chown -R zookeeper:zookeeper /var/lib/zookeeper);DataInconsistency报错),可备份并删除旧数据目录(如/var/lib/zookeeper/version-2),重启服务后Zookeeper会自动恢复。top、df -h、iostat命令);syncLimit参数(默认5,可适当增大);SessionExpired),需调整sessionTimeout参数(默认30秒,根据网络延迟适当增大),或在客户端代码中定期调用keepAlive方法。