请教一个关于placement rule的问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】8.5.1
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

背景:
我当前已有一个集群,tikv和tiflash混合部署,原集群,所有节点均未添加labels,我现在需要往集群里再分别添加三个tikv节点和三个tiflash节点。这6个节点,我需要添加labels,然后通过placement rule in sql配置放置测了,让这6个节点,只存放testabc的库。其余所有的库还是存放在现有的三个节点上,我该怎么做呢?

扩容步骤:
1、修改原有集群的拓扑文件,将PD添加上replication.location-labels配置,重新reload加载集群配置。
2、新增scale.yaml,添加新的tikv节点和tiflash节点,并给新的节点启用server.labels。

问题:
1、为达到我们目的,以上扩容步骤是否正确?
2、原有集群的拓扑文件,是只修改PD配置就可以吗?原有集群的tikv和tiflash是否需要添加标签?
3、我通过放置策略,能否将原有节点上的某个库,迁移到新节点上?

标签就是倾斜region自动分配的吧

扩容的时候添加标签,创建placement rule,指定特定的数据就行了吧

第一步:给 PD 增加 location-labels

修改 topology.yaml

pd_servers:

  • host: 10.0.0.1
    config:
    replication.location-labels: [“zone”]

例如定义一个 label:

zone

然后 reload

tiup cluster reload tidb-test -R pd

检查

show config where name like ‘%location%’;

应看到

replication.location-labels = [“zone”]
第二步:给原有节点打 label

这是关键步骤。

否则:

新节点有 label,旧节点没有 label,PD 无法区分放置策略

修改原 topology

给原 3 个 TiKV

tikv_servers:

  • host: 10.0.0.2
    server_labels:
    zone: old

  • host: 10.0.0.3
    server_labels:
    zone: old

  • host: 10.0.0.4
    server_labels:
    zone: old

给原 TiFlash

tiflash_servers:

  • host: 10.0.0.5
    server_labels:
    zone: old

  • host: 10.0.0.6
    server_labels:
    zone: old

然后

tiup cluster reload tidb-test
第三步:扩容新节点

scale.yaml

tikv_servers:

  • host: 10.0.0.7
    server_labels:
    zone: testabc

  • host: 10.0.0.8
    server_labels:
    zone: testabc

  • host: 10.0.0.9
    server_labels:
    zone: testabc

tiflash_servers:

  • host: 10.0.0.10
    server_labels:
    zone: testabc

  • host: 10.0.0.11
    server_labels:
    zone: testabc

  • host: 10.0.0.12
    server_labels:
    zone: testabc

扩容

tiup cluster scale-out tidb-test scale.yaml

2 个赞

重要注意点
1)副本数必须满足

比如

FOLLOWERS=2

那么必须

至少3个tikv

否则 policy 不会生效。

2)不要把 default policy 改掉

只绑定 testabc

不要

ALTER DATABASE *

否则整个集群都会调度。

3)建议限速

因为 region 迁移会大量 IO

可以限制

set config pd schedule.max-merge-region-size=20

set config pd schedule.leader-schedule-limit=4
set config pd schedule.region-schedule-limit=4

避免影响线上。

2 个赞

步骤很详细 :wave: