# TiDB扩容与缩容

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 其他
> 原文链接: http://117.50.162.249:3000/yun/articles/723

---

# TiDB扩容与缩容

> 来源: https://www.ucloud.cn/yun/130143.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

TiDB扩容与缩容

使用TiDB Ansible 扩容缩容TiDB 集群，可以在不影响线上服务的情况下进行扩容和缩容。本文带大家走进TiDB的扩缩容场景实验。

当前tidb拓扑结构如下：

|  |  |  |
| --- | --- | --- |
| Name | Host ip | Service |
| Ti1 | 192.168.37.132 | Tidb,pd |
| Ti2 | 192.168.37.128 | Tikv1 |
| Ti3 | 192.168.37.129 | Tikv2 |
| Ti4 | 192.168.37.130 | Tikv3 |

[

扩容

]

## 

**1、扩容tidb/tikv**（可使用同样的步骤添加 TiKV 节点，tikv不演示）扩容tidb节点（IP：192.168.37.131）

1. 编辑 inventory.ini 文件，添加节点信息：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_000.png)

2. 初始化新增节点：

ansible-playbookbootstrap.yml -l 192.168.37.131

3. 部署新增节点：

ansible-playbookdeploy.yml -l 192.168.37.131

4. 启动新节点服务：

ansible-playbookstart.yml -l  192.168.37.131

5. 更新 Prometheus 配置并重启：

ansible-playbookrolling\_update\_monitor.yml --tags=prometheus

6. 打开浏览器访问监控平台：http://192.168.37.132:3000，监控整个集群和新增节点的状态

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_001.png)

可以看到新扩容tidb节点已添加到tidb集群，tidb扩容成功。

**2、扩容pd**

1. 编辑 inventory.ini 文件，添加节点信息：

本次添加pd节点（192.168.37.133）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_002.png)

2. 初始化新增节点：

ansible-playbookbootstrap.yml -l 192.168.37.133

3. 部署新增节点：

ansible-playbookdeploy.yml -l 192.168.37.133

4. 登录新增的 PD 节点，编辑启动脚本：{deploy\_dir}/scripts/run\_pd.sh

D1：移除--initial-cluster="xxxx" 配置，注意这里不能在行开头加注释符#。

D2：添加 --join="http://192.168.37.132:2379" ，IP地址（192.168.37.132）可以是集群内现有PD IP 地址中的任意一个。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_003.png)

D3: 在新增PD 节点中手动启动PD 服务：

{deploy\_dir}/scripts/start\_pd.sh

D4: 使用pd-ctl 检查新节点是否添加成功：

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d member

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_004.png)

可以看到pd节点已添加pd集群里面。

5. 滚动升级整个集群（耗时很长，按照我的机器配置添加一个节点，需要10分钟左右）：

ansible-playbookrolling\_update.yml

6. 启动监控服务：

ansible-playbookstart.yml -l 192.168.37.133

7. 更新 Prometheus 配置并重启：

ansible-playbookrolling\_update\_monitor.yml --tags=prometheus

8. 打开浏览器访问监控平台：http://192.168.37.132:3000，监控整个集群和新增节点的状态

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_005.png)

从监控面班可以看到，pd已扩容成功。

[

缩容

]

## 

**1、缩容tidb**

移除tidb节点（192.168.37.131）

1. 停止节点上的服务

ansible-playbookstop.yml -l 192.168.37.131

2. 编辑 inventory.ini 文件，移除节点信息（这两个位置）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_006.png)

3. 更新 Prometheus 配置并重启：

ansible-playbookrolling\_update\_monitor.yml --tags=prometheus

4. 打开浏览器访问监控平台：http://192.168.37.132:3000，监控整个集群和新增节点的状态

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_007.png)

192.168.37.131节点信息已没有了，缩容成功。

**2、缩容tikv**

缩容tikv（192.168.37.131）

1. 使用 pd-ctl 从集群中移除节点

A1：查看192.168.37.131节点的store id

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d store （通过pdip接口）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_008.png)

A2：从集群中移除192.168.37.131节点

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d store delete 1

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_009.png)

2. 使用 Grafana 或者 pd-ctl 检查节点是否下线成功

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d store delete 1

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_010.png)

3. 下线成功后，停止节点（192.168.37.131）上的服务

ansible-playbookstop.yml -l 192.168.37.131

4. 编辑 inventory.ini 文件，移除节点信息

注释掉要缩容的tikv节点

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_011.png)

5. 更新 Prometheus 配置并重启

ansible-playbookrolling\_update\_monitor.yml --tags=prometheus

6. 打开浏览器访问监控平台：http://192.168.37.132:3000，监控整个集群和新增节点的状态

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_012.png)

查看监控列表发现192.168.37.131已缩容。

**3、缩容pd**

缩容pd（192.168.37.133）

1. 使用 pd-ctl 从集群中移除节点

A1：查看node2 节点的name

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d member

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_013.png)

A2：从集群中移除node2，假如name 为pd2

/home/tidb/tidb-ansible/resources/bin/pd-ctl-u "http://192.168.37.132:2379" -d member delete namepd\_ti5

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_014.png)

2. 使用 pd-ctl 检查节点是否下线成功（PD 下线会很快，结果中没有192.168.37.133节点信息即为下线成功）

/home/tidb/tidb-ansible/resources/bin/pd-ctl -u"http://192.168.37.132:2379" -d member

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_015.png)

3. 下线成功后，停止192.168.37.133上的服务

ansible-playbook stop.yml -l 192.168.37.133

4. 编辑 inventory.ini 文件，移除节点信息

把192.168.37.133注释掉

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_016.png)

5. 滚动升级整个集群

ansible-playbookrolling\_update.yml

6. 更新 Prometheus 配置并重启

ansible-playbookrolling\_update\_monitor.yml --tags=prometheus

7. 打开浏览器访问监控平台：http://192.168.37.132:3000，监控整个集群和新增节点的状态

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130143/images/130143_017.png)

192.168.37.133的PD已缩容。