Ubuntu 上 ZooKeeper 安全升级操作指南
一 升级前准备
- 明确当前版本与升级路径:查看现有版本与配置,确认目标版本与当前版本的兼容性,先在测试环境验证。
示例:/usr/lib/zookeeper/bin/zkServer.sh version 或 echo stat | nc localhost 2181;核对 zoo.cfg 中的 server.x 列表。
- 完整备份:备份数据与配置,确保可回滚。
示例:sudo cp -a /var/lib/zookeeper /var/lib/zookeeper-$(date +%F);sudo cp -a /etc/zookeeper /etc/zookeeper-$(date +%F)。
- 规划滚动升级:多节点集群建议按 Follower → Leader 的顺序逐台升级,期间保持多数节点存活,避免脑裂。
- 检查依赖:确认 JDK 版本满足新版本要求(常见为 OpenJDK 8/11),并预留回滚窗口与监控告警。
二 标准升级步骤
- 下载并解压新版本(Apache 官方二进制包):
示例:wget https://downloads.apache.org/zookeeper/zookeeper-/apache-zookeeper--bin.tar.gz
tar -xzf apache-zookeeper--bin.tar.gz -C /tmp
- 逐台升级(以 systemd 管理的单机/集群为例):
- 停止服务:sudo systemctl stop zookeeper
- 备份旧版目录:sudo mv /usr/lib/zookeeper /usr/lib/zookeeper-$(date +%F)
- 部署新版本:sudo mv /tmp/apache-zookeeper--bin /usr/lib/zookeeper
- 保留配置与数据:保持 /etc/zookeeper/conf/zoo.cfg 不变;保留 /var/lib/zookeeper(不覆盖),仅更新 /usr/lib/zookeeper/bin 等可执行文件。
- 启动并验证:sudo systemctl start zookeeper;sudo systemctl status zookeeper;/usr/lib/zookeeper/bin/zkServer.sh status;必要时用 zkCli.sh 连接测试。
- 观察日志:tail -n 200 /var/log/zookeeper/zookeeper.log,确认无异常。
- 集群滚动:重复以上步骤升级其余 Follower,最后再升级 Leader(升级前确认多数节点已在新版本且健康)。
三 配置与数据注意事项
- 配置兼容性:不同版本 zoo.cfg 可能新增或废弃参数,升级后按需调整,但请勿随意更改 dataDir、dataLogDir、server.x 等关键项。
- myid 一致性:各节点的 myid 必须与 server.x 的 x 一一对应,且 dataDir 路径保持一致。
- 数据与日志目录:若使用独立 dataLogDir,确保其目录与权限正确;升级仅替换程序目录,避免误删快照与事务日志。
- 端口与连通性:确保 2181/2888/3888 端口在防火墙与安全组放行,集群节点间可互通。
四 回滚与验证
- 快速回滚(程序目录软链或替换场景):
示例:sudo systemctl stop zookeeper;sudo rm -rf /usr/lib/zookeeper;sudo ln -s /usr/lib/zookeeper- /usr/lib/zookeeper;sudo systemctl start zookeeper;/usr/lib/zookeeper/bin/zkServer.sh status。
- 验证要点:
- 服务状态与健康检查:systemctl 状态、zkServer.sh status、zkCli.sh ls / 等基础操作。
- 集群角色与连通:确认 Leader/Follower 角色正常、Quorum 形成、客户端可连接。
- 数据一致性:抽样比对 znode 与关键业务数据,确保升级未引入数据异常。
五 常见排错清单
- 启动失败:检查 JDK 版本、配置文件语法、目录权限、myid 唯一性与 server.x 配置;查看 zookeeper.log 的错误栈。
- 无法形成集群:核对 2888/3888 端口连通性、防火墙策略、各节点 myid 与 server.x 映射是否一致。
- 版本不兼容:确认新版本对 JDK 与依赖组件的兼容性,必要时回退或调整版本。
- 客户端报错:在升级窗口内避免大规模 schema/ACL 变更,逐步放量验证。