zookeeper与ubuntu系统兼容性问题
导读:总体说明 在 Ubuntu 上运行 Apache ZooKeeper 总体兼容性良好,常见问题多由 shell 解释器、Java 环境、权限与路径 以及 版本匹配 引起。下面按现象—原因—修复给出要点与可复用的配置示例。 常见兼容性问题与修...
总体说明 在 Ubuntu 上运行 Apache ZooKeeper 总体兼容性良好,常见问题多由 shell 解释器、Java 环境、权限与路径 以及 版本匹配 引起。下面按现象—原因—修复给出要点与可复用的配置示例。
常见兼容性问题与修复
- 脚本语法错误:启动报 “Syntax error: ‘(’ unexpected (expecting ‘fi’)”。多数因 /bin/sh 指向 dash,而 ZooKeeper 的脚本使用 bash 语法。修复:将 /bin/sh 改为 bash(交互式执行:sudo dpkg-reconfigure dash 选 No;或 ln -sf bash /bin/sh),并确保脚本首行是 #!/bin/bash。
- Java 未找到:报 “Error: JAVA_HOME is not set and java could not be found in PATH.”。原因包括未安装 JDK、未正确导出 JAVA_HOME,或 sudo 切换环境后丢失变量。修复:安装 OpenJDK 8/11,在系统级或脚本层正确设置 JAVA_HOME(如在 zkEnv.sh 显式 export JAVA_HOME),或用 su - zookeeper 保留环境再启动。
- 权限与目录:日志出现 “nohup: failed to run command ‘java’: No such file or directory” 或无法创建 myid/pid。修复:使用专用系统用户(如 zookeeper),数据目录(如 /data/zookeeper)与安装目录(如 /opt/zookeeper)归属该用户,必要时用 sudo 启动服务但日常以服务账户运行。
- 端口与连通:客户端连不通 2181。修复:开放防火墙/安全组端口 2181,确认配置文件中 clientPort=2181,并用 echo stat | nc localhost 2181 或 zkCli.sh 验证。
- C 客户端开发缺失头文件/库:编译报 “zookeeper.h: No such file or directory”。修复:安装 libzookeeper-mt-dev 等开发包,或自行编译 C 客户端库。
版本与组合建议
- Java 版本:ZooKeeper 3.x 建议使用 OpenJDK 8 或 11(开发与生产均验证稳定)。避免使用过旧/过新的非 LTS 版本,减少依赖与 GC 不确定性。
- ZooKeeper 版本:优先选择稳定版 3.8.x / 3.9.x 的 “-bin” 包(已包含可执行二进制,避免源码构建带来的额外依赖问题)。
- Ubuntu 版本:长期支持版本如 20.04/22.04/23.04 均可,内核与基础工具链完善,社区实践充足。
推荐安装与配置步骤
- 准备环境
- 安装 Java:sudo apt-get update & & sudo apt-get install -y openjdk-11-jdk
- 验证:java -version;配置 JAVA_HOME(/etc/profile 或 ~/.bashrc,示例:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64)
- 安装与目录
- 创建用户与目录:sudo useradd -m zookeeper;sudo mkdir -p /data/zookeeper /opt/zookeeper;sudo chown -R zookeeper:zookeeper /data/zookeeper /opt/zookeeper
- 下载解压:wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz -O /opt/apache-zookeeper-3.9.1-bin.tar.gz
- 解压与授权:tar -xvf /opt/apache-zookeeper-3.9.1-bin.tar.gz -C /opt & & sudo mv /opt/apache-zookeeper-3.9.1-bin /opt/zookeeper & & sudo chown -R zookeeper:zookeeper /opt/zookeeper
- 配置与启动
- 配置:su - zookeeper;cd /opt/zookeeper/conf;cp zoo_sample.cfg zoo.cfg;编辑 zoo.cfg
- dataDir=/data/zookeeper
- clientPort=2181
- 前台调试:/opt/zookeeper/bin/zkServer.sh start-foreground
- 后台启动与验证:/opt/zookeeper/bin/zkServer.sh start;/opt/zookeeper/bin/zkServer.sh status;echo stat | nc localhost 2181(应见 Mode: standalone)
- 配置:su - zookeeper;cd /opt/zookeeper/conf;cp zoo_sample.cfg zoo.cfg;编辑 zoo.cfg
- systemd 服务(生产推荐)
- /etc/systemd/system/zookeeper.service
- [Unit] Description=Zookeeper Daemon;After=network.target
- [Service] Type=forking;User=zookeeper;Group=zookeeper;WorkingDirectory=/opt/zookeeper ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg TimeoutSec=30;Restart=on-failure
- [Install] WantedBy=default.target
- 启用:sudo systemctl daemon-reload & & sudo systemctl enable --now zookeeper & & sudo systemctl status zookeeper
- /etc/systemd/system/zookeeper.service
集群部署要点
- 每个节点唯一 myid:在 dataDir 下创建文件 /data/zookeeper/myid,内容分别为 1/2/3…
- 配置 server 列表:在 zoo.cfg 添加
- server.1=IP1:2888:3888
- server.2=IP2:2888:3888
- server.3=IP3:2888:3888
- 目录与权限:各节点数据目录归属 zookeeper 用户;开放 2181/2888/3888 端口;逐台重启或 systemctl restart zookeeper 并校验状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: zookeeper与ubuntu系统兼容性问题
本文地址: https://pptw.com/jishu/764787.html
