使用 TiUP 扩容缩容 TiDB 集群

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

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

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

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

    注意:

    • 默认情况下,可以不填写端口以及目录信息。但在单机多实例场景下,则需要分配不同的端口以及目录,如果有端口或目录冲突,会在部署或扩容时提醒。

    • 从 TiUP v1.0.0 开始,扩容配置会继承原集群配置的 global 部分。

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

    1. tidb_servers:
    2. - host: 10.0.1.5
    3. ssh_port: 22
    4. port: 4000
    5. status_port: 10080
    6. deploy_dir: /data/deploy/install/deploy/tidb-4000
    7. log_dir: /data/deploy/install/log/tidb-4000

    TiKV 配置文件参考:

    1. tikv_servers:
    2. - host: 10.0.1.5
    3. ssh_port: 22
    4. port: 20160
    5. status_port: 20180
    6. deploy_dir: /data/deploy/install/deploy/tikv-20160
    7. data_dir: /data/deploy/install/data/tikv-20160
    8. log_dir: /data/deploy/install/log/tikv-20160

    PD 配置文件参考:

    1. pd_servers:
    2. - host: 10.0.1.5
    3. ssh_port: 22
    4. name: pd-1
    5. client_port: 2379
    6. peer_port: 2380
    7. deploy_dir: /data/deploy/install/deploy/pd-2379
    8. data_dir: /data/deploy/install/data/pd-2379
    9. log_dir: /data/deploy/install/log/pd-2379

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

    2. 执行扩容命令

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

    注意:

    针对 scale-out 命令的检查功能在 tiup cluster v1.9.3 及后续版本中支持,请操作前先升级 tiup cluster 版本。

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

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

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

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

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

      以上操作示例中:

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

      预期日志结尾输出 Scaled cluster `<cluster-name>` out successfully 信息,表示扩容操作成功。

      3. 检查集群状态

      1. tiup cluster display <cluster-name>

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

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

      主机 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.yaml 文件

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

      1. tiflash_servers:
      2. - host: 10.0.1.4

      2. 运行扩容命令

      1. tiup cluster scale-out <cluster-name> scale-out.yaml

      注意:

      此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。

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

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

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

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

      编写 scale-out.yaml 文件:

      1. - host: 10.0.1.3
      2. gc-ttl: 86400
      3. data_dir: /data/deploy/install/data/cdc-8300
      4. - host: 10.0.1.4
      5. gc-ttl: 86400
      6. data_dir: /data/deploy/install/data/cdc-8300

      2. 运行扩容命令

      1. tiup cluster scale-out <cluster-name> scale-out.yaml

      注意:

      此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。

      3. 查看集群状态

      1. tiup cluster display <cluster-name>

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

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

      主机 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 信息

      1. tiup cluster display <cluster-name>
      1. Starting /root/.tiup/components/cluster/v1.9.3/cluster display <cluster-name>
      2. TiDB Cluster: <cluster-name>
      3. TiDB Version: v6.0.0
      4. ID Role Host Ports Status Data Dir Deploy Dir
      5. -- ---- ---- ----- ------ -------- ----------
      6. 10.0.1.3:8300 cdc 10.0.1.3 8300 Up data/cdc-8300 deploy/cdc-8300
      7. 10.0.1.4:8300 cdc 10.0.1.4 8300 Up data/cdc-8300 deploy/cdc-8300
      8. 10.0.1.4:2379 pd 10.0.1.4 2379/2380 Healthy data/pd-2379 deploy/pd-2379
      9. 10.0.1.1:20160 tikv 10.0.1.1 20160/20180 Up data/tikv-20160 deploy/tikv-20160
      10. 10.0.1.2:20160 tikv 10.0.1.2 20160/20180 Up data/tikv-20160 deploy/tikv-20160
      11. 10.0.1.5:20160 tikv 10.0.1.5 20160/20180 Up data/tikv-20160 deploy/tikv-20160
      12. 10.0.1.3:4000 tidb 10.0.1.3 4000/10080 Up - deploy/tidb-4000
      13. 10.0.1.4:4000 tidb 10.0.1.4 4000/10080 Up - deploy/tidb-4000
      14. 10.0.1.5:4000 tidb 10.0.1.5 4000/10080 Up - deploy/tidb-4000
      15. 10.0.1.3:9000 tiflash 10.0.1.3 9000/8123/3930/20170/20292/8234 Up data/tiflash-9000 deploy/tiflash-9000
      16. 10.0.1.5:9090 prometheus 10.0.1.5 9090 Up data/prometheus-9090 deploy/prometheus-9090
      17. 10.0.1.5:9093 alertmanager 10.0.1.5 9093/9094 Up data/alertmanager-9093 deploy/alertmanager-9093
      1. tiup cluster scale-in <cluster-name> --node 10.0.1.5:20160

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

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

      3. 检查集群状态

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

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

      1. tiup cluster display <cluster-name>

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

      调整后,拓扑结构如下:

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

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

      在下线节点之前,确保 TiFlash 集群剩余节点数大于等于所有数据表的最大副本数,否则需要修改相关表的 TiFlash 副本数。

      1. 在 TiDB 客户端中针对所有副本数大于集群剩余 TiFlash 节点数的表执行:

        1. alter table <db-name>.<table-name> set tiflash replica 0;
      2. 等待相关表的 TiFlash 副本被删除(按照一节操作,查不到相关表的同步信息时即为副本被删除)。

      2. 执行缩容操作

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

      1. 通过以下命令确定需要下线的节点名称:

        1. tiup cluster display <cluster-name>
      2. 执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为 10.0.1.4:9000

      方案二:手动缩容 TiFlash 节点

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

      1. 使用 pd-ctl 的 store 命令在 PD 中查看该 TiFlash 节点对应的 store id。

        • 在 (tidb-ansible 目录下的 resources/bin 包含对应的二进制文件)中输入 store 命令。

        • 若使用 TiUP 部署,可以调用以下命令代替 pd-ctl

          1. tiup ctl:<cluster-version> pd -u http://<pd_ip>:<pd_port> store

          注意:

          如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的 IP:端口即可。

      2. 在 pd-ctl 中下线该 TiFlash 节点。

        • 在 pd-ctl 中输入 store delete <store_id>,其中 <store_id> 为上一步查到的该 TiFlash 节点对应的 store id。

        • 若通过 TiUP 部署,可以调用以下命令代替 pd-ctl

          1. tiup ctl:<cluster-version> pd -u http://<pd_ip>:<pd_port> store delete <store_id>

          注意:

          如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的 IP:端口即可。

      3. 等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。

      4. 手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。

      5. 从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:

        1. tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force

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

      1. 查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。

        1. curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash
        1. [
        2. {
        3. "group_id": "tiflash",
        4. "id": "table-45-r",
        5. "override": true,
        6. "start_key": "7480000000000000FF2D5F720000000000FA",
        7. "end_key": "7480000000000000FF2E00000000000000F8",
        8. "role": "learner",
        9. "count": 1,
        10. "label_constraints": [
        11. {
        12. "key": "engine",
        13. "op": "in",
        14. "values": [
        15. "tiflash"
        16. ]
        17. }
        18. ]
        19. }
        20. ]
      2. 删除所有与 TiFlash 相关的数据同步规则。以 idtable-45-r 的规则为例,通过以下命令可以删除该规则。

        1. curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r

      3. 查看集群状态

      1. tiup cluster display <cluster-name>

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

      调整后,拓扑结构如下:

      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. tiup cluster scale-in <cluster-name> --node 10.0.1.4:8300

      2. 查看集群状态

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