- 关于 TiDB Operator
- 快速上手
- 部署
- 自托管的 Kubernetes
- 公有云的 Kubernetes
- 在 ARM64 机器上部署 TiDB 集群
- 部署 TiDB HTAP 存储引擎 TiFlash
- 跨多个 Kubernetes 集群部署 TiDB 集群
- 部署 TiDB 异构集群
- 部署增量数据同步工具 TiCDC
- 部署 Binlog 收集工具
- 监控与告警
- 数据迁移
- 运维管理
- 安全
- 扩缩容
- 升级
- 升级 TiDB 集群
- 升级 TiDB Operator
- 备份与恢复
- 备份与恢复简介
- 备份与恢复 CR 介绍
- 远程存储访问授权
- 使用 Amazon S3 兼容的存储
- 使用 Google Cloud Storage
- 使用持久卷
- 运维
- 灾难恢复
- 故障诊断
- 常见问题
- 参考
- 版本发布历史
- v1.2
- v1.1
- v1.0
- v0
为使用云存储的 TiDB 集群更换节点
本文介绍一种在不停机情况下为使用云存储的 TiDB 集群更换、升级节点的方法。你可以为 TiDB 集群更换更高节点规格,也可以为节点升级新版本 Kubernetes。
本文以 Amazon EKS
为例,介绍了如何创建新的节点组,然后使用滚动重启迁移 TiDB 集群到新节点组,用于 TiKV 或者 TiDB 更换计算资源更多的节点组,EKS 升级等场景。
前置条件
- 云上已经存在一个 TiDB 集群。如果没有,可参考 Amazon EKS 进行部署。
- TiDB 集群使用云存储作为数据盘。
第一步:创建新的节点组
找到 TiDB 集群所在的 EKS 集群的配置文件
cluster.yaml
,将其拷贝保存为cluster-new.yaml
。在
cluster-new.yaml
中加入新节点组tidb-1b-new
、tikv-1a-new
:apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: your-eks-cluster region: ap-northeast-1 nodeGroups: ... - name: tidb-1b-new desiredCapacity: 1 privateNetworking: true availabilityZones: ["ap-northeast-1b"] instanceType: c5.4xlarge labels: dedicated: tidb taints: dedicated: tidb:NoSchedule - name: tikv-1a-new desiredCapacity: 1 privateNetworking: true availabilityZones: ["ap-northeast-1a"] instanceType: r5b.4xlarge labels: dedicated: tikv taints: dedicated: tikv:NoSchedule
注意availabilityZones
需要和要替换的节点组保持一致。- 本例仅以
tidb-1b-new
、tikv-1a-new
节点组为例,请自行配置参数。
如果要升级节点规格,修改
instanceType
。如果要升级节点 Kubernetes 版本,请先升级Kubernetes Control Plane
版本,可以参考更新集群从
cluster-new.yaml
中删除要更换的原节点组。本例中删除
tidb-1b
、tikv-1a
节点组,请根据情况自行删除。从
cluster.yaml
中删除无需更换的节点组,保留要更换的原节点组,这些节点组将从集群中被删除。本例中留下
tidb-1b
、tikv-1a
节点组,删除其他节点组。请根据情况自行调整。执行以下命令,创建新的节点组:
eksctl create nodegroup -f cluster_new.yml
注意该命令只创建新的节点组,已经存在的节点组会忽略,不会重复创建,更不会删除不存在的节点组。
执行下面命令,确认新节点已加入:
kubectl get no -l alpha.eksctl.io/nodegroup-name=${new_nodegroup1} kubectl get no -l alpha.eksctl.io/nodegroup-name=${new_nodegroup2} ...
其中
${new_nodegroup}
是新节点组名称,本例中是tidb-1b-new
、tikv-1a-new
,请根据情况自行调整。
第二步:标记原节点组的节点为不可调度
使用 kubectl cordon
命令标记原节点组节点为不可调度,防止新的 Pod 调度上去:
kubectl cordon -l alpha.eksctl.io/nodegroup-name=${origin_nodegroup1}
kubectl cordon -l alpha.eksctl.io/nodegroup-name=${origin_nodegroup2}
...
其中 ${origin_nodegroup}
是原节点组名称,本例中是 tidb-1b
、tikv-1a
,请根据情况自行调整。
第三步:滚动重启 TiDB 集群
参考重启 Kubernetes 上的 TiDB 集群滚动重启 TiDB 集群。
第四步:删除原来节点组
通过下面命令确认是否有 TiDB/PD/TiKV Pod 遗留在原节点组节点上:
kubectl get po -n ${namespace} -owide
确认没有 TiDB/PD/TiKV Pod 遗留后,运行下面命令删除原节点组:
eksctl delete nodegroup -f cluster.yaml --approve