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

本文介绍一种在不停机情况下为使用本地存储的 TiDB 集群更换、升级节点的方法。

注意

前置条件

第一步:克隆原 TiDB 集群配置

  1. 执行以下命令,导出克隆集群文件 tidb-cluster-clone.yaml

     

    kubectl get tidbcluster ${origin_cluster_name} -n ${namespace} -oyaml > tidb-cluster-clone.yaml

    其中 ${origin_cluster_name} 是原集群名字,${namespace} 是原集群命名空间。

  2. 修改 tidb-cluster-clone.yaml,让新克隆集群加入原 TiDB 集群:

     

    kind: TidbCluster metadata: name: ${clone_cluster_name} spec: cluster: name: ${origin_cluster_name} ...

    其中 ${clone_cluster_name} 是克隆集群的新名字,${origin_cluster_name} 是原集群名字。

第二步:为克隆集群签发证书

如果原集群开启了 TLS,你需要为克隆集群签发证书。如果原集群没有开启 TLS,请忽略此步骤,直接执行第三步。

使用 cfssl 系统签发

如果你使用 cfssl,必须使用和原集群相同的 CA (Certification Authority) 颁发。你需要执行使用 cfssl 系统颁发证书文档中 5~7 步,完成新集群组件间证书签发。

使用 cert-manager 系统签发

如果你使用 cert-manager,必须使用和原集群相同的 Issuer (${cluster_name}-tidb-issuer) 来创建 Certificate。你需要执行使用 cert-manager 系统颁发证书文档中第 3 步,完成新集群组件间证书签发。

第三步:标记需要更换的节点为不可调度

使用 kubectl cordon 命令把需要更换的节点标记为不可调度,防止新的 Pod 调度上去:

 

kubectl cordon ${replace_nodename1} ${replace_nodename2} ...

第四步:创建克隆 TiDB 集群

  1. 执行以下命令,创建克隆集群:

     

    kubectl apply -f tidb-cluster-clone.yaml

  2. 确认克隆 TiDB 集群与原 TiDB 集群组成的新集群正常运行:

    • 获取新集群 store 个数、状态:

       

      # store 个数 pd-ctl -u http://<address>:<port> store | jq '.count' # store 状态 pd-ctl -u http://<address>:<port> store | jq '.stores | .[] | .store.state_name'

    • 通过 MySQL 客户端访问 Kubernetes 上的 TiDB 集群

第五步:缩容原集群 TiDB 节点

将原集群的 TiDB 节点缩容至 0 个,参考水平扩缩容一节。

注意

若通过负载均衡或数据库访问层中间件的方式接入原 TiDB 集群,则需要在缩容原集群 TiDB 之前,先修改配置,将业务流量迁移至目标 TiDB 集群,避免影响业务。

第六步:缩容原集群 TiKV 节点

将原集群的 TiKV 节点缩容至 0 个,参考水平扩缩容一节。

第七步:缩容原集群 PD 节点

将原集群的 PD 节点缩容至 0 个,参考水平扩缩容一节。

第八步:删除克隆集群中 spec.cluster 字段

执行以下命令,删除克隆集群中 spec.cluster 字段:

 

kubectl patch -n ${namespace} tc ${clone_cluster_name} --type=json -p '[{"op":"remove", "path":"/spec/cluster"}]'

其中 ${namespace} 是克隆集群的命名空间(不变),${clone_cluster_name} 是克隆集群名字。

第九步:删除原 TiDB 集群、数据、节点

  1. 删除原集群 TidbCluster

     

    kubectl delete -n ${namespace} tc ${origin_cluster_name}

    其中 ${namespace} 是原集群的命名空间(不变),${origin_cluster_name} 是原集群名字。

  2. 删除原集群数据,请参考删除 PV 以及对应的数据一节。

  3. 将需要更换的节点从 Kubernetes 集群中删除:

     

    kubectl delete node ${replace_nodename1} ${replace_nodename2} ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

每天读点书学堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值