备份数据与配置:升级前必须备份ZooKeeper的数据目录(默认/var/lib/zookeeper)和配置文件(默认/etc/zookeeper/conf/zoo.cfg),防止升级失败导致数据丢失。
执行命令:
systemctl stop zookeeper # 停止ZooKeeper服务
cp -r /var/lib/zookeeper /var/lib/zookeeper_backup # 备份数据目录
cp /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo_cfg.bak # 备份配置文件
检查兼容性:确认新版本与现有系统的JDK版本兼容(如ZooKeeper 3.7.x及以上需要JDK 11+),避免因JDK不兼容导致启动失败。
下载新版本:从Apache ZooKeeper官方网站(https://zookeeper.apache.org/releases.html)下载目标版本的安装包(如apache-zookeeper-3.7.0-bin.tar.gz)。
示例命令:
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
解压并移动到目标目录:将下载的安装包解压到/opt/目录,并删除旧版本的安装目录(如/opt/zookeeper-3.6.3-bin),避免版本冲突。
示例命令:
tar -xzf apache-zookeeper-3.7.0-bin.tar.gz -C /opt/ # 解压到/opt
rm -rf /opt/zookeeper-3.6.3-bin # 删除旧版本(根据实际目录调整)
mv /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper # 重命名为统一目录名
创建符号链接:为方便管理,创建指向新版本的符号链接(如/var/lib/zookeeper指向新版本的数据目录,/etc/zookeeper/conf指向新版本的配置目录)。
示例命令:
ln -sf /opt/zookeeper/conf /etc/zookeeper/conf # 配置文件链接
ln -sf /opt/zookeeper/data /var/lib/zookeeper # 数据目录链接
检查配置差异:对比新旧版本的zoo.cfg文件,重点关注新增的配置项(如新版本可能引入的autopurge.snapRetainCount、autopurge.purgeInterval等自动清理参数),根据新版本文档调整配置。
示例命令:
vi /etc/zookeeper/conf/zoo.cfg # 编辑配置文件
保留关键配置:确保dataDir(数据目录)、dataLogDir(日志目录)、clientPort(客户端端口)、集群节点信息(server.x=host:port1:port2)等关键配置与旧版本一致,避免服务中断。
启动服务:使用systemctl启动新版本的ZooKeeper服务。
示例命令:
systemctl start zookeeper # 启动服务
systemctl status zookeeper # 检查服务状态(确认状态为“active (running)”)
验证服务状态:通过zkCli.sh客户端连接ZooKeeper,执行简单命令(如ls /)验证数据完整性和服务可用性。
示例命令:
/opt/zookeeper/bin/zkCli.sh -server localhost:2181 # 连接客户端
ls / # 查看根节点下的子节点(验证数据是否存在)
检查日志:查看ZooKeeper日志(默认/var/log/zookeeper/zookeeper.out),确认无报错信息(如INFO级别的启动日志表示正常)。
示例命令:
tail -f /var/log/zookeeper/zookeeper.out # 实时查看日志
rm apache-zookeeper-3.7.0-bin.tar.gz # 删除下载的安装包
rm -rf /opt/apache-zookeeper-3.7.0-bin # 删除临时解压目录(若已移动到/opt/zookeeper)
rm -rf /opt/zookeeper # 删除新版本目录
ln -sf /opt/zookeeper-3.6.3-bin /opt/zookeeper # 恢复旧版本软连接
systemctl start zookeeper # 重启旧版本服务
UNDER_REPLICATED等异常状态),避免升级过程中数据丢失。zoo.cfg配置必须保持一致(尤其是集群节点信息),否则会导致集群无法正常工作。