一、升级前准备
备份数据与配置
升级前必须备份ZooKeeper的数据目录(默认/var/lib/zookeeper,存储快照和事务日志)和配置文件(默认/etc/zookeeper/conf/zoo.cfg),避免升级失败导致数据丢失。
示例命令:
cp -r /var/lib/zookeeper /var/lib/zookeeper.bak
cp /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.bak
下载新版本安装包
访问Apache ZooKeeper官方网站(https://zookeeper.apache.org/releases.html),下载目标版本的安装包(如apache-zookeeper-3.8.0-bin.tar.gz)。
示例命令(以3.8.0为例):
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
检查版本兼容性
确认目标版本与当前ZooKeeper版本、JDK版本的兼容性:
leaderElection模式),需确认目标版本是否保留该功能。二、停止ZooKeeper服务
使用systemctl或service命令停止正在运行的ZooKeeper服务:
systemctl stop zookeeper # 推荐使用systemctl(适用于大多数现代Linux发行版)
# 或
service zookeeper stop
三、替换二进制文件与更新配置
解压并移动新版本
将下载的安装包解压到临时目录(如/tmp),然后将新版本的二进制文件移动到目标安装目录(如/opt/zookeeper):
tar -xzf apache-zookeeper-3.8.0-bin.tar.gz -C /tmp
mv /tmp/apache-zookeeper-3.8.0-bin /opt/zookeeper
保留原有配置文件
将旧版本的zoo.cfg复制到新版本的conf目录,避免重新配置的麻烦:
cp /etc/zookeeper/conf/zoo.cfg /opt/zookeeper/conf/
更新配置文件(按需)
检查新版本的zoo.cfg示例文件(conf/zoo_sample.cfg),若有新增配置项(如3.6.0引入的zookeeper.connection_throttle_fill_count),需添加到现有配置文件中。
示例(修改dataDir路径,若未变更则无需修改):
sed -i 's|/var/lib/zookeeper|/opt/zookeeper/data|g' /opt/zookeeper/conf/zoo.cfg
四、启动新版本服务
使用systemctl启动新版本的ZooKeeper服务,并检查状态:
systemctl start zookeeper
systemctl status zookeeper # 确认服务状态为“active (running)”
五、验证升级结果
检查服务状态
使用zkServer.sh脚本验证节点状态:
/opt/zookeeper/bin/zkServer.sh status
输出应显示“Mode: leader”(领导者节点)或“Mode: follower”(跟随者节点)。
连接客户端验证
使用zkCli.sh工具连接ZooKeeper,执行基本命令验证数据一致性和功能:
/opt/zookeeper/bin/zkCli.sh -server localhost:2181
# 连接后执行以下命令
ls / # 查看根节点下的ZNode列表
get /test # 获取指定ZNode的数据(若存在)
stat / # 查看节点状态(包含版本信息)
检查日志文件
查看ZooKeeper的日志文件(默认/opt/zookeeper/logs/zookeeper.out),确认无报错信息:
tail -f /opt/zookeeper/logs/zookeeper.out
六、清理旧版本(可选)
若升级成功且运行稳定,可删除旧版本的二进制文件、数据目录和备份文件,释放磁盘空间:
rm -rf /var/lib/zookeeper.bak # 删除旧数据备份
rm -rf /etc/zookeeper/conf/zoo.cfg.bak # 删除旧配置备份
rm -rf /opt/zookeeper_old # 删除旧版本安装目录(若有)
七、滚动升级(集群环境必做)
若ZooKeeper运行在集群模式,需逐个节点升级,避免同时停机导致集群不可用:
node1);node1;node1并等待其加入集群(通过日志确认“Synced with leader”);node2、node3等节点。注意事项
zkCli.sh检查ZNode结构);