# 升级 TiDB 集群

__*TiDB 版本升级*__
__*TiDB 不停机升级*__
__*TiDB 停机升级*__

+ 不停机升级
  + `tiup cluster upgrade <cluster-name> <version>`

+ 停机升级
  + 停止集群
    + `tiup cluster stop <cluster-name>`

  + 离线升级
    + `tiup cluster upgrade <cluster-name> <version> --offline`

  + 启动集群
    + `tiup cluster start <cluster-name>`


-------------------------------------------------------------
升级的方式有两种:不停机升级和停机升级。TiUP Cluster 默认的升级 TiDB 集群的方式是不停机升级,即升级过程中集群仍然可以对外提供服务。升级时会对各节点逐个迁移 leader 后再升级和重启,因此对于大规模集群需要较长时间才能完成整个升级操作。如果业务有维护窗口可供数据库停机维护,则可以使用停机升级的方式快速进行升级操作。

不停机升级
tiup cluster upgrade <cluster-name> <version>

注意:
- 滚动升级会逐个升级所有的组件。升级 TiKV 期间,会逐个将 TiKV 上的所有 leader 切走再停止该 TiKV 实例。默认超时时间为 5 分钟（300 秒）,超时后会直接停止该实例。
- 如果不希望驱逐 leader,而希望快速升级集群至新版本,可以在上述命令中指定 --force,该方式会造成性能抖动,不会造成数据损失。
- 如果希望保持性能稳定,则需要保证 TiKV 上的所有 leader 驱逐完成后再停止该 TiKV 实例,可以指定 --transfer-timeout 为一个更大的值,如 --transfer-timeout 3600,单位为秒。
- 从 5.3 之前的老版本升级到 5.3 及之后的版本时,不支持在线升级 TiFlash,只能先将 TiFlash 实例关闭,然后离线地升级集群,最后 reload 整个集群,保证除 TiFlash 之外的组件不停机升级。

停机升级
在停机升级前,首先需要将整个集群关停。
tiup cluster stop <cluster-name>

之后通过 upgrade 命令添加 --offline 参数来进行停机升级。
tiup cluster upgrade <cluster-name> <version> --offline

升级完成后集群不会自动启动,需要使用 start 命令来启动集群。
tiup cluster start <cluster-name>