1. 背景介绍
TIDB数据库的分布式、易扩展、兼容MySQL协议的特点,解决了MySQL单机存储容量不足的痛点,在行业得到广泛使用。汽车之家也有一些重要业务使用在TIDB,如论坛,好友关系,818车展等。
之家使用TIDB版本为5.1,随着业务的发展,尤其是跨机房双活集群数据同步需求,遇到5.1版CDC同步不稳定等问题,依TiDB官方建议,我们决定将TiDB版本进行升级。
2. 版本选择及方案
TIDB升级版本选择:版本选择以稳定性及满足业务需求为先, 优先选LTS版本并测试,之家依官方建议选择7.5.3版本。
升级方案:TiDB 升级通常有两种方案,原地升级或迁移升级。
- 原地升级:使用TiUP工具直接升级在线TiDB集群。
- 迁移升级:搭建一套新版本 tidb 集群,使用 TiCDC 或 Drainer做实时同步,数据追平后流量割接来实现升级。
升级方案 | 优点 | 缺点 |
---|---|---|
原地升级 | 升级方式简单,不需要额外的硬件 | 升级时间较长 ,不支持将 TiFlash在线升级为5.3后版本 |
迁移升级 | 升级异常可以回退原集群,不受版本限制 ,可充分测试 | 需额外机器资源来搭建新集群,同步数据表必须有主键或者唯一键。 |
3. 汽车之家TIDB升级
整体的TIDB升级过程可以分三个阶段: 1)升级方案制定 2)功能测试 3)迁移变更实施。 本节将展开说明。
3.1 方案制定
汽车之家TIDB实例已实现了机房双活(同一业务会有主/从 2个独立集群布署),考虑到升级异常回滚的需求,我们使用迁移升级,方案如下:
3.2 新集群布署及测试
待升级的业务实例确定后,DBA提供高版本TIDB从库集群(版本7.5.3)供研发及测试人员来测试新集群的功能、性能是否满足业务需求。
新集群布署:
- 新集群布署: 使用br工具备份/还原数据,搭建新集群。
- 集群参数检查: 注意新旧集群参数对比,可使用tidba工具来检查。
- 数据同步: TICDC或Drainer进行新集群的数据同步。
- 账号同步: 账号同步可使用pt-show-grants工具协助。
3.3 变更操作
新集群功能、性能测试通过后,就可以和业务方协商TIDB迁移升级变更时间,并实施变更操作。
3.3.1 变更前检查
TIDB版本升级是一个有风险的重大变更,在变更操作前需要认真检查。
为避免遗漏检查项,可以使用"变更操作检查表",逐项仔细核对。
3.3.2 变更实施
汽车之家业务通过域名访问TIDB数据库(域名后端是VIP来负载均衡),TIDB迁移升级迁移的流量切换,是通过修改域名后端VIP地址来完成。
变更操作步骤分两种情况:
a) 业务可短时停写:
"建立反向数据同步-->新集群切流量-->旧集群只读-->旧数据同步停止"。
b) 业务不可停写:
有些业务非常核心不接受短时停写。在域名变更短时间,会有主从集群双写冲突问题。为解决此类场景需求,我们对新旧集群进行自增奇偶设置来解决此问题。也希望同行有更好的解决方法。
3.3.3 变更收尾
DBA检查新集旧集群运行状态,数据同步状态等。若是各项DB监控指标健康,通知业务方测试业务各功能是否合预期,若均正常,则当天变更结束。
要注意的是:此时新集群版本是7.5,但原集群版本仍为旧版本(5.1),为了安全可新旧集群需并行运行一段时间,一切正常合预期,则可对旧集群原地升级,彻底完成升级操作。
4. 升级经验
4.1 升级级验
- 升级前认真检查新旧TIDB参数一致性: 检查新旧集群参数配置是否一致(如sql_mode,new_collation_enabled,tidb_txn_mode,tidb_mem_quota_query,txn-entry-size-limit等)
- 新集群定期ANALYZE TABLE 确保新集群bingding计划全部导入,并定期ANALYZE TABLE。避免性能问题。
- 多看官网上升级文档,减少升级风险 官网上有升级Tips,行业升级经验提前学习。TiDB 版本升级的小 Tips
4.2 问题及解决
汽车之家TIDB升级整体比较顺利,但也遇到过一些问题如下,最终在社区的帮助下都得到解决。
5. 升级收益
升级后,TiDB 集群在性能和稳定性等方面取得了显著提升。
-
性能提升
升级后集群性能有所提升,某集群升级后TP99性能较旧集群有明显提升。(旧集群是31ms ->升级新集群15ms)
- 数据同步稳定性提升
原来TIDB版本为 5.1时使用TICDC对主从集群数据同步,某集群常有CDC同步中断情况,升级后此类问题较少遇到。
- 新特性使用
- Fast DDL: TiDB7.5的Fast DDL功能,实现加索引性能提升10倍+,提升运维效率。
- TTL (Time to Live): TIDB7支持TTL(Time-To-Live),允许为表设置自动清理过期数据,简化数据生命周期管理。
- 资源管控(多租户: TIDB7支持多租户,可有效隔离不同租户的资源使用,提高资源利用率。
6. 致谢
在TiDB运维和升级的过程中,得到官方社区人员表妹、李仲舒、王军、刘爽等的帮助,非常感谢各位TIDB老师们给予的大力支持和耐心问题解答~