Ubuntu 上升级 ZooKeeper 到最新版本
一 升级前准备
- 确认当前版本与运行状态:执行 echo stat | nc 127.0.0.1 2181 或使用 zkServer.sh status;如提示四字命令未放行,在 zoo.cfg 末尾添加 4lw.commands.whitelist=* 并重启后再查。检查端口监听:netstat -nltp | grep 2181。
- 完整备份:备份数据与配置,数据默认在 /var/lib/zookeeper,配置在 /etc/zookeeper/conf;必要时同时备份日志目录(如 /var/log/zookeeper)。
- 环境与兼容性:确认 JDK 版本满足新版本要求;在 Ubuntu 上若以服务方式运行,注意脚本解释器问题(优先使用 bash zkServer.sh 启动)。
- 升级策略:生产集群建议先在测试环境验证;集群建议按“逐个节点”升级,先 follower 后 leader,以降低不可用窗口。
二 升级步骤
- 下载最新稳定版:前往 Apache ZooKeeper Releases 获取包含 -bin 的发行包(不要下载 source release),例如:
wget https://dlcdn.apache.org/zookeeper/zookeeper-x.y.z/apache-zookeeper-x.y.z-bin.tar.gz
- 解压到临时目录:
tar -xzf apache-zookeeper-x.y.z-bin.tar.gz -C /tmp
- 备份现有配置与数据:
sudo cp -R /etc/zookeeper /etc/zookeeper-backup
sudo cp -R /var/lib/zookeeper /var/lib/zookeeper-backup
- 停止旧服务:
sudo systemctl stop zookeeper
- 部署新版本(两种常见做法,二选一)
- 替换二进制并保留原有目录结构:将新包中 conf/ 内容合并到 /etc/zookeeper,将原有 /var/lib/zookeeper 下的数据保留(仅升级程序,不动数据)。
- 使用软链接切换版本(便于回滚):
sudo rm -f /opt/zookeeper
sudo ln -s /opt/apache-zookeeper-x.y.z-bin /opt/zookeeper
- 保持关键配置一致:确保 zoo.cfg 中的 dataDir、dataLogDir 与旧版本一致;集群务必保证 myid 与 server.x 的对应关系正确。
- 启动与开机自启:
sudo systemctl start zookeeper
sudo systemctl enable zookeeper
- 验证:
sudo systemctl status zookeeper
echo stat | nc 127.0.0.1 2181(或 zkServer.sh status)
ss -lntp | grep 2181
/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181 ls /
三 集群滚动升级要点
- 逐台升级:按 follower → leader 的顺序依次升级;每台节点完成启动并通过 zkServer.sh status 确认为 follower 后再升级下一台;最后升级 leader。
- 配置一致性:升级期间保持 zoo.cfg 的 server.x 列表一致,避免因配置漂移导致无法加入集群。
- 连接与验证:升级间隔内客户端可能出现短暂重连;升级完成后用 zkCli.sh 或四字命令校验集群状态与健康度。
四 回滚与常见问题
- 快速回滚(软链接方案):
sudo systemctl stop zookeeper
sudo rm -f /opt/zookeeper
sudo ln -s /opt/apache-zookeeper-旧版本-bin /opt/zookeeper
sudo systemctl start zookeeper
- 常见问题
- JAVA_HOME 未设置或脚本报错:使用 bash zkServer.sh 启动,或在系统服务环境中正确导出 JAVA_HOME。
- 四字命令不可用:在 zoo.cfg 添加 4lw.commands.whitelist=* 并重启。
- 数据或 myid 不一致:核对 dataDir、dataLogDir 与 myid 是否与旧版本完全一致,必要时从备份恢复。