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. windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装用命令解决

    用如下命令安装: dism /online /enable-feature /featurename:IIS-ASPNET45 /all

  2. win10 安装 AutoCAD

    有些人在 win10 系统下 安装 AutoCAD 会有些小问题,不要担心,根据下面这些图片就可以解决你的问题 答案很简单,就是安装.NET Framework3.5,这里提供一种安装方法供大家参考: ...

  3. 面试Java时碰到过的那些问题

    项目终于忙完了,难得不加班,但回到家中却不知道干啥,打开自己的云笔记,看到了以前面试时碰到的一些面试题,下面将会把以前面试时被问到的问题都分享出来,下面的题看看小伙伴们可以答的怎样吧 HashMap实 ...

  4. Java中递归的简单应用

    递归是一种非常常见的编程技巧,它可以将一个复杂的问题分解成更小的问题,然后递归地解决这些小问题,最终得到整个问题的解.递归的本质就是函数调用自身. 我们来看一个简单的例子:计算阶乘.阶乘是指将一个数和 ...

  5. JavaImprove--Lesson02--Object类,Objects工具类,封装类

    一.Object类 Java中的Object类是所有类的超类,它是Java类层次结构的根类.这意味着所有的类都直接或间接地继承自Object类 equals(Object obj): 用于比较两个对象 ...

  6. SSH默认端口从22修改为其他端口

    1.在终端中使用root权限登录到您的Linux服务器. 2.打开终端,并使用适合您的文本编辑器(如vi.nano等)打开SSH配置文件.例如,通过运行以下命令之一: vi /etc/ssh/sshd ...

  7. 数据交换不失控:华为云EDS,让你的数据你做主

    摘要:华为云EDS在"可信.可控.可证"的框架基础上进行数据空间的关键设计,打造数据可控交换的全栈能力. 数字社会,每时每刻都有海量数据产生,数据也逐渐从生产过程的附属产物,逐渐成 ...

  8. CSV:简单格式下隐藏的那些坑

    摘要:本文将盘点处理CSV数据时我遇到的一些坑. 本文分享自华为云社区<CSV-简单格式下隐藏的那些坑>,作者:aKi. 前言 CSV(Comma-Separated Values),是一 ...

  9. Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发?

    摘要:为解决用户自定义处理设备数据以及自定义协议设备快速接入IOT平台的诉求,华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云. 本文分享自华为云社区<[华为 ...

  10. 解读知识蒸馏模型TinyBert

    摘要:本篇文章的重点在于改进信息瓶颈的优化机制,并且围绕着高纬空间中互信息难以估计,以及信息瓶颈优化机制中的权衡难题这两个点进行讲解. 本文分享自华为云社区<[云驻共创]美文赏析:大佬对变分蒸馏 ...