ZooKeeper集群版本升级
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/
至此。
防偷防爬。