最近,我不得不将 Zookeeper 3.4.18 集群升级到 3.6+。要求是:无感升级,不丢失数据,并且尽量不向任何用户发出通知。在调研zookeeper 版本后,发现 3.6+ 支持了 metrics 模块,比较符合需求,所以需要从 3.4.18 升级至 3.6.4
- 3.5 + 支持动态配置
- 3.6.0+ 支持内置 metrics 模块
现有集群配置
集群IP | 当前目录 | 新版本目录 |
---|---|---|
192.240.16.18 | /usr/local/zookeeper-3.4.14/ | /usr/local/apache-zookeeper-3.6.4-bin/ |
192.240.16.21 | /usr/local/zookeeper-3.4.14/ | /usr/local/apache-zookeeper-3.6.4-bin/ |
192.240.16.28 | /usr/local/zookeeper-3.4.14/ | /usr/local/apache-zookeeper-3.6.4-bin/ |
192.240.16.147 | /usr/local/zookeeper-3.4.14/ | /usr/local/apache-zookeeper-3.6.4-bin/ |
192.240.16.202 | /usr/local/zookeeper-3.4.14/ | /usr/local/apache-zookeeper-3.6.4-bin/ |
下载安装包
在官方 archive 找到对应安装包
从 zk 3.5 起安装包分为带 “bin” 和不带 “bin” 的
- 带 “bin” 的包含所需jar包
- 不带 “bin” 的需要自行编译
bash
|
|
解压
bash
|
|
升级版本
注意以下步骤需要对每个 zk 服务器都执行一边
检查状态
检查每个 zk 实例的角色,注意,Leader 要留着最后升级
bash
|
|
准备配置文件
产生默认配置文件
bash
|
|
启用 prometheus metrics 相关配置
bash
|
|
检查配置
bash
|
|
增加旧的配置
bash
|
|
检查配置
bash
|
|
直接转移数据文件
bash
|
|
修改新版启动脚本
此步骤是为了可以使用 stat 命令
bash
|
|
停止旧版本
bash
|
|
连接到新版本
bash
|
|
启动服务
bash
|
|
验证服务
bash
|
|
检查内容
bash
|
|
恢复旧版本
bash
|
|
Reference
[2] zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b