写点什么

亿玛科技:TiDB 6.1.5 升级到 7.5.1 经验分享

  • 2024-08-23
    北京
  • 本文字数:1610 字

    阅读完需:约 5 分钟

作者: 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 之后再升级。


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
亿玛科技:TiDB 6.1.5 升级到 7.5.1 经验分享_版本升级_TiDB 社区干货传送门_InfoQ写作社区