bigywater.tech
ZooKeeper · 51

集群扩容与缩容

要把集群从 3 个节点扩到 5 个,不用重启现有节点。这篇用动态配置做一次完整的 3 → 5 → 3,看新节点怎么同步数据、容错能力怎么变化。

620 ms
两个空节点同步 20000 个 znode 并成为 follower 的时间
SNAP
空节点加入时 leader 发整份快照
容错 1 → 2 → 1
3 → 5 → 3 节点时能容忍的故障数

3 → 5

实测 · 本机执行输出
  reconfig -add → version=100004e23 | 5 个成员
  两个新节点 620 ms 后追上;各节点 znode 数: {'z51-1': '20005', 'z51-2': '20005', 'z51-3': '20005', 'z51-4': '20005', 'z51-5': '20005'} | 新节点的同步方式(leader 日志最近两条): ['snapshot', 'snapshot']

5 节点的容错

实测 · 本机执行输出
  杀掉 z51-2(leader)和 z51-1 后:能写(0.0 s 内恢复),存活 3 个

5 → 3

实测 · 本机执行输出
  reconfig -remove 4,5 → 3 个成员: ['server.1', 'server.2', 'server.3']
  缩容后再杀掉 3 节点里的 2 个:不能写(又回到容忍 1 个故障)

分步演示

扩容与缩容
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。动态配置伪集群,JVM 堆 256 MiB;20000 个 znode(100 字节);reconfig 用官方 CLI
    • 没有验证:生产环境逐个增加节点的推荐做法、同时增加过多节点时对 leader 的压力、从 5 缩到 3 时选 leader 的情形、客户端连接串的同步更新
    京ICP备2026067502号-1京公网安备11010502063487号