
(相關(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 操作。?
??spec.version?
?即可,如果要為集群內(nèi)不同組件設(shè)置不同的版本,修改 ??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
當(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
如果因為 PD 配置錯誤、PD 鏡像 tag 錯誤、NodeAffinity 等相關(guān)的原因,導(dǎo)致 PD 集群不可用,此時無法成功升級 TiDB 集群版本。這種情況下,可使用 ??force-upgrade?
? 強(qiáng)制升級集群以恢復(fù)集群功能。
強(qiáng)制升級步驟如下:
[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 集群功能將恢復(fù)正常,可以正常進(jìn)行升級。
標(biāo)簽: 強(qiáng)制升級 不會影響 正常運(yùn)行