扫码阅读
手机扫码阅读

基于阿里云ECS部署的TiDB 2.1.14升级到4.0.0-rc实践

328 2023-09-06

前言

随着TiDB最新版本v5.2的发布,线上有一套跑了两年多的TiDB v2.1.14也显得太过老旧,加上相关业务系统也是越来越慢,于是决定对数据库进行升级操作。一方面是抛弃利用ansible的运维方式,使用tiup接管整个集群,方便后续运维,二来也确实是遇到了性能瓶颈,急需升级。

原TiDB集群是基于阿里云ECS部署的,预先就设置了防火墙、安全组、网络等,同一子网内的机器互通有无,对于中控机等对外提供服务的机器,对其端口做了一个规划,开设4000、3000等对外访问端口。

TiDB架构说明

说明:这是一套测试环境中TiDB的配置。整个TiDB集群是一个缩小化的线上业务集群,一个TiDB节点,一个PD节点,三个TiKV节点,一组TiDB Binlog。

|    IP地址    | 配置 | 部署组件 | 系统版本 |           额外           || :----------: | :-----: | :------: | :------: | :----------------------: || 10.133.1.131 | 16C 64G |   TiDB   | CentOS 7 |    grafana、中控机器     || 10.133.1.137 | 16C 64G |   TiKV   | CentOS 7 |                          || 10.133.1.138 | 16C 64G |   TiKV   | CentOS 7 |                          || 10.133.1.139 | 16C 64G |   TiKV   | CentOS 7 |                          || 10.133.1.132 | 8C 16G |   pump   | CentOS 7 |                          || 10.133.1.136 | 8C 16G |    PD    | CentOS 7 | monitoring、alertmanager || 10.133.1.129 | 8C 16G | drainer  | CentOS 7 |                          |

版本信息:

PS:由于TiDB v4.0当中新加了一个dashboard的功能,于是预先开放PD节点的2379端口,供外部访问。

升级方式

有两种方式,经过测试,都是可行的。

方案一:逐步滚动升级,先将原TiDB升级到TiDB v3.1.0,然后再升级到TiDB v4.0.0-rc,接着用TiUP接管。

升级过程:

第一步:TiDB v2.1.14升级到 TiDB v3.1.0

  1. 升级前的准备

# 进入到中控机,切换为tidb用户su tidb # 备份原tidb-ansible 部署文件cd /home/tidbmv tidb-ansible tidb-ansible-bak # 下载TiDB 3.1.0对应的tidb-ansible脚本git clone -b v3.1.0 https://github.com/pingcap/tidb-ansible.git # 检查tidb-ansible依赖是否完整cd /home/tidb/tidb-ansible && \sudo pip install -r ./requirements.txt # 确保中控机存在ansibleansible --version # 检查SSH互信配置以及tidb用户sudo免密配置cd /home/tidb/tidb-ansible-bak# 均返回tidb,则代表SSH互信配置OKansible -i inventory.ini all -m shell -a 'whoami' # 均返回root,则代表tidb用户 sudo免密配置OKansible -i inventory.ini all -m shell -a 'whoami' -b

2. 修改 inventory.ini 文件 和配置文件

参照之前版本的inventory.ini的配置,去修改新部署集群的配置

# 修改inventory.ini cd /home/tidb/tidb-ansiblevi inventory.ini # 修改conf文件 # 集群部署有drainer,这里需要修改conf目录下的drainer.toml,保证与老集群一致vi /home/tidbtidb-ansible/conf/drainer.toml

3. 执行升级操作

cd /home/tidb/tidb-ansible
# 下载TiDB v3.1.0的binary到中控机中
ansible-playbook local_prepare.yml
# 执行升级脚本
ansible-playbook excessive_rolling_update.yml
# 滚动升级TiDB 监控组件
ansible-playbook rolling_update_monitor.yml
# 升级TiDB Binlog组件
# pump 集群升级,pump也会跟着升级
# drainer
ansible-playbook stop_drainer.yml --tags=drainer
ansible-playbook start_drainer.yml --tags=drainer

4. 升级完的检查

检查grafana overview面板,确保所有组件正常启动;

检查grafana TiDB、PD、TiKV面板,确保无异常情况;

检查TiDB Binlog组件,确保时间戳得到更新;

第二步,利用TiUP将 TiDB v3.1.0升级到 TiDB v4.0.0-rc

  1. 安装tiup

# 在中控机上执行命令(使用tidb用户,而非root用户执行)
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 重新声明全局变量
source .bash_profile
# 确认tiup工具正常安装
which tiup
# 安装 tiup cluster工具
tiup cluster

2. 将 TiDB Ansible 及 inventory.ini 配置导入到 TiUP

# 导入配置
tiup cluster import -d /home/tidb/tidb-ansible
# 通过display查看集群信息
tiup cluster display test-cluster

3. 升级TiDB集群

# 修改集群配置,对比以前的inventroy.ini的配置与topology模板来进行修改
tiup cluster edit-config test-cluster
# 执行滚动升级
tiup cluster upgrade test-cluster v4.0.0-rc
# 升级后的验证
tiup cluster display test-cluster


方案二:直接升级,直接将TiDB v2.1.14升级到TiDB v4.0.0-rc,然后再用TiUP接管整个集群。

这个方案的升级过程与TiDB v2.1.14升级到TiDB v3.1.0过程类似,最后直接将tidb-ansbile导入到tiup工具接管,这里不做过多赘述了。

升级过程中遇到的问题

1. tidb-ansible无法正常启动,提示ImportError: No module named markupsafe
解决办法:
在安装之前,使用 sudo pip uninstall markupsafe 卸载原来遗留的包
执行 sudo yum install python-markupsafe -y
PS:需要注意的是,这里不能使用 pip install markupsafe ,用pip安装的是错误的包

2. node_exporter、blackbox_exporter 利用服务脚本无法关闭,提示关闭超时
在升级的过程中,在一台机器上出现这个问题 ,提示服务没找到,但是那台机器上是的的确确存在这个服务的。
解决办法:
在ansible脚本等待的过程中,手动停止这两个服务
systemctl stop node_exporter-9100.service blackbox_exporter-9115.service

3. 升级完成之后,dashboard提示没找到Prometheus组件

解决办法:
执行 tiup cluster reload test-cluster 问题得到解决

性能对比

这里使用sysbench分别对v2.1.14和v4.0.0-rc版本的TiDB集群做简单测试,对比升级后的性能变化。

TiDB v2.1.14 sysbench read&write 测试结果:

TiDB v4.0.0-rc sysbench read&write 测试结果:

TiDB 从v2.1.14升级到v4.0.0-rc,性能的确得到了不小的提升,当然,这只是测试环境,也只是简单跑了一下sysbench测试,到了线上业务集群,性能提升也许更大。

总结

此次升级过程,让我体会到了tidb每次版本升级所带来的巨大变化,3.x开始出现的tiflash、4.x出现的运维神器TiUP、以及每次升级所带来的集群性能方面的提升。

在TiUP出现以前,运维过程是一个非常繁琐的过程。在用tidb-ansible运维集群的时候,一个集群的配置得去好几个文件中去修改,一个文件一个文件的去对比、确认,执行过程相较于TiUP工具而言也比较繁复。不得不说,TiUP的出现,可以将TiDB划分为两个时代。

这一次的集群升级,结果是十分成功的,也为不久之后的业务集群升级打下了坚实基础。

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247487121&idx=1&sn=480b964a650ca130a95dded9fc55f998&chksm=c02c3537f75bbc21fdfa96f74e767782c152cd5195f96841cc511c08e5a30fa1c38c8b872d68#rd