TiDB 内核解剖室SECTION 05

杀掉正在值班的 Leader,然后盯着时钟 —— 10 个 tick 之后,自己看 Raft 怎么重新选出主

1024 TiDB AIGC 黑客松 · 参赛作品 v0.2
集群状态 · Leader 稳定 TiKV-1 LEADER TiKV-2 FOLLOWER TiKV-3 FOLLOWER 多数派 quorum = 2 / 3 心跳 · 每 2 tick
模拟时钟 · 时间轴

每一格 = 1 个 tick;1 tick = raft-base-tick-interval = 1s。琥珀色格 = 选举超时已到达(连续 10 tick 无心跳)。

本节口径与参数说明(技术解读准确性依据)
  • Raft 的选举不是"谁快谁当":无主状态下,Follower 累计到 raft-election-timeout-ticks(10) 个 tick 没有收到心跳,就发起选举。换算关系是 raft-base-tick-interval(1s) × 10 ≈ 10 秒。
  • 心跳本身由 raft-heartbeat-ticks(2) 决定:Leader 每 2 个 tick 向 Follower 发一次心跳,Follower 收到即重置计数 —— 所以"杀掉 Leader"意味着计时器失去重置者。
  • 选举要过多数派:replication.max-replicas 默认 3,quorum = ⌊3/2⌋+1 = 2。本模拟器为看清单个 Raft Group 的选举,让 3 个副本各占一个 store(官方口径:在一般情况下,PD 只会保证多个副本不落在一个节点上)。
  • Leader 还持有一份"租约"上限:raft-store-max-leader-lease = 9s,用来约束旧 Leader 自认权威的最长时间。
  • 官方未给出"Leader 故障到新 Leader 就绪"的端到端时长,故本台只呈现 tick 机制与选举流程,画面中不出现任何端到端时长。
  • 本模拟器的两处简化声明:① 动画按 2× 速播放(每 tick 500ms),真实 1 tick = 1s;② 多个 Follower 同时计时时,本台按副本编号顺序让先到达超时者先发起选举(如 TiKV-2 先于 TiKV-3),以保证每次演示可复现;且各副本间的请求与响应在真实集群中远快于 1 个 tick —— 这里按 tick 粒度慢放,只为把过程看清楚。机制与 tick 数与官方口径一致。

口径与参数来源(已核验 · 2026-09-16 · TiDB 官方文档 stable 线 / release-8.5)
· 来源:TiKV 配置文件描述、PD 配置文件描述、TiDB 数据库的调度(docs.pingcap.com/zh/tidb/stable)。

以上带虚线的条目均可点击,查看官方原文、适用版本与文档链接 —— 琥珀色虚线表示"官方未列明,因此本作品一个字都不写"。

系列导航:01 Multi-Raft 日志复制 · 02 Region 分裂与 PD 调度 · 03 分布式事务 2PC · 06 HTAP 与 TiFlash · 07 在线 DDL

模拟时钟
t = 0tick
TERM 7 运行中 · Leader 稳定

1 tick = 1s(官方口径)· 动画按 2× 速播放
存活副本 3 / 3(quorum 需要 2)

操作台 · 亲手把它做坏
TiKV-1LEADER
TiKV-2FOLLOWER
TiKV-3FOLLOWER
事件流 · 时钟说了算
时钟已启动。点「演示一次故障转移」,或直接杀掉任意一个节点 —— 每一次角色变化都会被计时器记录在这里。