为使用云存储的 TiDB 集群更换节点

本文详细介绍了如何在不中断服务的情况下,为使用云存储的TiDB集群更换更高规格节点或升级Kubernetes版本。首先创建新的节点组,接着标记原节点为不可调度,然后滚动重启TiDB集群,最后删除旧节点组。此方法适用于AmazonEKS,同时也提供了其他云环境的操作参考。
摘要由CSDN通过智能技术生成

本文介绍一种在不停机情况下为使用云存储的 TiDB 集群更换、升级节点的方法。你可以为 TiDB 集群更换更高节点规格,也可以为节点升级新版本 Kubernetes。

本文以 Amazon EKS 为例,介绍了如何创建新的节点组,然后使用滚动重启迁移 TiDB 集群到新节点组,用于 TiKV 或者 TiDB 更换计算资源更多的节点组,EKS 升级等场景。

注意

其它公有云环境请参考GCP GKEAzure AKS阿里云 ACK 操作节点组。

前置条件

  • 云上已经存在一个 TiDB 集群。如果没有,可参考 Amazon EKS 进行部署。
  • TiDB 集群使用云存储作为数据盘。

第一步:创建新的节点组

  1. 找到 TiDB 集群所在的 EKS 集群的配置文件 cluster.yaml,将其拷贝保存为 cluster-new.yaml

  2. 在 cluster-new.yaml 中加入新节点组 tidb-1b-newtikv-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-newtikv-1a-new 节点组为例,请自行配置参数。

    如果要升级节点规格,修改 instanceType。如果要升级节点 Kubernetes 版本,请先升级 Kubernetes Control Plane 版本,可以参考更新集群

  3. 从 cluster-new.yaml 中删除要更换的原节点组。

    本例中删除 tidb-1btikv-1a 节点组,请根据情况自行删除。

  4. 从 cluster.yaml 中删除无需更换的节点组,保留要更换的原节点组,这些节点组将从集群中被删除。

    本例中留下 tidb-1btikv-1a 节点组,删除其他节点组。请根据情况自行调整。

  5. 执行以下命令,创建新的节点组:

     

    eksctl create nodegroup -f cluster_new.yml

    注意

    该命令只创建新的节点组,已经存在的节点组会忽略,不会重复创建,更不会删除不存在的节点组。

  6. 执行下面命令,确认新节点已加入:

     

    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-newtikv-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-1btikv-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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天读点书学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值