Skip to content

TiDB 滚动升级

升级准备

1. 版本兼容性检查

  • 确认当前版本与目标版本的兼容性
  • 查看官方发布说明,了解版本间的差异和注意事项
  • 检查是否存在破坏性变更
  • 确认 TiUP 版本是否支持目标 TiDB 版本

2. 集群状态检查

在升级前,确保集群处于健康状态:

bash
# 检查集群状态
tiup cluster display cluster-name

# 检查 TiKV 节点状态
tiup ctl tikv --host tikv-host:20160 store

# 检查 PD 节点状态
tiup ctl pd --host pd-host:2379 member

# 检查 TiDB 节点状态
tiup ctl tidb --host tidb-host:10080 status

3. 备份数据

  • 执行全量备份,确保数据安全
  • 备份集群配置文件
  • 备份监控数据(可选)

4. 升级 TiUP

确保 TiUP 版本支持目标 TiDB 版本:

bash
tiup update --self
tiup update cluster

5. 测试环境验证

  • 在测试环境中先进行升级测试
  • 验证业务应用在新版本上的兼容性
  • 测试性能是否符合预期

滚动升级流程

1. 升级顺序

TiDB 滚动升级的推荐顺序为:

  1. PD 集群
  2. TiKV 集群
  3. TiDB 集群
  4. TiFlash 集群(如果使用)
  5. TiCDC 集群(如果使用)
  6. 其他组件(如监控系统)

2. 升级 PD 集群

bash
# 滚动升级 PD 集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300 --pd

升级过程中,TiUP 会:

  • 逐个停止 PD 节点
  • 升级 PD 二进制文件
  • 重启 PD 节点
  • 等待节点恢复正常

3. 升级 TiKV 集群

bash
# 滚动升级 TiKV 集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300 --tikv

升级 TiKV 节点时的注意事项:

  • 升级过程中,Region 会自动迁移到其他可用的 TiKV 节点
  • 确保 --transfer-timeout 设置合理,避免因 Region 迁移超时导致升级失败
  • 监控 Region 迁移状态,确保迁移顺利完成

4. 升级 TiDB 集群

bash
# 滚动升级 TiDB 集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300 --tidb

升级 TiDB 节点时的注意事项:

  • TiDB 是无状态组件,升级过程相对简单
  • 升级过程中,客户端连接会自动重连到其他可用的 TiDB 节点
  • 可以调整升级并发数,加速升级过程

5. 升级 TiFlash 集群(如果使用)

bash
# 滚动升级 TiFlash 集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300 --tiflash

6. 升级 TiCDC 集群(如果使用)

bash
# 滚动升级 TiCDC 集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300 --ticdc

7. 升级整个集群

如果要一次性升级所有组件,可以使用以下命令:

bash
# 滚动升级整个集群
tiup cluster upgrade cluster-name target-version --transfer-timeout 300

升级验证

1. 集群状态验证

升级完成后,检查集群状态:

bash
# 检查集群状态
tiup cluster display cluster-name

# 检查所有组件版本
tiup cluster version cluster-name

# 检查集群健康状态
tiup cluster check cluster-name --cluster

2. 功能验证

  • 执行基本的 SQL 操作,验证集群功能正常
  • 测试业务核心功能,确保应用兼容性
  • 检查监控数据,确保各项指标正常

3. 性能验证

  • 运行性能基准测试,与升级前对比
  • 监控关键性能指标,如查询延迟、吞吐量等
  • 检查资源利用率,如 CPU、内存、磁盘 I/O 等

升级注意事项

1. 升级过程中的性能影响

  • 滚动升级会对集群性能产生一定影响,建议在业务低峰期进行
  • 升级 TiKV 时,Region 迁移会增加网络和磁盘 I/O 负载
  • 可以调整升级并发数,平衡升级速度和性能影响

2. 升级过程中的监控

升级过程中,密切监控以下指标:

  • 集群整体可用性
  • TiKV 节点的 Region 数量和状态
  • PD 领导者选举情况
  • 数据库连接数和查询延迟
  • 网络和磁盘 I/O 负载

3. 特殊场景处理

  • 跨版本升级:对于跨多个主要版本的升级,建议逐步升级,避免跳过关键版本
  • 大规模集群升级:对于大规模集群,可以分批次升级,减少单次升级的风险
  • 混合部署集群:确保所有组件版本匹配,避免版本不兼容问题

回滚策略

1. 回滚条件

在以下情况下,考虑执行回滚操作:

  • 升级过程中出现严重错误,无法继续
  • 升级后集群性能严重下降
  • 升级后业务应用出现兼容性问题
  • 升级后出现数据一致性问题

2. 回滚准备

  • 备份当前集群状态和数据
  • 保存升级前的集群配置
  • 确保有可用的回滚版本

