温馨提示×

如何升级Ubuntu Zookeeper到最新版本

小樊
41
2025-12-18 19:03:30
栏目: 智能运维

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 启动)。
  • 升级策略:生产集群建议先在测试环境验证;集群建议按“逐个节点”升级,先 followerleader,以降低不可用窗口。

二 升级步骤

  • 下载最新稳定版:前往 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 中的 dataDirdataLogDir 与旧版本一致;集群务必保证 myidserver.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.cfgserver.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 不一致:核对 dataDirdataLogDirmyid 是否与旧版本完全一致,必要时从备份恢复。

0