0. 升级说明
TiDB3.0 在前不久发布了,据说有很大的性能提升。接领导命令,让我来测试一下由 2.1 版本升级到 3.0 版本的工作。下面的文档参考了官方的文档,也柔合自己的内容。
1. 测试环境
本次的测试环境的如下所示,一共有 3 台 kv,1 个 pd 和一个 db,其中 pd 和 db 共用一台主机。由于只有一个 pd 和一个 db,所以本次的测试必定会使得 tidb 停止服务的。如果要在生产环境中不停机升级,那起码每个组件都要达到官方的集群要求,即:2DB+3PD+3KV。
组件 | CPU | 内存 | IP 地址 | 主机名 |
---|---|---|---|---|
TiDB | 2 核 | 4 GB | 192.168.113.20 | tidb01 |
PD | 2 核 | 4 GB | 192.168.113.20 | tidb01 |
TiKV | 2 核 | 4 GB | 192.168.113.21 | tikv01 |
TiKV | 2 核 | 4 GB | 192.168.113.22 | tikv02 |
TiKV | 2 核 | 4 GB | 192.168.113.23 | tikv03 |
2. 升级的兼容性说明
- 不支持在升级后回退至 2.1.x 或更旧版本
- 从 2.0.6 之前的版本升级到 3.0 之前,需要确认集群中是否存在正在运行中的 DDL 操作,特别是耗时的
Add Index
操作,等 DDL 操作完成后再执行升级操作 - 2.1 及之后版本启用了并行 DDL,早于 2.0.1 版本的集群,无法滚动升级到 3.0,可以选择下面两种方案:
- 停机升级,直接从早于 2.0.1 的 TiDB 版本升级到 3.0
- 先滚动升级到 2.0.1 或者之后的 2.0.x 版本,再滚动升级到 3.0 版本
注意:
在升级的过程中不要执行 DDL 请求,否则可能会出现行为未定义的问题。
看到这里,其实还是建议停机升级。
3. 在中控机器上下载新的 TiDB-Ansible
和安装 TiDB 一样,不同的是你的/home/tidb 目录下已经有了旧的 tidb-ansible 目录了,先备份
su - tidb
mv tidb-ansible/ tidb-ansible_2.1
下载 tidb-ansible 3.0,github 下载速度有点慢,耐心等待
git clone -b v3.0 https://github.com/pingcap/tidb-ansible.git
4. 编辑 inventory.ini 文件和配置文件
-
编辑 inventory.ini 文件
请保持该文件的主机信息和旧文件一样,直接参考旧文件即可 -
修改 TiDB 为开发模式
修改 /home/tidb/tidb-ansible/group_vars/all.yml 的参数,使得我们的使用的是开发模式,降低对硬件性能的检测标准。生产环境不要改。
dev_mode: True
5. 下载 TiDB 3.0 binary 到中控机
确认 tidb-ansible/inventory.ini
文件中 tidb_version = v3.0.0
,然后执行以下命令下载 TiDB 3.0 binary 到中控机
ansible-playbook local_prepare.yml
6. 滚动升级 TiDB 集群组件
注意:
为优化 TiDB 集群组件的运维管理,TiDB 3.0 版本对systemd
模式下的PD service
名称进行了调整。与之前版本相比,滚动升级 TiDB 3.0 版本集群组件的操作略有不同,注意升级前后process_supervision
参数配置须保持一致。
如果 process_supervision
变量使用默认的 systemd
参数,则通过 excessive_rolling_update.yml
滚动升级 TiDB 集群。
ansible-playbook excessive_rolling_update.yml
如果 process_supervision
变量使用 supervise
参数,则通过 rolling_update.yml
滚动升级 TiDB 集群。
ansible-playbook rolling_update.yml
这里我们使用的是 systemd,所以使用第一种方式
#7. 滚动升级 TiDB 监控组件
最后别忘了升级我们的监控组件
ansible-playbook rolling_update_monitor.yml
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于