【世界時快訊】通過TiDB Operator升級TiDB集群

2023-02-03 12:12:36 來源:51CTO博客


(相關(guān)資料圖)

通過TiDB Operator來部署管理Kubernete上的TiDB集群,可以通過滾動更新來升級TiDB集群的版本,來減少對業(yè)務(wù)的影響。本文介紹如何使用滾動更新來升級 Kubernetes 上的 TiDB 集群。

滾動更新功能介紹

Kubernetes 提供了??滾動更新功能??,在不影響應(yīng)用可用性的前提下執(zhí)行更新。

使用滾動更新時,TiDB Operator 會按 PD、TiFlash、TiKV、TiDB 的順序,串行地刪除舊版本的 Pod,并創(chuàng)建新版本的 Pod。當(dāng)新版本的 Pod 正常運(yùn)行后,再處理下一個 Pod。

滾動更新中,TiDB Operator 會自動處理 PD 和 TiKV 的 Leader 遷移。因此,在多節(jié)點的部署拓?fù)湎拢ㄗ钚…h(huán)境:PD \* 3、TiKV \* 3、TiDB \* 2),滾動更新 TiKV、PD 不會影響業(yè)務(wù)正常運(yùn)行。對于有連接重試功能的客戶端,滾動更新 TiDB 同樣不會影響業(yè)務(wù)。

??注意事項??

??對于無法進(jìn)行連接重試的客戶端,滾動更新 TiDB 會導(dǎo)致連接到被關(guān)閉節(jié)點的數(shù)據(jù)庫的連接失效,造成部分業(yè)務(wù)請求失敗。對于這類業(yè)務(wù),推薦在客戶端添加重試功能,或者在低峰期進(jìn)行 TiDB 的滾動更新操作。????升級前,請參考????文檔????確認(rèn)沒有正在進(jìn)行的 DDL 操作。??

升級步驟

在TidbCluster中通過修改升級集群組件的鏡像配置,一般修改??spec.version??即可,如果要為集群內(nèi)不同組件設(shè)置不同的版本,修改 ??spec、.version??。

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

查看升級進(jìn)度

[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

查看集群升級是否完成

當(dāng)所有 Pod 都重建完畢進(jìn)入 ??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

升級出現(xiàn)故障解決方法

如果因為 PD 配置錯誤、PD 鏡像 tag 錯誤、NodeAffinity 等相關(guān)的原因,導(dǎo)致 PD 集群不可用,此時無法成功升級 TiDB 集群版本。這種情況下,可使用 ??force-upgrade?? 強(qiáng)制升級集群以恢復(fù)集群功能。

強(qiáng)制升級步驟如下:

為集群設(shè)置annotation,并進(jìn)行查看

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

修改 PD 相關(guān)配置,確保 PD 進(jìn)入正常狀態(tài)。

修復(fù) PD 配置后,刪除剛才強(qiáng)制升級功能,否則下次升級過程可能會出現(xiàn)異常:

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

完成上述步驟后,TiDB 集群功能將恢復(fù)正常,可以正常進(jìn)行升級。

標(biāo)簽: 強(qiáng)制升級 不會影響 正常運(yùn)行

上一篇:
下一篇: