作者: tidb 菜鸟一只原文来源:https://tidb.net/blog/90b98410
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 update --self
tiup --version
复制代码
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 等组件
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升级还是非常简单的,只要不是原来的版本太老,一般一键在线升级完全能够满足。最后祝大家都能够升级顺利成功。
复制代码
评论