Kubernetes 上的 TiDB 集群扩缩容
本文介绍 TiDB 在 Kubernetes 中如何进行水平扩缩容和垂直扩缩容。
水平扩缩容
TiDB 水平扩缩容操作指的是通过增加或减少节点的数量,来达到集群扩缩容的目的。扩缩容 TiDB 集群时,会按照填入的 replicas 值,对 PD、TiKV、TiDB 进行顺序扩缩容操作。扩容操作按照节点编号由小到大增加节点,缩容操作按照节点编号由大到小删除节点。目前 TiDB 集群使用 TidbCluster Custom Resource (CR) 管理方式。
扩缩容 PD、TiDB、TiKV
使用 kubectl 修改集群所对应的 TidbCluster
对象中的 spec.pd.replicas
、spec.tidb.replicas
、spec.tikv.replicas
至期望值。
同样,你可以使用以下命令在线修改 Kubernetes 集群中的 TidbCluster
定义。
kubectl edit tidbcluster ${cluster_name} -n ${namespace}
你可以通过以下指令查看 Kubernetes 集群中对应的 TiDB 集群是否更新到了你的期望定义。
kubectl get tidbcluster ${cluster_name} -n ${namespace} -oyaml
如果上述指令输出的 TidbCluster
中,spec.pd.replicas
、spec.tidb.replicas
、spec.tikv.replicas
的值和你之前更新的值一致,那么可以通过以下指令来观察 TidbCluster
Pod 是否新增或者减少。对于 PD 和 TiDB 而言,会需要 10 到 30 秒左右的时间进行扩容或者缩容。对于 TiKV 组件,由于涉及到数据搬迁,可能会需要 3 到 5 分钟来进行扩容或者缩容。
watch kubectl -n ${namespace} get pod -o wide
扩容 TiFlash
如果集群中部署了 TiFlash,可以通过修改 spec.tiflash.replicas
对 TiFlash 进行扩容。
扩缩容 TiCDC
如果集群中部署了 TiCDC,可以通过修改 spec.ticdc.replicas
对 TiCDC 进行扩缩容。
缩容 TiFlash
通过
port-forward
暴露 PD 服务:kubectl port-forward -n ${namespace} svc/${cluster_name}-pd 2379:2379打开一个新终端标签或窗口,通过如下命令确认开启 TiFlash 的所有数据表的最大副本数 N:
curl 127.0.0.1:2379/pd/api/v1/config/rules/group/tiflash | grep count输出结果中
count
的最大值就是所有数据表的最大副本数 N。回到
port-forward
命令所在窗口,按 Ctrl+C 停止port-forward
。如果缩容 TiFlash 后,TiFlash 集群剩余 Pod 数大于等于所有数据表的最大副本数 N,直接进行下面第 6 步。如果缩容 TiFlash 后,TiFlash 集群剩余 Pod 数小于所有数据表的最大副本数 N,参考访问 TiDB 集群的步骤连接到 TiDB 服务,并针对所有副本数大于集群剩余 TiFlash Pod 数的表执行如下命令:
alter table <db_name>.<table_name> set tiflash replica 0;等待相关表的 TiFlash 副本被删除。
连接到 TiDB 服务,执行如下命令,查不到相关表的同步信息时即为副本被删除:
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '<db_name>' and TABLE_NAME = '<table_name>';修改
spec.tiflash.replicas
对 TiFlash 进行缩容。你可以通过以下指令查看 Kubernetes 集群中对应的 TiDB 集群中的 TiFlash 是否更新到了你的期望定义。检查以下指令输出内容中,
spec.tiflash.replicas
的值是否符合预期值。kubectl get tidbcluster ${cluster-name} -n ${namespace} -oyaml
查看集群水平扩缩容状态
watch kubectl -n ${namespace} get pod -o wide
当所有组件的 Pod 数量都达到了预设值,并且都进入 Running
状态后,水平扩缩容完成。
水平扩缩容故障
无论是水平扩缩容、或者是垂直扩缩容,都可能遇到资源不够时造成 Pod 出现 Pending 的情况。可以参考 Pod 处于 Pending 状态。
垂直扩缩容
垂直扩缩容操作指的是通过增加或减少节点的资源限制,来达到集群扩缩容的目的。垂直扩缩容本质上是节点滚动升级的过程。目前 TiDB 集群使用 TidbCluster Custom Resource (CR) 管理方式。
垂直扩缩容操作
通过 kubectl 修改集群所对应的 TidbCluster
对象的 spec.pd.resources
、spec.tikv.resources
、spec.tidb.resources
至期望值。
如果集群中部署了 TiFlash,可以通过修改 spec.tiflash.resources
对 TiFlash 进行垂直扩缩容。
如果集群中部署了 TiCDC,可以通过修改 spec.ticdc.resources
对 TiCDC 进行垂直扩缩容。
查看垂直扩缩容进度
watch kubectl -n ${namespace} get pod -o wide
当所有 Pod 都重建完毕进入 Running
状态后,垂直扩缩容完成。
垂直扩缩容故障
无论是水平扩缩容、或者是垂直扩缩容,都可能遇到资源不够时造成 Pod 出现 Pending 的情况。可以参考 Pod 处于 Pending 状态。