[转帖]使用 TiUP 扩容缩容 TiDB 集群
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 文件添加扩容拓扑配置:
TiKV 配置文件参考:
PD 配置文件参考:
可以使用 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)检查集群存在的潜在风险:
(2)自动修复集群存在的潜在风险:
(3)执行 scale-out 命令扩容 TiDB 集群:
以上操作示例中:
- 扩容配置文件为
scale-out.yml。 --user root表示通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。- [-i] 及 [-p] 为可选项,如果已经配置免密登录目标机,则不需填写。否则选择其一即可,[-i] 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码。
预期日志结尾输出 Scaled cluster `<cluster-name>` out successfully 信息,表示扩容操作成功。
3. 检查集群状态
打开浏览器访问监控平台 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 组件需要注意:
- 首先确认当前 TiDB 的版本支持 TiFlash,否则需要先升级 TiDB 集群至 v5.0 以上版本。
- 执行
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,不支持域名):
2. 运行扩容命令
此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。
3. 查看集群状态
打开浏览器访问监控平台 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 文件:
2. 运行扩容命令
此处假设当前执行命令的用户和新增的机器打通了互信,如果不满足已打通互信的条件,需要通过 -p 来输入新机器的密码,或通过 -i 指定私钥文件。
3. 查看集群状态
打开浏览器访问监控平台 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 信息
2. 执行缩容操作
其中 --node 参数为需要下线节点的 ID。
预期输出 Scaled cluster <cluster-name> in successfully 信息,表示缩容操作成功。
3. 检查集群状态
下线需要一定时间,下线节点的状态变为 Tombstone 就说明下线成功。
执行如下命令检查节点是否下线成功:
打开浏览器访问监控平台 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 剩余节点数调整数据表的副本数
查询是否有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。
tobe_left_nodes表示缩容后的 TiFlash 节点数。如果查询结果为空,可以开始执行缩容。如果查询结果不为空,则需要修改相关表的 TiFlash 副本数。SELECT * FROM information_schema.tiflash_replica WHERE REPLICA_COUNT > 'tobe_left_nodes';对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句,
new_replica_num必须小于等于tobe_left_nodes:ALTER TABLE <db-name>.<table-name> SET tiflash replica 'new_replica_num';重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。
2. 执行缩容操作
接下来,请任选下列方案其一进行缩容。
方案一:通过 TiUP 缩容 TiFlash 节点
通过以下命令确定需要下线的节点名称:
tiup cluster display <cluster-name>执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为
10.0.1.4:9000tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000
方案二:手动缩容 TiFlash 节点
在特殊情况下(比如需要强制下线节点),或者 TiUP 操作失败的情况下,可以使用以下方法手动下线 TiFlash 节点。
使用 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:端口即可。
在 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:端口即可。
等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。
手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。
从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:
tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force
如果在集群中所有的 TiFlash 节点停止运行之前,没有取消所有同步到 TiFlash 的表,则需要手动在 PD 中清除同步规则,否则无法成功完成 TiFlash 节点的下线。
手动在 PD 中清除同步规则的步骤如下:
查询当前 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" ] } ] } ]删除所有与 TiFlash 相关的数据同步规则。以
id为table-45-r的规则为例,通过以下命令可以删除该规则。curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r
3. 查看集群状态
打开浏览器访问监控平台 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 节点
2. 查看集群状态
打开浏览器访问监控平台 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 集群的更多相关文章
- Tiup离线安装TIDB集群4.0.16版本
环境:centos7.6 中控机:8.213.8.25(内网) 可用服务器8.213.8.25-8.213.8.29 一.准备 TiUP 离线组件包 方法1:外网下载离线安装包拷贝进内网服务器 在Ti ...
- TiDB集群安装主要操作
TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...
- Centos7配置TiDB集群
一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...
- 在线安装TIDB集群
在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...
- 使用 Docker Compose 快速构建 TiDB 集群
本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...
- 部署TiDB集群
架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146 ...
- tidb集群
tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...
- LVM划分磁盘及扩容缩容
lvm:logical volume monitor 逻辑卷管理器 作用: 采用lvm划分磁盘:磁盘空间不够时,方便扩展磁盘.物理卷加到卷组时被划分等大的pe,即pv是由众多pe构成.pe是卷组的最小 ...
- tidb 集群扩容
1. tidb 新增节点 a. 编辑 inventory.ini [tidb_servers] 10.0.230.14 10.0.230.15 10.10.230.20 b. 初始化新增节点 ansi ...
- tidb集群某个节点报错之:node_exporter-9100.service failed
今天启动集群tidb时出现一个错误,是某个tikv节点报错:node_exporter-9100.service failed 一个节点的问题会导致整个集群启动失败.去此节点下的日志文件中查找,发现 ...
随机推荐
- C#基于ScottPlot进行可视化
C#基于ScottPlot进行可视化 前言 上一篇文章跟大家分享了用NumSharp实现简单的线性回归,但是没有进行可视化,可能对拟合的过程没有直观的感受,因此今天跟大家介绍一下使用C#基于Scott ...
- 让gorm代码飞起来,gorm+gmodeltool生成entity,让实体类代码更轻松。
背景 不卷!php经历多年的不衰败的原因只有一个,哪就是不卷,但是由于并发和缺乏编译严谨度降低,使得长青树不得己走向了衰败. 但!叱咤风云多年,大企百度.腾讯.新浪.搜狐的首先语言的流行在于,其语言的 ...
- 古有诸葛亮八卦阵阻敌,今有 iptables 护网安
摘要:保障网络环境的安全,我们得"武装"起来,守住各个入口.怎么"武装"呢? 网络世界就和现实世界一样,总是会有些不怀好意的"人"出现,扫扫 ...
- 上手测试GaussDB(for Redis) 和开源 Redis,只为推荐质优价廉的Redis
摘要:一文带你全方位测评 GaussDB(for Redis) 和开源 Redis. 本文分享自华为云社区<程序员硬核测评:全方位测评 GaussDB(for Redis) 和开源 Redis& ...
- 火山引擎ByteHouse:云原生数据库如何提升MySQL兼容性?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 当前各类软件层出不穷,单独某一款软件往往难以满足企业应用需求,一般都需要与各类软件组合使用,这时软件生态兼容性就显 ...
- python 升级后 yum 无法使用 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: `/usr/libexec/urlgrabber-ext-down`
原因为升级python后新建了软连接指向了新版本,除非同时升级yum不然无法使用.需要手动更改报错文件指向新版本后即可解决. [root@localhost pdserving]# yum insta ...
- Axure 标记元件
快照:可以用来表示控件的截图功能 箭头:有了连线,基本很少用它 便签:相关于便利贴,写些说明.备注, 标记:标记好数字,对应数字的标记做解释说明
- Axure 公司年会抽奖器
步骤一:拖拉摆放好相关控件 1.摆好相关相关背景,即一个心形和一行文字"一路同行,感谢同行" 2.一个中继器,中继器里面放有一个300X60的白底黑框矩形.一个"name ...
- 机器学习周刊第五期:一个离谱的数据可视化Python库、可交互式动画学概率统计、机器学习最全文档、快速部署机器学习应用的开源项目、Redis 之父的最新文章
date: 2024/01/08 这个网站用可视化的方式讲解概率和统计基础知识,很多内容还是可交互的,非常生动形象. 大家好,欢迎收看第五期机器学习周刊 本期介绍7个内容,涉及Python.概率统计. ...
- Windows Tools | How To Install VS Microsoft C++ Build Tools on Windows
This can be used for installing anything that requires C++ compiler on Windows. Installation steps D ...