暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手动扩缩容 Kubernetes 上的 TiDB 集群

PingCAP 2023-07-13
144

本文介绍如何对部署在 Kubernetes 上的 TiDB 集群进行手动水平扩缩容和垂直扩缩容。

水平扩缩容

TiDB 水平扩缩容操作指的是通过增加或减少 Pod 的数量,来达到集群扩缩容的目的。扩缩容 TiDB 集群时,会按照填入的 replicas 值,对 PD、TiKV、TiDB 按顺序进行扩缩容操作。

  • 如果要进行扩容操作,可将某个组件的 replicas调大 。扩容操作会按照 Pod 编号由小到大增加组件 Pod,直到 Pod 数量与 replicas 值相等。
  • 如果要进行缩容操作,可将某个组件的 replicas调小 。缩容操作会按照 Pod 编号由大到小删除组件 Pod,直到 Pod 数量与 replicas 值相等。

水平扩缩容 PD、TiKV、TiDB

如果要对 PD、TiKV、TiDB 进行水平扩缩容,可以使用 kubectl 修改集群所对应的 TidbCluster 对象中的 spec.pd.replicasspec.tikv.replicasspec.tidb.replicas 至期望值。

  1. 按需修改 TiDB 集群组件的 replicas 值。例如,执行以下命令可将 PD 的 replicas 值设置为 3:
kubectl patch -n ${namespace} tc ${cluster_name} --type merge --patch '{"spec":{"pd":{"replicas":3}}}'
  1. 查看 Kubernetes 集群中对应的 TiDB 集群是否更新到了你期望的配置。
kubectl get tidbcluster ${cluster_name} -n ${namespace} -oyaml
  1. 上述命令输出的 TidbCluster 中, spec.pd.replicasspec.tidb.replicasspec.tikv.replicas 的值预期应与你之前配置的值一致。
  2. 观察 TidbCluster Pod 是否新增或者减少。
watch kubectl -n ${namespace} get pod -o wide
  1. PD 和 TiDB 通常需要 10 到 30 秒左右的时间进行扩容或者缩容。
  2. TiKV 组件由于涉及到数据搬迁,通常需要 3 到 5 分钟来进行扩容或者缩容。

水平扩缩容 TiFlash

如果你部署了 TiFlash,想对 TiFlash 进行水平扩缩容,请参照本小节的步骤进行操作。

水平扩容 TiFlash

如果要对 TiFlash 进行水平扩容,可以通过修改 spec.tiflash.replicas 来实现。例如,执行以下命令可将 TiFlash 的 replicas 值设置为 3:

kubectl patch -n ${namespace} tc ${cluster_name} --type merge --patch '{"spec":{"tiflash":{"replicas":3}}}'

水平缩容 TiFlash

如果要对 TiFlash 进行水平缩容,执行以下步骤:

  1. 通过 port-forward 暴露 PD 服务:
kubectl port-forward -n ${namespace} svc/${cluster_name}-pd 2379:2379
  1. 打开一个 终端标签或窗口,通过如下命令确认开启 TiFlash 的所有数据表的最大副本数 N:
curl 127.0.0.1:2379/pd/api/v1/config/rules/group/tiflash | grep count
  1. 输出结果中 count 的最大值就是所有数据表的最大副本数 N。
  2. 回到 port-forward 命令所在窗口,按 Ctrl + C 停止 port-forward
  3. 如果缩容 TiFlash 后,TiFlash 集群剩余 Pod 数大于等于所有数据表的最大副本数 N,则直接进行下面第 6 步。如果缩容 TiFlash 后,TiFlash 集群剩余 Pod 数小于所有数据表的最大副本数 N,则执行以下步骤:
    1. 参考 访问 TiDB 集群 的步骤连接到 TiDB 服务。

    2. 针对所有副本数大于集群剩余 TiFlash Pod 数的表执行如下命令:

    3. alter table <db_name>.<table_name> set tiflash replica ${pod_number};
    4. ${pod_number} 为缩容 TiFlash 后,TiFlash 集群的剩余 Pod 数。

  4. 等待并确认相关表的 TiFlash 副本数更新。
  5. 连接到 TiDB 服务,执行如下命令,查询相关表的 TiFlash 副本数:
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '<db_name>' and TABLE_NAME = '<table_name>';
  1. 修改 spec.tiflash.replicas 对 TiFlash 进行缩容。
  2. 你可以通过以下命令查看 Kubernetes 集群中对应的 TiDB 集群中的 TiFlash 是否更新到了你的期望定义。检查以下命令输出内容中, spec.tiflash.replicas 的值是否符合预期值。
kubectl get tidbcluster ${cluster-name} -n ${namespace} -oyaml

水平扩缩容 TiCDC

如果集群中部署了 TiCDC,可以通过修改 spec.ticdc.replicas 对 TiCDC 进行扩缩容。例如,执行以下命令可将 TiCDC 的 replicas 值设置为 3:

kubectl patch -n ${namespace} tc ${cluster_name} --type merge --patch '{"spec":{"ticdc":{"replicas":3}}}'

查看集群水平扩缩容状态

watch kubectl -n ${namespace} get pod -o wide

当所有组件的 Pod 数量都达到了预设值,并且都进入 Running 状态后,水平扩缩容完成。

垂直扩缩容

垂直扩缩容操作指的是通过增加或减少 Pod 的资源限制,来达到集群扩缩容的目的。垂直扩缩容本质上是 Pod 滚动升级的过程。

垂直扩缩容各组件

本小节介绍如何对 PD、TiKV、TiDB、TiFlash、TiCDC 进行垂直扩缩容。

  • 如果要对 PD、TiKV、TiDB 进行垂直扩缩容,通过 kubectl 修改集群所对应的 TidbCluster 对象的 spec.pd.resourcesspec.tikv.resourcesspec.tidb.resources 至期望值。
  • 如果要对 TiFlash 进行垂直扩缩容,修改 spec.tiflash.resources 至期望值。
  • 如果要对 TiCDC 进行垂直扩缩容,修改 spec.ticdc.resources 至期望值。

查看垂直扩缩容进度

watch kubectl -n ${namespace} get pod -o wide

当所有 Pod 都重建完毕进入 Running 状态后,垂直扩缩容完成。

扩缩容故障诊断

无论是水平扩缩容、或者是垂直扩缩容,都可能遇到资源不够时造成 Pod 出现 Pending 的情况。可以参考 Pod 处于 Pending 状态 来进行处理。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论