暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 TiUP 扩容缩容 TiDB 集群

PingCAP 2023-07-13
102

TiDB 集群可以在不中断线上服务的情况下进行扩容和缩容。

本文介绍如何使用 TiUP 扩容缩容集群中的 TiDB、TiKV、PD、TiCDC 或者 TiFlash 节点。如未安装 TiUP,可参考 部署文档中的步骤

你可以通过 tiup cluster list 查看当前的集群名称列表。

例如,集群原拓扑结构如下所示:

主机 IP 服务
10.0.1.3 TiDB + TiFlash
10.0.1.4 TiDB + PD
10.0.1.5 TiKV + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV

扩容 TiDB/PD/TiKV 节点

如果要添加一个 TiDB 节点,IP 地址为 10.0.1.5,可以按照如下步骤进行操作。

1. 编写扩容拓扑配置

在 scale-out.yml 文件添加扩容拓扑配置:

vi scale-out.yml tidb_servers: - host: 10.0.1.5 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 log_dir: /tidb-deploy/tidb-4000/log

TiKV 配置文件参考:

tikv_servers: - host: 10.0.1.5 ssh_port: 22 port: 20160 status_port: 20180 deploy_dir: /tidb-deploy/tikv-20160 data_dir: /tidb-data/tikv-20160 log_dir: /tidb-deploy/tikv-20160/log

PD 配置文件参考:

pd_servers: - host: 10.0.1.5 ssh_port: 22 name: pd-1 client_port: 2379 peer_port: 2380 deploy_dir: /tidb-deploy/pd-2379 data_dir: /tidb-data/pd-2379 log_dir: /tidb-deploy/pd-2379/log

可以使用 tiup cluster edit-config <cluster-name> 查看当前集群的配置信息,因为其中的 globalserver_configs 参数配置默认会被 scale-out.yml 继承,因此也会在 scale-out.yml 中生效。

2. 执行扩容命令

执行 scale-out 命令前,先使用 checkcheck --apply 命令,检查和自动修复集群存在的潜在风险:

(1)检查集群存在的潜在风险:

tiup cluster check <cluster-name> scale-out.yml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa]

(2)自动修复集群存在的潜在风险:

tiup cluster check <cluster-name> scale-out.yml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]

(3)执行 scale-out 命令扩容 TiDB 集群:

tiup cluster scale-out <cluster-name> scale-out.yml [-p] [-i /home/root/.ssh/gcp_rsa]

