TiDB Tikv 节点宕机导致 Region unavailable 如何快速恢复?

文章导读
TiDB 集群中单个 TiKV 节点宕机通常不会导致 Region 不可用,因为 Raft 协议多数派副本仍可提供服务。若多数派副本丢失导致 Region unavailable,需尽快恢复节点或剔除故障 Store 触发 PD 调度补副本。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

TiDB 集群中单个 TiKV 节点宕机通常不会导致 Region 不可用,因为 Raft 协议多数派副本仍可提供服务。若多数派副本丢失导致 Region unavailable,需尽快恢复节点或剔除故障 Store 触发 PD 调度补副本。

先说结论:多数派副本存活时业务无感知,多数派丢失时需介入恢复节点或触发 rebalance。

  • 先确认:通过 tiup 或 pd-ctl 检查 Store 状态和 Region 副本分布
  • 先处理:优先重启故障节点,若无法恢复则执行 scale-in 剔除 Store
  • 再验证:观察 PD 调度进度及 Region health 状态是否恢复正常

命令速用版

以下命令用于快速查看集群状态和 Store 信息,需在部署机器或具备权限的控制节点执行。

tiup cluster display <cluster-name>
pd-ctl -u http://<pd-ip>:<pd-port> store
pd-ctl -u http://<pd-ip>:<pd-port> region check miss-peer

为什么会这样

TiDB 使用 Raft 共识协议保证数据一致性,Region 数据多副本存储,默认副本数为 3。

当 TiKV 节点宕机时,若剩余存活副本数满足多数派(如 3 副本中存活 2 个),Raft 组仍可选举 Leader 提供服务。若存活副本数不足多数派,Region 将进入 unavailable 状态,直到副本补齐或节点恢复。

分步处理

按以下顺序操作,避免误删数据或加剧集群负载。

步骤 1:确认故障节点状态

TiDB Tikv 节点宕机导致 Region unavailable 如何快速恢复?

使用 tiup 查看集群状态,确认 TiKV 节点是 Down 还是 Unreachable。

tiup cluster display <cluster-name>

步骤 2:尝试恢复节点

若为进程崩溃或机器重启,优先尝试启动 TiKV 服务。若机器硬件故障,跳过此步。

tiup cluster start <cluster-name> -R tikv

步骤 3:剔除故障 Store(若节点无法恢复)

确认节点无法短期恢复后,使用 scale-in 命令剔除 Store,PD 会自动调度新副本。

tiup cluster scale-in <cluster-name> -N <node-ip>:<port>

步骤 4:监控调度进度

TiDB Tikv 节点宕机导致 Region unavailable 如何快速恢复?

观察 PD 监控面板,等待 Region 副本数恢复至配置值。

怎么验证是否生效

通过 PD 控制工具检查是否有异常 Region,同时观察业务延迟是否回落。

pd-ctl -u http://<pd-ip>:<pd-port> region check miss-peer
pd-ctl -u http://<pd-ip>:<pd-port> region check extra-peer

若命令无输出或输出为空,表示副本健康。同时检查 Grafana 中 TiKV 状态面板,确认 No Leader 区域归零。

常见坑

  • 网络抖动误判:节点短暂网络分区可能被标记为 Down,建议观察几分钟再执行 scale-in。
  • 磁盘空间不足:若因磁盘满导致 TiKV 宕机,恢复前需清理空间,否则启动后再次崩溃。
  • 强制删除 Store:未确认数据同步状态前强制删除 Store 可能导致数据丢失,优先使用 tiup scale-in 流程。

常见问题

TiKV 节点宕机后数据会丢失吗?

默认 3 副本配置下,单个节点宕机不会丢失数据,Raft 协议保证多数派写入成功。

Region unavailable 状态会持续多久?

取决于故障节点恢复速度或 PD 调度新副本的速度,公开资料中没有看到可靠的量化数据,通常与数据量和网络带宽有关。

可以直接 kill 掉 TiKV 进程吗?

不建议直接 kill,会导致 PD 标记节点为 Down 并触发调度,增加集群负载,应通过 tiup 命令操作。

参考来源

  • PingCAP 官方文档,TiDB 架构概览,https://docs.pingcap.com/zh/tidb/stable/architecture
  • PingCAP 官方文档,TiKV 运维指南,https://docs.pingcap.com/zh/tidb/stable/tikv-control