3. 回滚步骤

bash
# 回滚到之前的版本
tiup cluster upgrade cluster-name previous-version --transfer-timeout 300

回滚过程与升级过程类似,也是按照 PD → TiKV → TiDB → TiFlash → TiCDC 的顺序进行滚动回滚。

4. 回滚验证

回滚完成后,进行与升级验证相同的检查,确保集群恢复正常。

升级最佳实践

1. 规划升级窗口

  • 选择业务低峰期进行升级
  • 预留足够的时间,包括升级、验证和可能的回滚时间
  • 提前通知相关团队

2. 升级前准备充分

  • 详细阅读官方升级文档
  • 在测试环境中进行充分测试
  • 备份所有重要数据
  • 准备回滚方案

3. 升级过程中谨慎操作

  • 密切监控升级过程
  • 不要同时执行其他集群操作
  • 遇到问题及时停止升级,分析原因

4. 升级后充分验证

  • 进行全面的功能测试
  • 进行性能测试
  • 监控集群状态一段时间

5. 文档化升级过程

  • 记录升级过程中的每一步操作
  • 记录遇到的问题和解决方案
  • 更新集群文档,记录当前版本信息

常见问题处理

1. 升级过程中节点无法启动

  • 检查节点日志,分析启动失败原因
  • 检查配置文件是否正确
  • 检查端口是否被占用
  • 检查磁盘空间是否充足

2. 升级后集群性能下降

  • 检查监控数据,定位性能瓶颈
  • 调整相关参数
  • 查看官方文档,了解版本间的性能差异
  • 考虑进行性能优化

3. 升级后出现兼容性问题

  • 检查业务应用与新版本的兼容性
  • 查看官方文档,了解版本间的 API 变更
  • 修改业务应用以适应新版本
  • 如问题无法解决,考虑回滚

4. 升级过程中网络中断

  • 等待网络恢复后,检查集群状态
  • 继续执行升级命令,TiUP 会自动处理未完成的升级
  • 如果升级失败,根据错误信息进行处理

升级案例

案例 1:从 TiDB v5.4 升级到 v6.5

升级准备

  • 检查版本兼容性:v5.4 到 v6.5 支持直接升级
  • 备份数据:使用 BR 工具执行全量备份
  • 升级 TiUP:更新到最新版本
  • 测试环境验证:在测试环境中成功升级并验证

升级过程

  1. 升级 PD 集群:成功
  2. 升级 TiKV 集群:成功,Region 迁移正常
  3. 升级 TiDB 集群:成功
  4. 升级 TiFlash 集群:成功

升级验证

  • 集群状态正常,所有组件版本一致
  • 业务应用运行正常
  • 性能与升级前相当

案例 2:升级过程中遇到 TiKV 节点启动失败

问题描述

升级 TiKV 节点时,部分节点无法启动,日志显示 "failed to open engine: Corruption: block checksum mismatch"

解决方案

  1. 停止升级过程
  2. 检查 TiKV 数据目录
  3. 发现磁盘存在坏道,导致数据损坏
  4. 更换故障磁盘,从备份恢复数据
  5. 重新加入集群
  6. 继续执行升级

常见问题(FAQ)

Q1: 滚动升级会影响集群性能吗?

A1: 滚动升级会对集群性能产生一定影响,主要体现在:

  • TiKV 升级时的 Region 迁移会增加网络和磁盘 I/O 负载
  • 逐个节点升级会导致集群暂时处于混合版本状态
  • 建议在业务低峰期进行升级,或调整升级并发数来平衡升级速度和性能影响

Q2: 可以跳过中间版本直接升级到最新版本吗?

A2: 建议按照官方推荐的升级路径进行升级,不要跳过关键版本。例如,从 v5.0 升级到 v6.5,建议先升级到 v5.4,再升级到 v6.5。直接跳过中间版本可能会遇到兼容性问题。

Q3: 升级过程中可以取消吗?

A3: 可以使用 Ctrl+C 取消升级过程,但不建议这样做。取消升级可能导致集群处于混合版本状态,增加后续升级的复杂性。如果必须取消,建议在升级完成一个组件后再取消。

Q4: 升级后需要做哪些优化?

A4: 升级后可以考虑:

  • 调整相关参数以适应新版本的特性
  • 重新收集统计信息
  • 优化 SQL 查询计划
  • 进行性能测试,根据结果进行针对性优化

Q5: 如何确定升级是否成功?

A5: 升级成功的标志包括:

  • 所有节点成功启动
  • 集群状态正常
  • 所有组件版本一致
  • 业务应用运行正常
  • 性能符合预期

可以通过 tiup cluster display cluster-nametiup cluster check cluster-name --cluster 命令来验证升级是否成功。