通过tidboperator升级tidb集群

author author     2023-02-03     499

关键词:

通过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​​。

通过TiDB

[root@k8s-master tidb]# kubectl apply -f tidb.yaml
tidbcluster.pingcap.com/lqb configured

查看升级进度

[root@k8s-master ~]# kubectl get pod -ntidb -w
NAME READY STATUS RESTARTS AGE

yz-discovery-68674b48b8-49vrl 1/1 Running 0 2d1h
yz-pd-0 1/1 Running 0 2d22h
yz-pd-1 1/1 Running 0 2d22h
yz-pd-2 1/1 Running 0 2m55s
yz-tidb-0 2/2 Running 0 2d4h
yz-tidb-1 2/2 Running 0 2d22h
yz-tidb-initializer-b8l8f 0/1 Completed 0 35d
yz-tiflash-0 4/4 Running 0 6d4h
yz-tikv-0 1/1 Running 0 2d4h
yz-tikv-1 1/1 Running 0 6d4h
yz-tikv-2 1/1 Running 2 3d
yz-tikv-3 1/1 Running 0 3d
yz-pd-1 1/1 Terminating 0 2d22h
yz-pd-2 1/1 Running 0 3m24s
yz-pd-1 0/1 Terminating 0 2d22h
yz-pd-1 0/1 Terminating 0 2d22h
yz-pd-1 0/1 Terminating 0 2d22h
yz-pd-1 0/1 Pending 0 0s
yz-pd-1 0/1 Pending 0 0s
yz-pd-1 0/1 ContainerCreating 0 0s
yz-pd-1 1/1 Running 0 1s
yz-pd-0 1/1 Terminating 0 2d22h
yz-pd-0 0/1 Terminating 0 2d22h
yz-pd-1 1/1 Running 0 21s
yz-pd-0 0/1 Terminating 0 2d22h
yz-pd-0 0/1 Terminating 0 2d22h
yz-pd-0 0/1 Pending 0 0s
yz-pd-0 0/1 Pending 0 0s
yz-pd-0 0/1 ContainerCreating 0 0s
yz-pd-0 0/1 ErrImagePull 0 20s
yz-pd-0 0/1 ImagePullBackOff 0 31s

查看集群升级是否完成

当所有 Pod 都重建完毕进入 ​​Running​​ 且TC都是True表示升级完成。

[root@k8s-master tidb]# kubectl get tc -ntidb
NAME READY PD STORAGE READY DESIRE TIKV STORAGE READY DESIRE TIDB READY DESIRE AGE
lqb True pingcap/pd:v6.1.0 12Gi 3 3 pingcap/tikv:v6.1.0 12Gi 3 3 pingcap/tidb:v6.1.0 1 1 6d21h
yz 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 -ntidb
NAME READY STATUS RESTARTS AGE
tidbngmonitoring-yz-ng-monitoring-0 1/1 Running 1 4d13h
yz-discovery-68674b48b8-49vrl 1/1 Running 0 2d2h
yz-pd-0 1/1 Running 0 55m
yz-pd-1 1/1 Running 0 55m
yz-pd-2 1/1 Running 0 59m
yz-tidb-0 2/2 Running 0 35m
yz-tidb-1 2/2 Running 0 38m
yz-tidb-initializer-b8l8f 0/1 Completed 0 35d
yz-tikv-0 1/1 Running 0 39m
yz-tikv-1 1/1 Running 0 43m
yz-tikv-2 1/1 Running 0 44m
yz-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=true
tidbcluster.pingcap.com/yz annotated

通过TiDB

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

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

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

通过TiDB

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

tidboperator扩缩容和集群的管理

一、扩缩容水平扩缩容TiDB水平扩缩容操作是指通过增加或减少pod的数量,来达到集群扩缩容的目的,扩缩容集群时,只需要修改replicas的值就可以对TiDB集群进行扩缩容操作如果要进行扩容操作,可将某个组件的replicas值调大。扩... 查看详情

tidb-使用tiup在线搭建tidb集群(代码片段)

...;TiUPcluster是TiUP提供的使用Golang编写的集群管理组件,通过TiUPcluster组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级TiDB集群,以及管理TiDB集群参数。目前TiUP可以支持部署TiDB、TiFlash... 查看详情

升级与升级后常见问题(代码片段)

本文介绍TiDB升级与升级后的常见问题与解决办法。升级常见问题本小节列出了TiDB升级相关的常见问题与解决办法。滚动升级有那些影响?滚动升级TiDB期间,业务运行会受到一定影响。因此,不建议在业务高峰期进行... 查看详情

