ZooKeeper集群版本升级

发布时间 2023-10-18 17:13:58作者: PiscesCanon

 

ZooKeeper集群版本升级

 

环境描述:

3节点的集群,当前版本为3.8.1,计划将所有节点版本升级到3.8.3。

由于过半机制,即存活的节点数量>(非>=)所有节点数量的一半,则整个集群可以正常对外提供服务。

举个例子,3个节点,最少存活2>(3/2=1.5)个节点,即允许有一个节点宕机下依旧能够对外服务。

                  4个节点,最少存活3>(4/2=2)个节点,即允许有一个节点宕机下依旧能够对外服务。(不推荐偶数个节点的zk集群)

                  5个节点,最少存活3>(5/2=2.5)个节点,即允许有两个节点宕机下依旧能够对外服务。

基于这个机制下,有两种升级方案:

1.过半机制下,可以先对所有的flower节点进行关闭升级在启动,最后再对leader节点做升级。

只在重新选举leader期间会短暂无法提供服务。

2.通过加踢节点,先加入新版本的节点到集群中去之后,将旧版本的节点踢出集群。

就是费机器,需要额外的3台机器中转。

加踢节点方式可以参考我此篇:https://www.cnblogs.com/PiscesCanon/p/17325739.html

 

这里使用第一种方式做升级。

先拿其中一台角色为flower的节点做升级。

##确认角色信息
zkServer.sh status

##关闭zk服务
systemctl stop zookeeper
systemctl status zookeeper

##移动zk软件目录
cd /usr/local/
mv zookeeper/ zookeeper.oldVersion

##拷贝备份事务日志文件和快照日志文件
cp -r /zookeeper/data  /zookeeper/data.oldVersionBak
cp -r /zookeeper/logs  /zookeeper/logs.oldVersionBak

##解压新版本到软件目录并重命名
tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz -C /usr/local/
mv /usr/local/apache-zookeeper-3.8.3-bin/ /usr/local/zookeeper

##修改用户和组权限
chown -R root:root /usr/local/zookeeper

##拷贝旧软件目录中的配置(包括自定义配置文件)到新软件目录中
cp /usr/local/zookeeper.oldVersion/conf/{java.env,zoo.cfg,zoo.cfg.dynamic.*} /usr/local/zookeeper/conf/


##启动zk服务并确认版本信息
systemctl start zookeeper
systemctl status zookeeper
zkServer.sh version


##zkCli.sh进交互模式查看是否可以正常看到数据
zkCli.sh

 

之后,在对其他flower节点重复上述复制做升级,leader一定是留到最后做。

 

观察一段时间后没有问题后,看需求可以删除或者转移走目录zookeeper.oldVersion,data.oldVersionBak,logs.oldVersionBak

https://www.cnblogs.com/PiscesCanon/p/17772874.html

rm -fr /zookeeper/data.oldVersionBak/
rm -fr /zookeeper/logs.oldVersionBak/
rm -fr /usr/local/zookeeper.oldVersion/

 

 

至此。

防偷防爬