作者: tidb菜鸟一只
1.背景介绍
有个项目的数据库一直用的5.4.3版本,由于用的比较少,其实升级不升级的没啥必要,但是考虑到高版本的性能更强,功能也更多,同时为了练练手,决定对其进行升级。
给个建议,升级你首先要考虑你要升级的目标是什么,来决定你升级的版本,例如你当前版本有bug,暂时没有其他的解决方案,只能升级解决,那你可能只需要升级到你当前版本的对应bug解决之后的版本即可,可以不用升级大版本,例如从6.5.3升级到6.5.8之类的,这样升级其实改动的非常小,可能就是针对某些bug的修复而已,这样风险最小;但如果你的库版本比较老,当前版本已经是大版本的最后一个版本,例如5.4.3,那可能就得跨大版本升级了。又或者你看中了新版本的某个功能,例如我看中的是6.5的索引加速和密码管理策略,那我就升级到6.5的最新版本就可以了,7的资源管控很好很强大,但是我暂时不需要所以我并没有升级到7。
选好升级的版本,之后就需要考虑升级的方法了,这个可以根据下面的文档来选择。
2.参考文档
[文档地址:使用 TiUP 升级 TiDB | PingCAP 文档中心](https://docs.pingcap.com/zh/tidb/v6.5/upgrade-tidb-using-tiup#%E4%BD%BF%E7%94%A8-tiup-%E5%8D%87%E7%BA%A7-tidb)
既然你已经选择好了要升级的目标版本,那直接打开上面的文档地址,切换到你要升级的版本号。然后根据文档一步一步操作即可。文档中写的很清楚,如果你用到了tiflash,同时当前版本低于5.3,那tiflash只能采用停机升级,无法使用在线升级了,但是由于我时5.4.3,所以我选择了在线升级,下面我来详细介绍我在根据文档中步骤操作时遇到的问题,以及解决的方案。
3.实际升级操作
3.1兼容性说明
主要就两点,首先你得看看新版本对操作系统的需求,例如将 v6.3.0 之前的 TiFlash 升级至 v6.3.0 及之后的版本时,需要特别注意:在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。这个可以通过以下命令来检查:在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。确保命令 `cat /proc/cpuinfo | grep avx2` 有输出。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。确保命令 `cat /proc/cpuinfo | grep 'crc32' | grep 'asimd'` 有输出。
然后你得看新版本的配置文件参数和原来版本的区别,哪些是已经不支持的配置文件操作,具体不同版本的兼容性说明,请查看各个版本的 [Release Note](https://docs.pingcap.com/zh/tidb/v6.5/release-notes)。
3.2升级前准备
3.2.1数据备份
由于tidb目前升级不支持回滚功能,如果你的数据库很重要的话,建议先搭建一套同版本备份集群,通过dumpling+lightning和ticdc先同步到备份集群,方便在在线升级失败的话,快速切换业务到备份集群,将对生产的影响降低到最小;如果你的数据库不是那么重要,对tidb在线升级有信心的话,可以直接升级,像我就选择了第二种方案。
3.2.2工具升级
首先需要把tiup版本升级了,
tiup update --self
tiup --version
然后把tiup cluster组件升级了
tiup update cluster
tiup cluster --version
3.2.3更新镜像
如果tiup机器无法链接到外网,需要先把你目标版本的离线镜像包下载,并设置位你的离线镜像。如果像我一样能够连接外网的话,可以跳过这一步。
3.2.4修改配置文件
如果你原来的配置文件没有在目标版本中被废除的话,可以跳过这一步,我就是这种情况。
3.2.5检查当前集群的状态
这步比较关键了,如果你平常没有对集群非常上心,进场观察集群的各种监控的话,这步要看下你当前系统的健康状态,防止因为你当前系统的问题导致升级的失败。像我检查的时候就发现了点问题:
发现有5个region丢失了副本。
这种情况最好是通过pdctl看下丢失副本region的情况
tiup ctl:v5.4.3 pd -u http://10.10.10.14:2379 -i
执行region check miss-peer
但是检查发现对应region的副本并没有丢失,后来想起来可能是这个表做过tiflash副本还是什么,就没有进行处理。但是如果经过检查发现副本真的丢失的话,可以用operator add add-peer 29665 4命令来给region补充副本。
3.2.6检查集群是否有正在进行的ddl和backup进程
在sql窗口执行ADMIN SHOW DDL jobs和SHOW backups以及SHOW restores检查没有正在进行的进程即可。
注意,如果有正在执行的进程切记不要升级
4.升级集群
4.1升级集群
如果是5.3以前版本,又有tiflash的话,必须选停机升级,一般都选不停机升级。
执行命令
tiup cluster upgrade <cluster-name> v6.5.10
在这里要检查你的每个tikv节点的数据量,如果数据量比较大,建议增加参数--transfer-timeout,因为不停机升级,tikv是滚动升级的,每个tikv节点要经过所有leader驱逐→停机→升级→启动→负载leader这个步骤,如果你数据量比较大最好--transfer-timeout 3600设置的也比较大。
4.2升级pd-ctl等组件
tiup install ctl:v6.5.10
4.3验证升级效果
查看集群版本
tiup cluster display tidb-test
查看组件版本
tiup ctl:v6.5.10 pd -u http://10.10.10.14:2379 -i
查看监控
dashboard
grafana
5总结
总的来说,tidb升级还是非常简单的,只要不是原来的版本太老,一般一键在线升级完全能够满足。最后祝大家都能够升级顺利成功。