升级 ZooKeeper 不应该停服务。这篇用官方发行包的 3.8.4 起一个 3 节点集群,持续写入的同时逐个节点升级到 3.9.6,看混合版本能不能工作、每一步对客户端的影响多大。
{'z69-1': '3.8.4 follower', 'z69-2': '3.8.4 leader', 'z69-3': '3.8.4 follower'} 步骤 耗时 s 该步写入最长间隔 ms 升级后版本与角色(全体)
升级 z69-1(follower) 1.2 450 {'z69-1': '3.9.6 follower', 'z69-2': '3.8.4 leader', 'z69-3': '3.8.4 follower'}
升级 z69-3(follower) 1.2 25 {'z69-1': '3.9.6 follower', 'z69-2': '3.8.4 leader', 'z69-3': '3.9.6 follower'}
升级 z69-2(leader) 1.3 761 {'z69-1': '3.9.6 follower', 'z69-2': '3.9.6 follower', 'z69-3': '3.9.6 leader'}顺序是先 follower、最后 leader,这样 leader 只需要变换一次。每次都等升级的节点 zxid 追上 leader 再继续下一个。
版本与角色: {'z69-1': '3.9.6 follower', 'z69-2': '3.9.6 follower', 'z69-3': '3.9.6 leader'}
写线程确认的写入 309 个,失败(异常)的调用 2 次;确认后丢失 0 个
新版本的 znode 数据与升级前一致:/up 下子节点数 309 | zxid 一致: True本文只测了 3.8.4 → 3.9.6。其它版本之间(尤其跨大版本如 3.4 → 3.5 以上)有各自的升级注意事项(例如配置格式、动态配置),没有测。升级前仍应阅读目标版本的发行说明,并先备份(第 59 篇)。