https://docs.pingcap.com/zh/tidb/stable/scale-tidb-using-tiup

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,可以按照如下步骤进行操作。

 
注意

添加 PD 节点和添加 TiDB 节点的步骤类似。添加 TiKV 节点前,建议预先根据集群的负载情况调整 PD 调度参数。

1. 编写扩容拓扑配置

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

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

在 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> 查看当前集群的配置信息,因为其中的 global 和 server_configs 参数配置默认会被 scale-out.yml 继承,因此也会在 scale-out.yml 中生效。

2. 执行扩容命令

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

 
注意

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

(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 cluster `<cluster-name>` out 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,可以按照如下步骤进行操作。

 
注意

在原有 TiDB 集群上新增 TiFlash 组件需要注意:

  1. 首先确认当前 TiDB 的版本支持 TiFlash,否则需要先升级 TiDB 集群至 v5.0 以上版本。
  2. 执行 tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> config set enable-placement-rules true 命令,以开启 PD 的 Placement Rules 功能。或通过 pd-ctl 执行对应的命令。

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
 
注意

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

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
 
注意

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

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 节点,可以按照如下步骤进行操作。

 
注意
  • 移除 TiDB、PD 节点和移除 TiKV 节点的步骤类似。
  • 由于 TiKV、TiFlash 和 TiDB Binlog 组件是异步下线的,且下线过程耗时较长,所以 TiUP 对 TiKV、TiFlash 和 TiDB Binlog 组件做了特殊处理,详情参考下线特殊处理
 
注意

TiKV 中的 PD Client 会缓存 PD 节点的列表。当前版本的 TiKV 有定期自动更新 PD 节点的机制,可以降低 TiKV 缓存的 PD 节点列表过旧这一问题出现的概率。但你应尽量避免在扩容新 PD 后直接一次性缩容所有扩容前就已经存在的 PD 节点。如果需要,请确保在下线所有之前存在的 PD 节点前将 PD 的 leader 切换至新扩容的 PD 节点。

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.1 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';
  2. 对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句,new_replica_num 必须小于等于 tobe_left_nodes

    ALTER TABLE <db-name>.<table-name> SET tiflash replica 'new_replica_num';
  3. 重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。

2. 执行缩容操作

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

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

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

    tiup cluster display <cluster-name>
  2. 执行 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。

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

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

      tiup ctl:v<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

      tiup ctl:v<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 节点信息:

    tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force
 
注意

如果在集群中所有的 TiFlash 节点停止运行之前,没有取消所有同步到 TiFlash 的表,则需要手动在 PD 中清除同步规则,否则无法成功完成 TiFlash 节点的下线。

手动在 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" ] } ] } ]
  2. 删除所有与 TiFlash 相关的数据同步规则。以 id 为 table-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

[转帖]使用 TiUP 扩容缩容 TiDB 集群的更多相关文章

  1. Tiup离线安装TIDB集群4.0.16版本

    环境:centos7.6 中控机:8.213.8.25(内网) 可用服务器8.213.8.25-8.213.8.29 一.准备 TiUP 离线组件包 方法1:外网下载离线安装包拷贝进内网服务器 在Ti ...

  2. TiDB集群安装主要操作

    TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...

  3. Centos7配置TiDB集群

    一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...

  4. 在线安装TIDB集群

     在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...

  5. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  6. 部署TiDB集群

    架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...

  7. tidb集群

    tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...

  8. LVM划分磁盘及扩容缩容

    lvm:logical volume monitor 逻辑卷管理器 作用: 采用lvm划分磁盘:磁盘空间不够时,方便扩展磁盘.物理卷加到卷组时被划分等大的pe,即pv是由众多pe构成.pe是卷组的最小 ...

  9. tidb 集群扩容

    1. tidb 新增节点 a. 编辑 inventory.ini [tidb_servers] 10.0.230.14 10.0.230.15 10.10.230.20 b. 初始化新增节点 ansi ...

  10. tidb集群某个节点报错之:node_exporter-9100.service failed

    今天启动集群tidb时出现一个错误,是某个tikv节点报错:node_exporter-9100.service  failed 一个节点的问题会导致整个集群启动失败.去此节点下的日志文件中查找,发现 ...

随机推荐

  1. 实现两个 JSON 对象的对比

    问题描述 在 Java 中,对于两个对象的对比,如果没有重写 equals 方法,那么将会默认使用 Object 默认的 equals 方法来比较两个对象.这种比较方式是通过比较两个对象的内存地址是否 ...

  2. 【开源】EDUCN网站

    EDUCN https://scrc.rth1.link/ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&q ...

  3. 使用推测解码 (Speculative Decoding) 使 Whisper 实现 2 倍的推理加速

    Open AI 推出的 Whisper 是一个通用语音转录模型,在各种基准和音频条件下都取得了非常棒的结果.最新的 large-v3 模型登顶了 OpenASR 排行榜,被评为最佳的开源英语语音转录模 ...

  4. Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger

    什么是 Swagger? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.它提供了一种规范的方式来定义.构建和文档化 RESTful Web ...

  5. .NET周报【10月最后一期 2022-11-01】

    精选要闻 .NET 7 NativeAOT比.NET单文件发布文件小80% https://twitter.com/JamesNK/status/1584919726861737984?s=20&am ...

  6. 华为云MVP付健权:从机械工程师到AI开发者的华丽转身

    摘要:谁说AI开发难,看一个机械工程师是如何转型成为AI工程师的. 付健权,华为云MVP,企业上云导师.软通动力,售前解决方案经理,为制造业讲解华为云产品,为客户提供上云和云上解决方案.为企业提供大数 ...

  7. Kubernetes(K8S) Service 介绍

    定义一组 Pod 的访问规则 存在的意义 防止 Pod 失联(服务发现),Pod 重启后,IP会变 定义一组 Pod 访问策略,负载均衡 Pod 和 Service 关系 根据 label 和 sel ...

  8. sed 流编辑器

    一.简介 非交互式的处理 一行一行的读入处理 占用系统空间少 大文件一般用sed节省内存 语法:语法 sed [选项] '行的定位 动作' 文件... 参数 说明 -e 允许进行多项编辑 -n 静默输 ...

  9. SpringBoot 项目实战 | 瑞吉外卖 优化篇 Day01

    该系列将记录一份完整的实战项目的完成过程,该篇属于优化篇第一天,主要负责完成缓存优化问题 案例来自B站黑马程序员Java项目实战<瑞吉外卖>,请结合课程资料阅读以下内容 该篇我们将完成以下 ...

  10. ACM:快读读入技巧

    快速读入:当数据输入较大时,比scanf快 inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9') ...