placement Rules的方式迁移库到新的tikv节点怎么做?

【TiDB 使用环境】测试环境
【TiDB 版本】8.5.4

测试环境有3台tikv节点,很多数据库都在一起,会互相影响。我想增加3台tikv节点将部分库和后续的数据全都写道新的3台tikv节点要怎么做?旧的tikv节点label配置如下,3台pd没有配置label

{ zone: "zone1", host: "host13-1" }
{ zone: "zone1", host: "host14-1" }
{ zone: "zone1", host: "host15-1" }

是否可以直接将新的3台节点label设置为如下?设置好placement Rules后已有数据是否会自动迁移?

{ zone: "zone2", host: "host16-1" }
{ zone: "zone2", host: "host17-1" }
{ zone: "zone2", host: "host18-1" }

对于新库和新表可以根据新的label设置Placement policy,确保不会往旧机器写。
但是对于原表的新数据应该是没有办法控制的把?

如果生产环境,最好测试一下

测试环境搞了一下,行得通

原来的kv节点的数据会跑到新的kv节点吗?我认为会,
没有配置过pr 。可以详细描述下细节, 大家学习。

PD 本身不需要 label,它只需要配置 location-labels 来识别 TiKV 的 label。

  1. TiKV 启动时带上标签
    → --labels zone=zone2,host=host16-1

  2. TiKV 向 PD 注册时上报这些标签

  3. PD 读取自己的配置 location-labels = “zone,host”
    → 知道 zone 和 host 是"位置标签"

  4. PD 调度 Region 副本时:
    → 检查副本分布是否满足"不同 zone、不同 host"
    → 结合 Placement Policy 的 CONSTRAINTS=“[+zone=zone2]”
    → 把副本调度到符合条件的节点

这个逻辑是正确的吗?

新节点zone=zone2的标签配置完全可行,PD 无 location-labels 不影响规则生效;
绑定 Placement Policy 后,存量 Region 会由 PD 自动在线迁移到新 TiKV 节点,无需人工搬迁
绑定之后新写入数据直接落在 zone2,实现新旧节点业务物理隔离。

跨版本问题源于优化器规则和存储引擎层变更。

新节点打上zone=zone2完全没问题,PD 无 location-labels 不阻断规则生效;
*库绑定 Placement Policy 后,存量 Region 会由 PD 自动在线迁移到 zone2 新节点,不需要手动搬迁数据
绑定完成后,新业务写入直接落到新 TiKV,完美实现多库物理隔离,彻底解决不同业务互相争抢资源;
仅需提前补全 PD 故障域配置,调高临时调度并发,避免迁移卡住。

1 个赞

因为新节点label配好并设置placement rules后,pd就会自动把已有数据按规则迁移过去,实现新旧节点的数据物理隔离。

Placement Rules迁移数据到新TiKV节点:先给节点打label,在rule里设置新label约束,PD会自动调度。或者用tiup cluster scale-in/out。

可以新 TiKV 用 zone2/host16-1 等 label 与旧节点区分,在 PD 配 placement rule 把目标库/schema 的 leader/replica 约束到新 label。已有数据不会立刻自动全迁,需靠 scheduler 按 rule 逐步调度 Region;新写入会逐步落到新节点。大规模迁移可配合 label 规则 + 等待 balance,或对热点库做 export/import。注意 rule 冲突和副本数,先在测试环境验证调度进度(pd-ctl config placement-rules show)。

可以直接将新节点的 Label 设置为 { zone: "zone2", host: "host16-1" } 这种格式