【SOP 系列 16】4.0 线上集群升级 5.0

作者:王贤净、李启航

一、背景 / 目的

本文档适用于对 TiDB 有一定运维经验,希望通过 TiUP 将 4.0 集群升级 5.0 集群的用户。

二、操作前的 Check 项

  1. 确保当前集群状态与 edit-config 中的拓扑一致
  2. 确保当前集群的各个组件运行正常

三、升级前的注意事项

3.1 查看 TiDB 的 Release Notes

以 v5.0.0-rc Release Notes 为例,通过Release Notes了解做了哪些优化或者修复了哪些 BUG。

3.2 升级前注意

  • 注意通知业务,升级期间可能会有偶尔的性能抖动,PD Leader 升级可能会有 3s 以上业务不可用的影响;
  • 注意预估升级时间 = tikv 个数 * 5 min(默认是 transfer leader 时间) + 10 min,滚动升级 TiKV 时间较长;
  • 通知业务注意升级过程中在线事务失败处理;
  • 最好做一次完整的数据冷备份,通过 Dumpling 导出业务库;
  • 整个升级过程不支持版本回退;
  • 升级操作通过中控机的 TiUP 组件完成,默认是 “tidb” 用户。

3.3 升级兼容性说明

  • 不支持在升级后回退至 4.0 或更旧版本
  • 3.0 之前的版本需要先通过 TiDB Ansible 升级到 3.0 版本,3.0 线上集群升级 4.0 ,先升级到 4.0 ,再升级到 5.0 版本
  • 支持 TiDB Binlog,TiCDC,TiFlash 等组件版本的升级。

3.4 目前 TiUP 不支持的功能

  1. 不支持修改监控告警规则,需要到具体程序目录修改
  2. 不支持单独对 node_exporter 和 blackbox_exporter 进行安装
  3. 不支持设置单独机器的 node_exporter 和 blackbox_exporter 端口,需要统一设置端口

3.5 TiDB 4.0 与 TiDB 5.0 参数变量差异(仅供参考)

3.5.1 配置文件参数差异 - tidb

模块 v5.0.0-rc v4.0.9 备注
tidb tikv-client.copr-cache.enable = true tikv-client.copr-cache.enable = false 是否开启下推计算结果缓存
prepared-plan-cache.enabled = true prepared-plan-cache.enabled = false v5.0 默认开启prepared-plan-cache
performance.max-txn-ttl = 3600000 performance.max-txn-ttl = 600000 单个事务持锁的最长时间,超过该时间,该事务的锁可能会被其他事务清除,导致该事务无法成功提交
performance.max-txn-ttl = 3600000 performance.max-txn-ttl = 600000 单个事务持锁的最长时间,超过该时间,该事务的锁可能会被其他事务清除,导致该事务无法成功提交。
performance.feedback-probability = 0.05 performance.feedback-probability = 0.0 v5.0 默认开启 feedback
oom-action = “cancel” oom-action = “log” v5.0 使用 cancel 作为默认值,会对写入过程中的内存进行统计,v4.x 则不会

3.5.2 配置文件参数差异 - tikv

模块 v5.0.0-rc v4.0.9 备注
tikv - rocksdb.auto-tuned 开启自动优化 Rate LImiter 的配置的开关, v5.0 已删除该参数
- raftstore.sync-log 数据、log 落盘是否 sync
- raftstore.clean-stale-peer-delay
rocksdb.rate-bytes-per-sec = “10GB” rocksdb.rate-bytes-per-sec = 0 Rate Limiter 限制速率, v5.0 默认 10G, v4.0 默认不限速
rocksdb.info-log-roll-time = “0s” rocksdb.info-log-roll-time = “0” rocksdb 日志截断间隔时间,如果为 0s 则不截断
pessimistic-txn.pipelined = true pessimistic-txn.pipelined = false 是否开启流水线式加悲观锁流程, v5.0 默认开启;v4.0 默认关闭

3.5.3 配置文件参数差异 - pd

上表主要是列出 4.0 和 5.0 存在差异或者被取消的参数,新增的 feature 引入的参数可以参考官方文档。

四、操作步骤

4.1 在中控机上安装 TiUP

  1. 在中控机上执行如下命令安装 TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh sh
  1. 重新声明全局环境变量
source .bash_profile
  1. 确认 TiUP工具是否安装
which tiup
  1. 安装 TiUP 的 cluster 工具
tiup cluster