以上操作示例中:

  • 扩容配置文件为 scale-out.yml
  • --user root 表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
  • [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可, [-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。

预期日志结尾输出 Scaled clusterout successfully 信息,表示扩容操作成功。

3. 检查集群状态

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群和新增节点的状态。

扩容后,集群拓扑结构如下所示:

主机 IP 服务
10.0.1.3 TiDB + TiFlash
10.0.1.4 TiDB + PD
10.0.1.5 TiDB + TiKV + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV

扩容 TiFlash 节点

如果要添加一个 TiFlash 节点,其 IP 地址为 10.0.1.4 ,可以按照如下步骤进行操作。

1. 添加节点信息到 scale-out.yml 文件

编写 scale-out.yml 文件,添加该 TiFlash 节点信息(目前只支持 ip,不支持域名):

tiflash_servers: - host: 10.0.1.4

2. 运行扩容命令

tiup cluster scale-out <cluster-name> scale-out.yml

3. 查看集群状态

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群和新增节点的状态。

扩容后,集群拓扑结构如下所示:

主机 IP 服务
10.0.1.3 TiDB + TiFlash
10.0.1.4 TiDB + PD + TiFlash
10.0.1.5 TiDB+ TiKV + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV

扩容 TiCDC 节点

如果要添加 TiCDC 节点,IP 地址为 10.0.1.3、10.0.1.4,可以按照如下步骤进行操作。

1. 添加节点信息到 scale-out.yml 文件

编写 scale-out.yml 文件:

cdc_servers: - host: 10.0.1.3 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300 - host: 10.0.1.4 gc-ttl: 86400 data_dir: /tidb-data/cdc-8300

2. 运行扩容命令

tiup cluster scale-out <cluster-name> scale-out.yml

3. 查看集群状态

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群和新增节点的状态。

扩容后,集群拓扑结构如下所示:

主机 IP 服务
10.0.1.3 TiDB + TiFlash + TiCDC
10.0.1.4 TiDB + PD + TiFlash + TiCDC
10.0.1.5 TiDB+ TiKV + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV

缩容 TiDB/PD/TiKV 节点

如果要移除 IP 地址为 10.0.1.5 的一个 TiKV 节点,可以按照如下步骤进行操作。

1. 查看节点 ID 信息

tiup cluster display <cluster-name> Starting /root/.tiup/components/cluster/v1.11.3/cluster display <cluster-name> TiDB Cluster: <cluster-name> TiDB Version: v7.1.0 ID Role Host Ports Status Data Dir Deploy Dir -- ---- ---- ----- ------ -------- ---------- 10.0.1.3:8300 cdc 10.0.1.3 8300 Up data/cdc-8300 deploy/cdc-8300 10.0.1.4:8300 cdc 10.0.1.4 8300 Up data/cdc-8300 deploy/cdc-8300 10.0.1.4:2379 pd 10.0.1.4 2379/2380 Healthy data/pd-2379 deploy/pd-2379 10.0.1.1:20160 tikv 10.0.1.1 20160/20180 Up data/tikv-20160 deploy/tikv-20160 10.0.1.2:20160 tikv 10.0.1.2 20160/20180 Up data/tikv-20160 deploy/tikv-20160 10.0.1.5:20160 tikv 10.0.1.5 20160/20180 Up data/tikv-20160 deploy/tikv-20160 10.0.1.3:4000 tidb 10.0.1.3 4000/10080 Up - deploy/tidb-4000 10.0.1.4:4000 tidb 10.0.1.4 4000/10080 Up - deploy/tidb-4000 10.0.1.5:4000 tidb 10.0.1.5 4000/10080 Up - deploy/tidb-4000 10.0.1.3:9000 tiflash 10.0.1.3 9000/8123/3930/20170/20292/8234 Up data/tiflash-9000 deploy/tiflash-9000 10.0.1.4:9000 tiflash 10.0.1.4 9000/8123/3930/20170/20292/8234 Up data/tiflash-9000 deploy/tiflash-9000 10.0.1.5:9090 prometheus 10.0.1.5 9090 Up data/prometheus-9090 deploy/prometheus-9090 10.0.1.5:3000 grafana 10.0.1.5 3000 Up - deploy/grafana-3000 10.0.1.5:9093 alertmanager 10.0.1.5 9093/9094 Up data/alertmanager-9093 deploy/alertmanager-9093

2. 执行缩容操作

tiup cluster scale-in <cluster-name> --node 10.0.1.5:20160

其中 --node 参数为需要下线节点的 ID。

预期输出 Scaled cluster <cluster-name> in successfully 信息,表示缩容操作成功。

3. 检查集群状态

下线需要一定时间,下线节点的状态变为 Tombstone 就说明下线成功。

执行如下命令检查节点是否下线成功:

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群的状态。

调整后,拓扑结构如下:

Host IP Service
10.0.1.3 TiDB + TiFlash + TiCDC
10.0.1.4 TiDB + PD + TiFlash + TiCDC
10.0.1.5 TiDB + Monitor (TiKV 已删除)
10.0.1.1 TiKV
10.0.1.2 TiKV

缩容 TiFlash 节点

如果要缩容 IP 地址为 10.0.1.4 的一个 TiFlash 节点,可以按照如下步骤进行操作。

1. 根据 TiFlash 剩余节点数调整数据表的副本数

  1. 查询是否有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。 tobe_left_nodes 表示缩容后的 TiFlash 节点数。如果查询结果为空,可以开始执行缩容。如果查询结果不为空,则需要修改相关表的 TiFlash 副本数。
SELECT * FROM information_schema.tiflash_replica WHERE REPLICA_COUNT > 'tobe_left_nodes';
  1. 对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句, new_replica_num 必须小于等于 tobe_left_nodes
ALTER TABLE <db-name>.<table-name> SET tiflash replica 'new_replica_num';
  1. 重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。

2. 执行缩容操作

接下来,请任选下列方案其一进行缩容。

方案一:通过 TiUP 缩容 TiFlash 节点

  1. 通过以下命令确定需要下线的节点名称:
tiup cluster display <cluster-name>
  1. 执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为 10.0.1.4:9000
tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000

方案二:手动缩容 TiFlash 节点

在特殊情况下(比如需要强制下线节点),或者 TiUP 操作失败的情况下,可以使用以下方法手动下线 TiFlash 节点。

  1. 使用 pd-ctl 的 store 命令在 PD 中查看该 TiFlash 节点对应的 store id。
    1. pd-ctl (tidb-ansible 目录下的 resources/bin 包含对应的二进制文件)中输入 store 命令。
    2. 若使用 TiUP 部署,可以调用以下命令代替 pd-ctl
    3. tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store
  2. 在 pd-ctl 中下线该 TiFlash 节点。
    1. 在 pd-ctl 中输入 store delete <store_id> ,其中 <store_id> 为上一步查到的该 TiFlash 节点对应的 store id。
    2. 若通过 TiUP 部署,可以调用以下命令代替 pd-ctl
    3. tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store delete <store_id>
  3. 等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。
  4. 手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。
  5. 从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:
tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force

手动在 PD 中清除同步规则的步骤如下:

  1. 查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。
curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash [ { "group_id": "tiflash", "id": "table-45-r", "override": true, "start_key": "7480000000000000FF2D5F720000000000FA", "end_key": "7480000000000000FF2E00000000000000F8", "role": "learner", "count": 1, "label_constraints": [ { "key": "engine", "op": "in", "values": [ "tiflash" ] } ] } ]
  1. 删除所有与 TiFlash 相关的数据同步规则。以 idtable-45-r 的规则为例,通过以下命令可以删除该规则。
curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r

3. 查看集群状态

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群的状态。

调整后,拓扑结构如下:

Host IP Service
10.0.1.3 TiDB + TiFlash + TiCDC
10.0.1.4 TiDB + PD + TiCDC (TiFlash 已删除)
10.0.1.5 TiDB + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV

缩容 TiCDC 节点

如果要缩容 IP 地址为 10.0.1.4 的一个 TiCDC 节点,可以按照如下步骤进行操作。

1. 下线该 TiCDC 节点

tiup cluster scale-in <cluster-name> --node 10.0.1.4:8300

2. 查看集群状态

tiup cluster display <cluster-name>

打开浏览器访问监控平台 http://10.0.1.5:3000 ,监控整个集群的状态。

调整后,拓扑结构如下:

Host IP Service
10.0.1.3 TiDB + TiFlash + TiCDC
10.0.1.4 TiDB + PD + (TiCDC 已删除)
10.0.1.5 TiDB + Monitor
10.0.1.1 TiKV
10.0.1.2 TiKV
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论