bigywater.tech
ZooKeeper · 31

5 节点集群与容错数量

5 节点集群最多挂几个?挂了之后已经写入的数据会不会丢?恢复要多久?这篇在 5 节点集群上连续制造 2 个、3 个故障,看服务和数据的变化。

容忍 2 个
5 节点杀掉 follower 和 leader 各一个后仍可写
数据不丢
故障前后确认的写入全部读得到
0.7 s
3 个故障后启动回 1 个节点(3/5)到恢复写入

2 个故障

实测 · 本机执行输出
  杀掉 follower z31-1 后写入: 成功
  再杀 leader z31-3(共 2 个故障,剩 3 个)后:重新选举并恢复写入用时 0.0 s,写入 成功;存活节点: {'z31-2': 'follower', 'z31-4': 'follower', 'z31-5': 'leader'}

数据保留

实测 · 本机执行输出
  根下现在的子节点数(含 base 与 200 个 after、zookeeper): 202 | /base 数据: b'v'

3 个故障与恢复

实测 · 本机执行输出
  剩余节点: {'z31-4': '不服务', 'z31-5': '不服务'} | 写入: 失败(没有多数派)
  启动回一个节点(3/5)后恢复写入用时 0.7 s;数据:/base = b'v' | 子节点数 202

失去多数派时,存活的节点变成 LOOKING 并拒绝服务,而不是继续提供可能过期的数据——这是 ZooKeeper 偏重一致性的取舍(CP)。

分步演示

5 节点容错
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。5 节点伪集群;kill -9 杀节点;写入是 kazoo 同步 create
    • 没有验证:同时杀掉多个节点时的数据一致性极端情形(第 43 篇看崩溃恢复)、磁盘损坏的节点恢复(第 58 篇)、节点逐个依次故障与恢复的组合
    京ICP备2026067502号-1京公网安备11010502063487号