TiDB 扩容新增 TiKV 后 PD 长期不调度 Region,新旧节点负载严重不均衡

原有 6 台 TiKV 承载业务全部读写,使用 tiup scale-out 新增 3 台同规格 TiKV 节点,节点正常启动加入集群,磁盘、CPU 资源空闲;等待 24 小时 PD 未迁移任何 Region 至新节点,原有 TiKV 负载居高不下,新增节点无流量。集群无手动限制调度配置,PD 进程运行正常无报错。

  1. 先用 pd-ctl config show 检查集群调度配置,确认均衡开关、调度限速、副本放置策略没有隐性限制调度的参数;
  2. 查看 PD 的 operator 列表、调度日志,确认是不是有副本约束、节点标签、磁盘水位等规则导致无法生成 Region 迁移任务;
  3. 核对所有 TiKV 节点健康状态与磁盘占用。

如果配置无异常,可以适当调大调度相关限速参数加快均衡速度,持续观察迁移任务和节点负载,均衡完成后改回原有参数;若始终没有迁移 Operator,结合你的 TiDB 版本确认是否存在调度逻辑 bug,必要时升级集群。

2 个赞

可以先看看集群副本数量,如果副本数和当前节点总数一致,Region 就没法正常迁移调度。
再确认节点标签配置,标签划分会限制不同分组间的数据迁移

1 个赞

MySQL迁移注意自增主键,高并发写入集中在最后一个Region。

自增主键热点本质是Region分裂机制,AUTO_RANDOM通过分布式ID写入分散。

pd-ctl store看节点标签;pd-ctl config show replication看副本数,副本数多于可用节点数无法迁移;有分组标签会锁死跨组迁移。

echo “=== 调度器列表 ===”
pd-ctl -u http://:2379 scheduler show

echo “=== 调度配置 ===”
pd-ctl -u http://:2379 config show all | grep -E “schedule-limit|balance-rate|max-snapshot|max-pending|enable|ratio”

echo “=== Store 状态 ===”
pd-ctl -u http://:2379 store

echo “=== 当前 Operator ===”
pd-ctl -u http://:2379 operator show

echo “=== location-labels ===”
pd-ctl -u http://:2379 config show all | grep location-labels

echo “=== Placement Rules ===”
pd-ctl -u http://:2379 config placement-rules show
可能性从高到低:

┌────────┬──────────────────────────────────────────────────────┬──────────────────────────────────┐
│ 优先级 │ 原因 │ 判断依据 │
├────────┼──────────────────────────────────────────────────────┼──────────────────────────────────┤
:star::star::star: │ balance-region/balance-leader 调度器未启用 │ scheduler show 无输出或缺少这俩 │
├────────┼──────────────────────────────────────────────────────┼──────────────────────────────────┤
:star::star::star: │ 新节点 location-labels 与现有 Placement Rules 不匹配 │ 新节点 labels 为空或与老节点不同 │
├────────┼──────────────────────────────────────────────────────┼──────────────────────────────────┤
:star::star: │ region-schedule-limit 或 store-balance-rate=0 │ config show 确认 │
├────────┼──────────────────────────────────────────────────────┼──────────────────────────────────┤
:star::star: │ 调度队列被其他 Operator 占满 │ operator show 有大量未完成 │
├────────┼──────────────────────────────────────────────────────┼──────────────────────────────────┤
:star: │ 集群负载过高触发 PD 调度节流 │ config show 确认 enable 状态 │
└────────┴──────────────────────────────────────────────────────┴──────────────────────────────────┘

通过pd-ctl核查调度配置与节点状态,查看调度日志,按需调整调度限速参数。

先调高 PD 调度速度、降低 balance 阈值,查看 PD 日志确认是否存在副本数、容量安全约束阻挡调度。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。