写点什么

通过 TiDB Operator 升级 TiDB 集群

  • 2023-01-13
    北京
  • 本文字数:3005 字

    阅读完需:约 10 分钟

作者: lqbyz 原文来源:https://tidb.net/blog/7ecfecd2


通过 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 操作。

升级步骤

在 TidbCluster 中通过修改升级集群组件的镜像配置, 一般修改spec.version即可,如果要为集群内不同组件设置不同的版本,修改 spec、<pd/tidb/tikv/pump/tiflash/ticdc>.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   AGE
yz-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 强制升级集群以恢复集群功能。


强制升级步骤如下:

为集群设置 annotation,并进行查看

[root@k8s-master tidb]# kubectl annotate --overwrite tc yz -n tidb tidb.pingcap.com/force-upgrade=truetidbcluster.pingcap.com/yz annotated
复制代码


修改 PD 相关配置,确保 PD 进入正常状态。

修复 PD 配置后,删除刚才强制升级功能,否则下次升级过程可能会出现异常:

[root@k8s-master tidb]# kubectl annotate tc yz -n tidb tidb.pingcap.com/force-upgrade-tidbcluster.pingcap.com/yz annotated
复制代码



完成上述步骤后,TiDB 集群功能将恢复正常,可以正常进行升级。


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
通过TiDB Operator升级TiDB集群_集群管理_TiDB 社区干货传送门_InfoQ写作社区