(相关资料图)
通过TiDB Operator来部署管理Kubernete上的TiDB集群,可以通过滚动更新来升级TiDB集群的版本,来减少对业务的影响。本文介绍如何使用滚动更新来升级 Kubernetes 上的 TiDB 集群。
Kubernetes 提供了滚动更新功能,在不影响应用可用性的前提下执行更新。
使用滚动更新时,TiDB Operator 会按 PD、TiFlash、TiKV、TiDB 的顺序,串行地删除旧版本的 Pod,并创建新版本的 Pod。当新版本的 Pod 正常运行后,再处理下一个 Pod。
滚动更新中,TiDB Operator 会自动处理 PD 和 TiKV 的 Leader 迁移。因此,在多节点的部署拓扑下(最小环境:PD \* 3、TiKV \* 3、TiDB \* 2),滚动更新 TiKV、PD 不会影响业务正常运行。对于有连接重试功能的客户端,滚动更新 TiDB 同样不会影响业务。
注意事项
对于无法进行连接重试的客户端,滚动更新 TiDB 会导致连接到被关闭节点的数据库的连接失效,造成部分业务请求失败。对于这类业务,推荐在客户端添加重试功能,或者在低峰期进行 TiDB 的滚动更新操作。
升级前,请参考
文档确认没有正在进行的 DDL 操作。
spec.version
即可,如果要为集群内不同组件设置不同的版本,修改 spec、.version
。[root@k8s-master tidb]# kubectl apply -f tidb.yamltidbcluster.pingcap.com/lqb configured
[root@k8s-master ~]# kubectl get pod -ntidb -wNAME READY STATUS RESTARTS AGEyz-discovery-68674b48b8-49vrl 1/1 Running 0 2d1hyz-pd-0 1/1 Running 0 2d22hyz-pd-1 1/1 Running 0 2d22hyz-pd-2 1/1 Running 0 2m55syz-tidb-0 2/2 Running 0 2d4hyz-tidb-1 2/2 Running 0 2d22hyz-tidb-initializer-b8l8f 0/1 Completed 0 35dyz-tiflash-0 4/4 Running 0 6d4hyz-tikv-0 1/1 Running 0 2d4hyz-tikv-1 1/1 Running 0 6d4hyz-tikv-2 1/1 Running 2 3dyz-tikv-3 1/1 Running 0 3dyz-pd-1 1/1 Terminating 0 2d22hyz-pd-2 1/1 Running 0 3m24syz-pd-1 0/1 Terminating 0 2d22hyz-pd-1 0/1 Terminating 0 2d22hyz-pd-1 0/1 Terminating 0 2d22hyz-pd-1 0/1 Pending 0 0syz-pd-1 0/1 Pending 0 0syz-pd-1 0/1 ContainerCreating 0 0syz-pd-1 1/1 Running 0 1syz-pd-0 1/1 Terminating 0 2d22hyz-pd-0 0/1 Terminating 0 2d22hyz-pd-1 1/1 Running 0 21syz-pd-0 0/1 Terminating 0 2d22hyz-pd-0 0/1 Terminating 0 2d22hyz-pd-0 0/1 Pending 0 0syz-pd-0 0/1 Pending 0 0syz-pd-0 0/1 ContainerCreating 0 0syz-pd-0 0/1 ErrImagePull 0 20syz-pd-0 0/1 ImagePullBackOff 0 31s
当所有 Pod 都重建完毕进入 Running
且TC都是True表示升级完成。
[root@k8s-master tidb]# kubectl get tc -ntidbNAME READY PD STORAGE READY DESIRE TIKV STORAGE READY DESIRE TIDB READY DESIRE AGElqb True pingcap/pd:v6.1.0 12Gi 3 3 pingcap/tikv:v6.1.0 12Gi 3 3 pingcap/tidb:v6.1.0 1 1 6d21hyz True pingcap/pd:v6.5.0 12Gi 3 3 pingcap/tikv:v6.5.0 12Gi 4 4 pingcap/tidb:v6.5.0 2 2 6d5h[root@k8s-master tidb]# kubectl get pod -ntidbNAME READY STATUS RESTARTS AGEtidbngmonitoring-yz-ng-monitoring-0 1/1 Running 1 4d13hyz-discovery-68674b48b8-49vrl 1/1 Running 0 2d2hyz-pd-0 1/1 Running 0 55myz-pd-1 1/1 Running 0 55myz-pd-2 1/1 Running 0 59myz-tidb-0 2/2 Running 0 35myz-tidb-1 2/2 Running 0 38myz-tidb-initializer-b8l8f 0/1 Completed 0 35dyz-tikv-0 1/1 Running 0 39myz-tikv-1 1/1 Running 0 43myz-tikv-2 1/1 Running 0 44myz-tikv-3 1/1 Running 0 49m
如果因为 PD 配置错误、PD 镜像 tag 错误、NodeAffinity 等相关的原因,导致 PD 集群不可用,此时无法成功升级 TiDB 集群版本。这种情况下,可使用 force-upgrade
强制升级集群以恢复集群功能。
强制升级步骤如下:
[root@k8s-master tidb]# kubectl annotate --overwrite tc yz -n tidb tidb.pingcap.com/force-upgrade=truetidbcluster.pingcap.com/yz annotated
[root@k8s-master tidb]# kubectl annotate tc yz -n tidb tidb.pingcap.com/force-upgrade-tidbcluster.pingcap.com/yz annotated
完成上述步骤后,TiDB 集群功能将恢复正常,可以正常进行升级。