温馨提示×

Zookeeper故障排查Ubuntu怎么办

小樊
44
2025-12-06 21:31:58
栏目: 智能运维

Ubuntu 上 Zookeeper 故障排查步骤

一 快速定位流程

  • 查看进程与端口:确认 QuorumPeerMain 是否在运行,以及 clientPort=2181 是否被占用。命令示例:jps | grep QuorumPeerMain;ss -lntp | grep 2181;若占用,kill 对应 PID 或调整 zoo.cfg 的 clientPort。
  • 前台启动看实时日志:bin/zkServer.sh start-foreground,能直接看到启动期异常。
  • 检查日志文件:优先查看 Zookeeper 安装目录/logs/*.outzookeeper.out,定位配置、权限、类路径等问题。
  • 校验配置文件:确认 zoo.cfg 中 dataDir、dataLogDir 指向已存在且可写目录;集群需正确配置 server.X 与 myid。
  • 环境与健康检查:确认 JAVA_HOMEPATH 正确;Ubuntu 上用 ufw 检查防火墙状态(ufw status),集群需放通 2181/2888/3888 等端口;必要时检查 /etc/hosts 主机名解析。

二 常见故障对照表

症状 高频原因 快速修复
启动显示 STARTED,但 zkServer.sh status 报 “Error contacting service. It is probably not running.” 配置目录未创建(dataDir/dataLogDir);myid 缺失或值不匹配;主机名/端口写错;防火墙阻断;进程未真正起来 创建 dataDir/dataLogDir;在 dataDir 写入正确的 myid(与 server.X 一致);核对 zoo.cfg 的 server 配置与主机名;ufw 放行端口或临时关闭;用 start-foreground 看实时报错
“Starting zookeeper … FAILED TO START” 或 “nohup: failed to run command ‘java’: No such file or directory” JAVA_HOME 未设置 或 PATH 无 java;使用了不含二进制文件的安装包(3.5.5+ 需带 bin 的包);Java 版本不兼容 正确设置 JAVA_HOME 与 PATH;下载并使用带 bin 的发行包(apache-zookeeper-x.y.z-bin.tar.gz);必要时改用 Java 8 稳定版本
“Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain” 包不完整(缺少 lib/ 或编译类);错误地把源码包当二进制包运行 使用带 bin 的二进制包;不要混用 3.4.x 与 3.5.x 的目录结构;如仍异常,清理后重装
java.net.BindException: Address already in use 2181/2888/3888 端口被占用 结束占用进程或修改 zoo.cfg 的 clientPort 与会话端口
集群无法选主或节点异常 myid 重复或缺失;server.X 主机名不可达;防火墙未放行 确保每个节点 myid 唯一且匹配 server.X;修正主机名/IP;ufw/firewalld 放行相关端口,核对 /etc/hosts 解析

三 关键配置与目录检查

  • 配置文件要点(示例):
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/var/lib/zookeeper
    dataLogDir=/var/log/zookeeper
    clientPort=2181
    server.1=host1:2888:3888
    server.2=host2:2888:3888
    server.3=host3:2888:3888
    提示:dataDir 与 dataLogDir 必须存在且可写;伪集群需为不同实例配置不同 clientPort(如 2181/2182/2183)与会话端口(2888/2889/28903888/3889/3890)。
  • myid 文件:在 dataDir 下创建名为 myid 的文件,内容为该节点的 X(与 server.X 对应),各节点值必须唯一。
  • 主机名与解析:确保 /etc/hosts 或 DNS 能正确解析 server.X 的主机名;避免写错主机名导致节点互不可达。

四 服务管理与验证

  • 常用命令:
    • 启动:bin/zkServer.sh start(前台排错用 start-foreground)
    • 状态:bin/zkServer.sh status(集群应显示 leaderfollower
    • 停止:bin/zkServer.sh stop
  • 进程校验:jps | grep QuorumPeerMain 应能看到 QuorumPeerMain;若 status 报错但进程存在,多半是配置/网络/权限问题,回到日志与端口核查。

五 环境与权限要点

  • Java 环境:设置全局 JAVA_HOME(如 /usr/lib/jvm/java-8-openjdk-amd64),并确保 PATH 包含 $JAVA_HOME/bin;ZooKeeper 启动脚本依赖 JAVA_HOME。
  • 权限与目录:确保运行用户对 dataDir/dataLogDir 有读写权限;必要时使用 chown/chmod 修正属主与权限。
  • 防火墙与安全组:Ubuntu 使用 ufw(ufw status/disable/allow);云环境需放行 2181/2888/3888 等端口,避免集群通信被拦截。

0