亿玛科技:TiDB 6.1.5 升级到 7.5.1 经验分享
作者: foxchan 原文来源:https://tidb.net/blog/6e628afd
为什么要升级?
本次升级 7.5 的目的如下:
1、tidb 有太多的分区表需要归档整理。7.5 版本这个功能 GA 了。
2、之前集群 tikv 节点的 region 迁移过慢,影响 tikv 节点迁移的效率,现在 region 的迁移速度显著提升。
3、tidb 分布式执行框架功能 GA 了,对于大表的索引创建速度有了显著提升。
升级步骤
不同于官方的升级方式,我是通过自己写 k8s pod 来实现的部署。
为什么?
1、因为资源有限,我并没有另一套集群来做 cdc 同步。
2、毕竟跨 2 个大版本,tidb 的底层数据结构都进行了大的变化。
所以自己通过脚本来实现集群的升级,保证每个步骤都是可控的。当然也是相信 tidb 的健壮性,不会因为升级失败导致集群不可用。
升级过程
整体升级流程和 tiup 的流程一致:
tiflash – pd – tikv – tidb – ticdc
tiflash 滚动升级
TiDBMPP 功能打开:
第一步:关闭 TiDB MPP 功能:在 TiDB 中运行 set @@global.tidb_allow_mpp=0;滚动重启所有 TiDB 节点(因为 global 变量的设置需要在新的 session 中生效,如果不滚动重启 TiDB 的话,现有的 session 仍然会生成 MPP 计划)
第二步:正常升级集群 第三步:重新开启 TiDB MPP 功能:在 TiDB 中运行 set @@global.tidb_allow_mpp=1; 并滚动重启所有 TiDB 节点
tikv 滚动升级
将需要升级的 tikv leader 进行驱逐,在驱逐后升级 image,待状态正常后恢复 leader
pd-ctl -u
http://192.168.7.25:2479 scheduler add evict-leader-scheduler 1
pd-ctl -u
http://192.168.7.25:2479 scheduler remove evict-leader-scheduler
升级带来的好处
1、tiflash cpu 消耗明显减少,如图所示,cpu 使用减少了一半
2、集群很稳定,如果不是追求新功能和修复 bug,可以一直运行。如图,这个集群平稳度过 618 活动,让小伙伴们安心过节
升级遇到的问题
遇到的最大问题是代价模型的改变,每次跨大版本升级都要注意这个
以前的 SQL 执行计划从 tiflash 改到了 tikv,导致性能急剧下降,问题情况和解决方案具体可参考:https://asktug.com/t/topic/1025244/1
这里把我升级遇到的问题列出来,当然这些都已经解决了。
tiflash 7.5.1 cpu 负载不均衡
原因:
tiflash 的 region 只会在 store 级别均衡,也就是每个 store 的 region 总数平均。但每个 table 在各个 store 的 region 数量不一定平均。
tidb7.5.1: 部分分区健康度一直是 0,drop stats 和手动 analyze 也不行
原因:属于 bug,tidb 内存更新失败,需要定期重启 tidb。
tiflash 7.5.2 rename table 到其他 database 会崩溃
原因:属于 bug,已于 7.5.3 修复
处理 ddl 假死
处理方式:
在 v6.5.0 及之后的版本中,TiDB 默认开启元数据锁特性。当集群从 v6.5.0 之前的版本升级到 v6.5.0 及之后的版本时,TiDB 会自动开启元数据锁功能。
新版本引入了 mysql.tidb_mdl_view 视图,可以用于查看当前阻塞的 DDL 的相关信息SELECT * FROM mysql.tidb_mdl_view
从上面的输出结果中了解到,有一个 SESSION ID 事务阻塞了该添加索引 DDL 的执行,通过 KILL 命令中止 SESSION ID 的事务
cdc 的升级
cdc 从 6.5 才开始支持滚动升级,尤其是从 6 往 7 升级要注意,changefeed 的写法也发生了改变。
每次升级 cdc 都要看这个文档,来确认 cdc 的版本兼容性。
所以你要是想通过 cdc 往低版本或者高版本的 tidb 集群同步数据,都要看这个文档哦!
https://github.com/pingcap/tiflow/blob/master/pkg/version/check.go
参数修改
每次升级都有一些参数需要修改,来匹配新版本的特性
# 优化器选择优化SET GLOBAL tidb_cost_model_version =2
# 统计信息优化
SET GLOBAL tidb_enable_async_merge_global_stats='on'<br>SET GLOBAL tidb_merge_partition_stats_concurrency=2
总结
1、如果没有特别的需求,可以使用比官方低一个版本的 release。比如最新的 GA 是 8.1,那么生产环境最高是 7.5。
2、升级的版本建议是版本号第三位及以后。比如你要升级 7.5,建议等到 7.5.3 之后再升级。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/6175e2b1716358b6dc9692af4】。文章转载请联系作者。
评论