滚动升级 Kubernetes 上的 TiDB 集群
滚动升级过程会自动处理 PD、TiKV 的 Leader 迁移与 TiDB 的 DDL Owner 迁移。因此,在多节点的部署拓扑下(最小环境:PD * 3、TiKV * 3、TiDB * 2),滚动更新 TiKV、PD 不会影响业务正常运行。
对于有连接重试功能的客户端,滚动更新 TiDB 同样不会影响业务。对于无法进行重试的客户端,滚动更新 TiDB 则会导致连接到被关闭节点的数据库连接失效,造成部分业务请求失败。对于这类业务,推荐在客户端添加重试功能或在低峰期进行 TiDB 的滚动升级操作。
滚动更新可以用于升级 TiDB 版本,也可以用于更新集群配置。
- 修改集群的 文件中的
tidb.image
、tikv.image
、pd.image
的值为新版本镜像; 查看升级进度:
watch kubectl -n <namespace> get pod -o wide
默认条件下,修改配置文件不会自动应用到 TiDB 集群中,只有在实例重启时,才会重新加载新的配置文件。
您可以开启配置文件自动更新特性,在每次配置文件更新时,自动执行滚动更新,将修改后的配置应用到集群中。操作步骤如下:
- 修改集群的
values.yaml
文件,将enableConfigMapRollout
的值设为true
; - 根据需求修改
values.yaml
中需要调整的集群配置项; 查看升级进度:
当所有 Pod 都重建完毕进入
Running
状态后,升级完成。
如果 PD 集群因为 PD 配置错误、PD 镜像 tag 错误、NodeAffinity 等原因不可用,、升级 TiDB 版本和这三种操作都无法成功执行。
这种情况下,可使用 force-upgrade
(TiDB Operator 版本 > v1.0.0-beta.3 )强制升级集群以恢复集群功能。
首先为集群设置 annotation
:
然后执行对应操作中的 helm upgrade
命令:
警告:
PD 集群恢复后,必须执行下面命令禁用强制升级功能,否则下次升级过程可能会出现异常: