真停一台 TiKV 的 23 分钟 —— 15 秒检出、2 分钟判死、失效副本自动重建、恢复后回流,全程 2 秒级实况采样,写入零中断
192.168.3.114:20160)—— 不是暂停进程、不是模拟,是 systemctl stop 拉闸。
看四张店卡的点阵:store 4 的副本会被 PD 一个不剩地搬走(6 → 0),落到存活的三个店上;拉回来之后,再被自动回填、逐步均衡。
进度轨上的 5 个刻度就是这出戏的 5 个转折点。PD 对这件事的官方说法见
心跳丢失 → Disconnected → 超过 max-store-down-time 判 Down → 在存活 store 上补足副本 ——
本页把这句话拍成了 23 分钟的实况。回放是对 2 秒级采样序列的忠实重放,按 ×20 压缩,约 70 秒放完。
dev/probe/fr1-writes.jsonl,可下载复核。
| # | 时刻 | 偏移 | store 4 | 画面 |
|---|---|---|---|---|
| 1 | 10:39:52 | +31 s | Up | 1:6 · 3153:6 · 4:6 · 5:3 —— 基线(7 region × 3 副本 = 21) |
| 2 | 10:40:12 | +51 s | Up | ⚙ systemctl stop tikv-20160@114 —— 真实断电注入 |
| 3 | 10:40:29 | +68 s | Disconnected | Up → Disconnected(约 15 秒检出)· leader 归零 |
| 4 | 10:41:06 | +105 s | Disconnected | 4: 7 → 6 —— PD 不等判死,先让副本让位 |
| 5 | 10:42:08 | +167 s | Down | Disconnected → Down(约 2 分钟 · max-store-down-time 已调 2m) |
| 6 | 10:45:42 | +381 s | Down | 4:5 —— 失效副本逐个迁移进行中(3153 承接 +1) |
| 7 | 10:50:21 | +660 s | Down | 4:4 —— 迁移收尾段(两个店合计 14 副本) |
| 8 | 10:50:42 | +681 s | Down | 4:2 —— 最后一批副本搬离 |
| 9 | 10:50:56 | +695 s | Down | 4 清零 · 存活店承接 21/21 —— 副本归位完成(历时 8 分 48 秒) |
| 10 | 10:51:02 | +701 s | Down | ⚙ systemctl start tikv-20160@114 —— 恢复注入 |
| 11 | 10:51:23 | +722 s | Up | Down → Up(约 20 秒重新上线 · leader 归零) |
| 12 | 10:51:37 | +736 s | Up | 4:1 —— 空店回填开始(恢复后 14 秒收到第 1 个副本) |
| 13 | 10:52:22 | +781 s | Up | 4:6 · 3153:3 —— 批量回流:承接店让出、store 4 收回 |
| 14 | 11:02:35 | +1394 s | Up | 1:5 · 3153:5 · 4:6 · 5:7 —— 采样窗终点(均衡微调中) |
dev/probe/fr1-timeline-keyframes.json,回放台就是对它的逐步重放;原始 2 秒级序列(586 个采样点)存于
dev/probe/fr1-timeline.jsonl 与 fr1-timeline2.jsonl。
PD 的补救不是等坏店回来,而是在存活店上补足缺失副本:store 4 的副本被逐个搬走(6 → 5 → 4 → 2 → 1 → 0),最后存活三店合计恰好 21 个副本位置。
{mv peer: store [4] to [5]} —— 故障后第一条搬离(与计数 4: 7 → 6 吻合)alive = 21 == 21 —— 归位完成{mv peer: store [3153] to [4]} —— 恢复后反向回流开始诚实声明:主力迁移时段(10:41:04 → 10:51:49)的 /operators 接口连续 310 次采样为空;同一时段副本计数序列 6 → 5 → 4 → 2 → 1 → 0 直接见证了搬离。两条独立观测,各说各的,本页不下推断。
搬离的安全前提来自官方调度约束:每 region 3 副本、同 region 副本不在同一店;调度动作本身见 副本操作。
探针在一条独立连接上循环 INSERT,故障注入、判死、副本重建、回流全程不间断:曲线始终贴着 10 ms 常态线,唯一一次抬头是再平衡启动那一瞬(49.6 ms)。
条形按 0 – 50 ms 标尺等比映射(50 ms 为满格)。
拉回来的 store 4 是一张空店(0 副本)。PD 先小步回填验证健康,再批量回流:10:52:22 时 store 4 已拿回 6 个副本、承接店 3153 让出到 3 个;再平衡期间出现全程延迟尖峰 49.6 ms(10:52:16),随后复归 10 ms 稳态。
11:02:35 采样窗终点时分布仍在微调(1:5 · 3153:5 · 4:6 · 5:7)—— 均衡是渐进的,不是开关。
实验由控制器脚本按断言推进,每一步都回读核对:
max-store-down-time 30m → 2m · 回读 2m0sstore4 -> Disconnected (15s): Truestore4 -> Down (max-store-down-time=2m) (100s): TrueWAIT-TIMEOUT: add-peer appears after 300s —— 等搬离 operator 文本 300 秒未现(见 E2 声明)replica repaired (233s) · alive = 21 == 21store4 -> Up (20s): True · B8 回滚 30m · 回读 30m0s实验后独立全量核查(11:04:53):