bigywater.tech
ZooKeeper · 45

Follower 掉线后的恢复

follower 挂了一阵子再回来,要多久才能追上?用什么方式?这篇让一个 follower 离线,期间连续写入不同数量的数据,再看它重启后的追赶。

DIFF
100 到 30000 个事务的落后都用 DIFF 补发
569–809 ms
重启后追上 leader 的用时范围
synced_followers 2 → 1
离线期间 leader 的指标

follower 离线

实测 · 本机执行输出
  离线前 leader 的 synced_followers = 2
  离线后 synced_followers = 1 | 写入: 成功

重启追赶

实测 · 本机执行输出
       错过的写入      追上用时 ms 同步方式(leader 日志)               
         100          569 ['DIFF']                      
        3000          610 ['DIFF']                      
       30000          809 ['DIFF']                      

这里的数据很小(每个 znode 50 字节),所以 3 万个事务也只需要不到一秒。大数据量下的追赶时间没有测。

追上之后

实测 · 本机执行输出
  根下子节点数:follower 33102 / leader 33102;Zxid:follower 0x100008154 / leader 0x100008154

分步演示

follower 恢复
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。3 节点伪集群;离线用 kill -9;每次重启后等 zxid 与 leader 相同;写入是 kazoo 异步 create
    • 没有验证:落后超过事务日志保留范围时的 SNAP(第 42 篇用清空数据的方式触发了 SNAP)、大 value 的追赶耗时、多个 follower 同时落后时对 leader 的压力
    京ICP备2026067502号-1京公网安备11010502063487号