4.2 滚动升级 TiDB 集群

  1. 通过 tiup cluster upgrade 命令升级集群
tiup cluster upgrade <cluster-name> <version>

以升级到 v5.0.0-rc 版本为例

tiup cluster upgrade <cluster-name> v5.0.0-rc

滚动升级会逐个升级所有的组件。升级 TiKV 期间,会逐个将 TiKV 上的所有 leader 切走再停止该 TiKV 实例。默认超时时间为 5 分钟,超过后会直接停止实例。

如果不希望驱逐 leader,而希望立刻升级,可以在上述命令中指定 --force,该方式会造成性能抖动,不会造成数据损失。

如果希望保持性能稳定,则需要保证 TiKV 上的所有 leader 驱逐完成后再停止该 TiKV 实例,可以指定 --transfer-timeout 为一个超大值,如 --transfer-timeout 100000000,单位为 s

  1. 通过 tiup cluster display 命令查看集群状态
tiup cluster display <cluster-name>

# 会有下面的输出
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.3.1/tiup-cluster display <cluster-name>
Cluster type: tidb
Cluster name: <cluster-name>
Cluster version: v5.0.0-rc
SSH type: builtin
Dashboard URL: http://127.0.0.1:2379/dashboard
...

检查 TiDB Version 显示为目标升级版本以及各个实例的 Status 显示为 UpHealthy 表示集群状态正常

五、操作后 Check 监控项

登录 Grafana 页面 http://{grafana-ip}:{grafana-port}

  • 查看 overview 页面, Overview 页面的 `Services Port Status 状态是否均为绿色的 up 状态;

  • 查看 TiDB 页面, Query Summary 监控栏的 Duration、QPS、QPS By Instance、Failed Query OPM 监控项是否正常,在每个监控项左上:arrow_upper_left:都会有一个“i” 光标放在那里会描述监控项的解释和预期情况;

  • 新的 TiKV 相关监控数据主要会展示在 TiKV-Details、TiKV-Summary、TiKV-Trouble-Shooting 中。可以查看 TiKV-Details 页面,通过 Cluster、Error、Server 确认 TiKV 实例的状态的负载以及错误情况。
  • 查看 PD 页面,查看 Cluster 监控栏中的 Storage capacity、Current storage size、Current stroage used、Normal stores、Number of Regions 确认当前集群存储数据和 Region 的情况。

六、离线环境升级

TiUP 目前也支持离线环境管理 TiDB 集群,需要搭建离线镜像环境,然后就可以按照在线环境方式使用 tiup。

离线升级方式兼容 【SOP 系列 11】3.0 线上集群升级 4.0

New:新版本的 TiUP,增强 TiUP mirror 命令的功能,支持将多个镜像合并成一个,支持在本地镜像发布组件,支持添加组件所有者到本地镜像,github doc官方的一些说明

七、周边工具升级

7.1 TiDB Binlog 升级

目前 TiUP 已经支持 Binlog 的管理,所以通过 TiUP 导入的 TiDB Ansible 集群,在升级 TiDB 集群时会同时升级 TiDB Binlog

7.2.TiFlash 升级

目前 TiUP 已经支持 TiFlash 的管理,在升级 TiDB 集群时会同时升级 TiFlash。

在升级完成后,可以通过查询系统表,或者是按照官网提供的方式查看当前版本信息:


mysql> select type,version from information_schema.cluster_info where type='tiflash';
*************************** 1. row ***************************
   type: tiflash
version: v5.0.0-rc
1 row in set (0.00 sec)

7.3.TiCDC 升级

目前 TiUP 已经支持 TiCDC 的管理,在升级 TiDB 集群时会同时升级 TiCDC

注意:4.0.x5.0.x 之间存在一些兼容性问题,升级完成后,需要使用对应的 cdc-cli / tiup ctl cdc 版本,确保 cdc-cli 和 cdc-server 版本保持一致。#1306

7.4.BR 升级

TiDB 集群升级后,需要确保 BR 的版本和 TiDB 版本相同。BR 升级需要单独操作。下载对应版本的 BR,解压替换老版本的 BR binary 即可完成 BR升级。

wget https://download.pingcap.org/tidb-toolkit-{version}-linux-amd64.tar.gz

八、升级常见问题

8.1 升级之后系统性能下降

通过慢日志确认升级前后是否有执行计划变动,如果有执行计划变动的情况,可以手动收集一下统计信息

1赞