[转帖]使用 TiUP 升级 TiDB
本文档适用于以下升级路径:
- 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.1。
- 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.1。
- 使用 TiUP 从 TiDB 6.0-6.6 版本升级至 TiDB 7.1。
- 使用 TiUP 从 TiDB 7.0 版本升级至 TiDB 7.1。
- 不支持将 TiFlash 组件从 5.3 之前的老版本在线升级至 5.3 及之后的版本,只能采用停机升级。如果集群中其他组件(如 tidb,tikv)不能停机升级,参考不停机升级中的注意事项。
- 在升级 TiDB 集群的过程中,请勿执行 DDL 语句,否则可能会出现行为未定义的问题。
- 集群中有 DDL 语句正在被执行时(通常为
ADD INDEX和列类型变更等耗时较久的 DDL 语句),请勿进行升级操作。在升级前,建议使用ADMIN SHOW DDL命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用ADMIN CANCEL DDL命令取消该 DDL Job 后再进行升级。
从 TiDB v7.1 版本升级至更高的版本时,可以不遵循上面的限制 2 和 3,建议参考平滑升级 TiDB 的限制。
如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.1.0 及后续修订版本。你需要先从早期版本升级到 4.0 后,再从 4.0 升级到 v7.1.0 及后续修订版本。
1. 升级兼容性说明
- TiDB 目前暂不支持版本降级或升级后回退。
- 使用 TiDB Ansible 管理的 4.0 版本集群,需要先按照 4.0 版本文档的说明将集群导入到 TiUP (
tiup cluster) 管理后,再按本文档说明升级到 v7.1.1 版本。 - 若要将 v3.0 之前的版本升级至 v7.1.1 版本:
- 首先通过 TiDB Ansible 升级到 3.0 版本。
- 然后按照 4.0 版本文档的说明,使用 TiUP (
tiup cluster) 将 TiDB Ansible 配置导入。 - 将集群升级至 v4.0 版本。
- 按本文档说明将集群升级到 v7.1.1 版本。
- 支持 TiDB Binlog,TiCDC,TiFlash 等组件版本的升级。
- 将 v6.3.0 之前的 TiFlash 升级至 v6.3.0 及之后的版本时,需要特别注意:在 Linux AMD64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 AVX2 指令集。而在 Linux ARM64 架构的硬件平台部署 TiFlash 时,CPU 必须支持 ARMv8 架构。具体请参考 6.3.0 版本 Release Notes 中的描述。
- 具体不同版本的兼容性说明,请查看各个版本的 Release Note。请根据各个版本的 Release Note 的兼容性更改调整集群的配置。
- 升级 v5.3 之前版本的集群到 v5.3 及后续版本时,默认部署的 Prometheus 会从 v2.8.1 升级到 v2.27.1,v2.27.1 提供更多的功能并解决了安全风险。Prometheus v2.27.1 相对于 v2.8.1 存在 Alert 时间格式变化,详情见 Prometheus commit。
2. 升级前准备
本部分介绍实际开始升级前需要进行的更新 TiUP 和 TiUP Cluster 组件版本等准备工作。
2.1 查阅兼容性变更
查阅 TiDB release notes 中的兼容性变更。如果有任何变更影响到了你的升级,请采取相应的措施。
以下为从 v7.0.0 升级至当前版本 (v7.1.1) 所需兼容性变更信息。如果从 v6.6.0 或之前版本升级到当前版本,可能也需要考虑和查看中间版本 release notes 中提到的兼容性变更信息。
2.2 升级 TiUP 或更新 TiUP 离线镜像
升级 TiUP 和 TiUP Cluster
如果原集群中控机不能访问 https://tiup-mirrors.pingcap.com 地址,可跳过本步骤,然后更新 TiUP 离线镜像。
先升级 TiUP 版本(建议
tiup版本不低于1.11.3):tiup update --self tiup --version再升级 TiUP Cluster 版本(建议
tiup cluster版本不低于1.11.3):tiup update cluster tiup cluster --version
更新 TiUP 离线镜像
如果原集群不是通过离线部署方式部署的,可忽略此步骤。
可以参考使用 TiUP 部署 TiDB 集群的步骤下载部署新版本的 TiUP 离线镜像,上传到中控机。在执行 local_install.sh 后,TiUP 会完成覆盖升级。
关于 TiDB-community-server 软件包和 TiDB-community-toolkit 软件包的内容物,请查阅 TiDB 离线包。
覆盖升级完成后,需将 server 和 toolkit 两个离线镜像合并,执行以下命令合并离线组件到 server 目录下。
离线镜像合并后,执行下列命令升级 Cluster 组件:
此时离线镜像已经更新成功。如果覆盖后发现 TiUP 运行报错,可能是 manifest 未更新导致,可尝试 rm -rf ~/.tiup/manifests/* 后再使用。
2.3 编辑 TiUP Cluster 拓扑配置文件
以下情况可跳过此步骤:
- 原集群没有修改过配置参数,或通过 tiup cluster 修改过参数但不需要调整。
- 升级后对未修改过的配置项希望使用 v7.1.1 默认参数。
进入拓扑文件的
vi编辑模式:tiup cluster edit-config <cluster-name>参考 topology 配置模板的格式,将希望修改的参数填到拓扑文件的
server_configs下面。
修改完成后 :wq 保存并退出编辑模式,输入 Y 确认变更。
升级到 v7.1.1 版本前,请确认已在 4.0 修改的参数在 v7.1.1 版本中是兼容的,可参考 TiKV 配置文件描述。
2.4 检查当前集群的健康状况
为避免升级过程中出现未定义行为或其他故障,建议在升级前对集群当前的 region 健康状态进行检查,此操作可通过 check 子命令完成。
执行结束后,最后会输出 region status 检查结果。如果结果为 "All regions are healthy",则说明当前集群中所有 region 均为健康状态,可以继续执行升级;如果结果为 "Regions are not fully healthy: m miss-peer, n pending-peer" 并提示 "Please fix unhealthy regions before other operations.",则说明当前集群中有 region 处在异常状态,应先排除相应异常状态,并再次检查结果为 "All regions are healthy" 后再继续升级。
2.5 检查当前集群的 DDL 和 Backup 情况
为避免升级过程中出现未定义行为或其他故障,建议检查以下指标后再进行升级操作。
- 集群 DDL 情况:建议使用
ADMIN SHOW DDL命令查看集群中是否有正在进行的 DDL Job。如需升级,请等待 DDL 执行完成或使用ADMIN CANCEL DDL命令取消该 DDL Job 后再进行升级。 - 集群 Backup 情况:建议使用
SHOW [BACKUPS|RESTORES]命令查看集群中是否有正在进行的 Backup 或者 Restore 任务。如需升级,请等待 Backup 执行完成后,得到一个有效的备份后再执行升级。
3. 升级 TiDB 集群
本部分介绍如何滚动升级 TiDB 集群以及如何进行升级后的验证。
3.1 将集群升级到指定版本
升级的方式有两种:不停机升级和停机升级。TiUP Cluster 默认的升级 TiDB 集群的方式是不停机升级,即升级过程中集群仍然可以对外提供服务。升级时会对各节点逐个迁移 leader 后再升级和重启,因此对于大规模集群需要较长时间才能完成整个升级操作。如果业务有维护窗口可供数据库停机维护,则可以使用停机升级的方式快速进行升级操作。
不停机升级
以升级到 v7.1.1 版本为例:
- 滚动升级会逐个升级所有的组件。升级 TiKV 期间,会逐个将 TiKV 上的所有 leader 切走再停止该 TiKV 实例。默认超时时间为 5 分钟(300 秒),超时后会直接停止该实例。
- 使用
--force参数可以在不驱逐 leader 的前提下快速升级集群至新版本,但是该方式会忽略所有升级中的错误,在升级失败后得不到有效提示,请谨慎使用。 - 如果希望保持性能稳定,则需要保证 TiKV 上的所有 leader 驱逐完成后再停止该 TiKV 实例,可以指定
--transfer-timeout为一个更大的值,如--transfer-timeout 3600,单位为秒。 - 若想将 TiFlash 从 5.3 之前的版本升级到 5.3 及之后的版本,必须进行 TiFlash 的停机升级。参考如下步骤,可以在确保其他组件正常运行的情况下升级 TiFlash:
- 关闭 TiFlash 实例:
tiup cluster stop <cluster-name> -R tiflash - 使用
--offline参数在不重启(只更新文件)的情况下升级集群:tiup cluster upgrade <cluster-name> <version> --offline,例如tiup cluster upgrade <cluster-name> v6.3.0 --offline - reload 整个集群:
tiup cluster reload <cluster-name>。此时,TiFlash 也会正常启动,无需额外操作。
- 关闭 TiFlash 实例:
- 在对使用 TiDB Binlog 的集群进行滚动升级过程中,请避免新创建聚簇索引表。
停机升级
在停机升级前,首先需要将整个集群关停。
之后通过 upgrade 命令添加 --offline 参数来进行停机升级,其中 <cluster-name> 为集群名,<version> 为升级的目标版本,例如 v7.1.1。
升级完成后集群不会自动启动,需要使用 start 命令来启动集群。
3.2 升级后验证
执行 display 命令来查看最新的集群版本 TiDB Version:
4. 升级 FAQ
本部分介绍使用 TiUP 升级 TiDB 集群遇到的常见问题。
4.1 升级时报错中断,处理完报错后,如何继续升级
重新执行 tiup cluster upgrade 命令进行升级,升级操作会重启之前已经升级完成的节点。如果不希望重启已经升级过的节点,可以使用 replay 子命令来重试操作,具体方法如下:
使用
tiup cluster audit命令查看操作记录:tiup cluster audit在其中找到失败的升级操作记录,并记下该操作记录的 ID,下一步中将使用
<audit-id>表示操作记录 ID 的值。使用
tiup cluster replay <audit-id>命令重试对应操作:tiup cluster replay <audit-id>
4.2 升级过程中 evict leader 等待时间过长,如何跳过该步骤快速升级
可以指定 --force,升级时会跳过 PD transfer leader 和 TiKV evict leader 过程,直接重启并升级版本,对线上运行的集群性能影响较大。命令如下,其中 <version> 为升级的目标版本,例如 v7.1.1:
4.3 升级完成后,如何更新 pd-ctl 等周边工具版本
可通过 TiUP 安装对应版本的 ctl 组件来更新相关工具版本:
[转帖]使用 TiUP 升级 TiDB的更多相关文章
- TiDB在X86和ARM混合平台下的离线部署和升级
[是否原创]是 [首发渠道]TiDB 社区 背景 在之前我们团队发布了TiDB基于X86和ARM混合部署架构的文章:TiDB 5.0 异步事务特性体验--基于X86和ARM混合部署架构,最近有朋友问到 ...
- tidb 升级步骤
1.检查ansible版本,正常情况下,2.1 rc3需要兼容ansible 2.5以上的版本 $ ansible --version 2.检查python两个模块jinja2需要升级到2.9.6或以 ...
- Tiup离线安装TIDB集群4.0.16版本
环境:centos7.6 中控机:8.213.8.25(内网) 可用服务器8.213.8.25-8.213.8.29 一.准备 TiUP 离线组件包 方法1:外网下载离线安装包拷贝进内网服务器 在Ti ...
- TiDB集群安装主要操作
TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...
- 小试国产开源HTAP分布式NewSQL数据库TiDB-v5.3.0
概述 定义 TiDB官网 https://pingcap.com/zh/ 最新版本为5.3.0 TiDB GitHub源码 https://github.com/pingcap/tidb TiDB是由 ...
- [转帖]再次提醒Google Chrome用户应尽快升级浏览器到72.0.3626.121
再次提醒Google Chrome用户应尽快升级浏览器到72.0.3626.121 转帖地址: https://www.cnbeta.com/articles/tech/825591.htm 国内离线 ...
- [转帖]Oracle 各个版本的升级路线图
从oracle 7开始(甚至更早版本)到oracle 9iR2. 来源: https://blog.csdn.net/cymm_liu/article/details/11647533 http:// ...
- [转帖] k8s dashboard 的创建 升级 以及 admin token的创建和简单使用.
Kubernetes Dashboard中的身份认证详解 https://jimmysong.io/posts/kubernetes-dashboard-upgrade/ Thu Nov 2, 201 ...
- [转帖]升级 Ubuntu,解决登录时提示有软件包可以更新的问题
升级 Ubuntu,解决登录时提示有软件包可以更新的问题 2017年12月05日 11:58:17 阅读数:2953更多 个人分类: ubuntu Connecting to ... Connecti ...
- xcode升级到6.0以后遇到的警告错误 原帖链接http://www.cocoachina.com/bbs/simple/?t112432.html
Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo” is depreca ...
随机推荐
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 07.在C++中使用UMG
斯坦福 UE4 C++ ActionRoguelike游戏实例教程 07.在C++中使用UMG 斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章的目标是 ...
- 3、Container容器组件
Container容器组件 代码 import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( hom ...
- 使用鼠标在图片上拖拽矩形框vue
<template> <div> <img class="no-drag" src="https://dashanbook.oss-cn-s ...
- 详解ZooKeeper在微服务注册中心的应用
本文分享自华为云社区<SpringCloud ZooKeeper 详解,以及与Go.Rust等非Java服务的集成>,作者: 张俭. ZooKeeper,是一个开源的分布式协调服务,不仅支 ...
- CNCF首个云原生多云容器编排项目Karmada正式晋级孵化
文分享自华为云社区<CNCF首个云原生多云容器编排项目Karmada正式晋级孵化]>,作者:云容器大未来. 近日,云原生计算基金会(CNCF)宣布,CNCF技术监督委员会(TOC)已投票通 ...
- 【菜鸟必看】stm32定时器的妙用
摘要:本文为你带来关于stm32定时器的使用的便利和优势之处. 使用定时器去计算获取一条的时间 一.初步了解定时器 stm32定时器时钟图如下: 定时器2-7:普通定时器定时器1.8:高级定时器 二. ...
- 【玩转鲲鹏DevKit系列】何如快速迁移有源码应用
本文分享自华为云社区<[玩转鲲鹏DevKit系列]何如快速迁移有源码应用>,作者:华为云社区精选 . 源码(也称源程序)是程序员编写的计算机程序的文本形式,不同的编程语言有不同的语法和规则 ...
- 物联网通信技术最全科普!你一定要了解的NB-IoT
摘要: NB-IoT(窄带蜂窝物联网)产业正在迅速崛起. 我们这一期的文章主要是普及一些NB-IoT通信技术的相关知识点.也希望你能get到属于自己的知识盲点! 一.前言 NB-IoT(窄带蜂窝物联网 ...
- nginx启动后,服务器还是无法访问,问题排除:设置防护墙开放断开
首先检查 nignx -t 然后查看 ps -ef | grep nginx 如果以上都没有问题那就是防火墙的问题 如果以上都没有问题那就是防火墙的问题 查看版本 firewall-cmd --ve ...
- SAST + SCA: 结合使用安全升级
据 SAP 称,当今85%的安全攻击针对的是软件应用程序,因此一些列应用程序安全测试工具也应运而生.为了避免这些恶意攻击,企业通常使用应用程序安全测试工具来去缓解和解决安全风险,而不同的工具对应的使用 ...