在开发环境使用tiup安装tidb集群(代码片段)

...;TiUPcluster是TiUP提供的使用Golang编写的集群管理组件,通过TiUPcluster组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级TiDB集群;管理TiDB集群参数。目前 TiUP可以支持部署TiDB、TiFlash、Ti... 查看详情

在开发环境使用tiup安装tidb集群(代码片段)

...;TiUPcluster是TiUP提供的使用Golang编写的集群管理组件,通过TiUPcluster组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级TiDB集群;管理TiDB集群参数。目前 TiUP可以支持部署TiDB、TiFlash、Ti... 查看详情

数据库必知必会:tidb(11)tidb数据库集群安装(代码片段)

...集群安装TiDB集群的安装,需要先安装一台中控机,然后通过中控机进行集群的安装及管理。单机环境上安装集群单机环境集群式将所有节点都安装在同一台服务器上。在集群中,PD实例需要有3个,TiKV实例需要有3个,其余的实例... 查看详情

tidb区别于mysql的管理命令(代码片段)

一、集群操作#查看已有集群列表tiupclusterlist#查看某集群状态tiupclusterdisplayclustername#启动某集群某节点tiupclusterstart/stop/restartclustername-N1.2.3.4:2379,1.2.3.5:2379#扩容集群tiupclusterscale-outclusternameconfig_addr-y#升级集群tiu 查看详情

tidb区别于mysql的管理命令(代码片段)

一、集群操作#查看已有集群列表tiupclusterlist#查看某集群状态tiupclusterdisplayclustername#启动某集群某节点tiupclusterstart/stop/restartclustername-N1.2.3.4:2379,1.2.3.5:2379#扩容集群tiupclusterscale-outclusternameconfig_addr-y#升级集群tiu 查看详情

使用pingcapclinic诊断tidb集群(代码片段)

...PingCAPClinic诊断服务(以下简称为PingCAPClinic)可以通过Diag诊断客户端(以下简称为Diag)与ClinicServer云诊断平台(以下简称为ClinicServer)实现远程定位集群问题和本地快速检查集群状态。注意本文档仅适用 查看详情

tidb集群安装tidbdashboard

...。本篇文章将介绍如何在Kubernetes环境下访问TiDBDashboard。通过创建Dashboard能快速查看集群出现的问题,建议开启。一、访问TiDBDashboard方法一、使用NodePortService进行访问1.1、创建NodePort的Service[root@k8s-mastertidb]#catlqb-nodeport.yamlapiVersio... 查看详情

tidb集群的可用性详解及tikvlabel规划

...硬件的可靠性需要付出大量的成本,因此分布式系统往往通过软件来实现对于硬件的容错,通过软件来保证整体系统的高可靠性。TiDB集群中包含了串-并联系统,表决系统等,相对于一般的分布式系统更为复杂,TiDB中所保存的数... 查看详情

tidboperator+amazonwebservice,探索云原生数据库的最佳实践

作者介绍:王天宜,TiDBCommunity架构师。曾就职于FidelityInvestment,SoftbankInvestment,拥有丰富的数据库高可用方案设计经验,对TiDB、Oracle、PostgreSQL、MySQL等数据库的高可用架构与数据库生态有深入研究。如今数据... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之tidb数据库快速入门(代码片段)

...群三、连接TiDB数据库1.新开一个session以访问TiDB数据库2.通过Mysql客户端连接TiDB数据库四、清理TiDB集群环境五、TiDB数据库的用户管理1.创建用户2.删除用户3.修改用 查看详情

tiup部署tidb数据库集群

一、部署本地测试集群(Linux版本)适用场景:利用本地Mac或者单机Linux环境快速部署TiDB测试集群,体验TiDB集群的基本架构,以及TiDB、TiKV、PD、监控等基础组件的运行。1、创建tidb用户组及用户[root@tidbhome]#groupaddtidb[root@tidbhome]#u... 查看详情

tidb生产集群与加密通讯tls的辛酸苦辣-开启篇

...、背景笔者在一个银行项目中,费尽千辛万苦,好不容易通过PoC测试。就当一切准备就绪,刚准备正常上线时,就传来了噩耗:未通过行里的漏洞扫描,发现存在高危漏洞,需要马上进行修复。这可给我吓坏了,赶紧查看了行里... 查看详情