本文将主要介绍如何在 Kubernetes 上,通过 PolarDB-X Operator 实现 PolarDB-X 数据库集群的弹性扩缩容。

关于如何用 Kubernetes安装PolarDB-X,请您移步上一篇博客中获取:

​​​https://blog.51cto.com/yangjunfeng/5383036​

我们这里放一张 PolarDB-X Operator的图

Polardb训练营-Polardb-X集群做动态扩缩容_polardb

其中数据库集群核心结构有如下几个主要组件:

GMS ,全局元数据服务,负责存放集群的所有元数据

DN,数据节点,负责数据的存储和本地数据的部分计算

CN,计算节点,负责处理用户流量(SQL)

CDC,日志节点,负责消费并整合所有数据节点的 binlog 并生成全局的 binlog 由此可知,GMS 和 DN 是有状态的服务,而 CN 和 CDC 是无状态的服务。这里我们主要理解有状态和无状态服务。会对下面的扩缩容有所帮助。

扩缩容原理

从组件上,我们可以将PolarDB-X集群的扩缩容能力简单拆分为以下3种:

增加、减少 CN 的节点,以增加或缩减计算能力

增加、减少 DN 的节点,以增加或缩减存储能力

增加、减少 CDC 的节点,以增加或缩减日志处理能力

Polardb训练营-Polardb-X集群做动态扩缩容_PolarDB_02

Polardb训练营-Polardb-X集群做动态扩缩容_数据库集群_03

扩容

申请一个新的CN节点--无状态服务

对于DN有状态的,需要新建一个DN1节点。

对dn0上的数据进行计算,需要迁移,需要计算哪些数据移动到DN1,迁移过程中,所有的流量还是访问dn0.等dn1完全迁移完成后和dn0完全一致,发起cn切流。这样流量到dn1.完成扩容。

缩容

多出来的CN节点,做下线操作就行--无状态的

dn有状态的,将dn1下掉,保留dn0.

dn1,所有数据迁移到dn0

迁移完成后,切流。将dn1的,切刀dn0,等待完全没有流量后,将dn1完全下掉。

我们通过一下演示,带大家粗浅的认识一下相关的扩缩容步骤,注意观察配置文件中的个数以及相关的状态。

我们先部署一下pol-x的集群,编辑一个yaml文件,主要定义了CN\DN\GMS\CDC四要素

Polardb训练营-Polardb-X集群做动态扩缩容_PolarDB_04

这样一个 yaml 声明了它拥有 1个 CN 节点、1 个 DN 节点和 1个 CDC 节点。当用户使用 kubectl 将该 yaml 应用到 Kubernetes 集群时,operator 会接收到通知并进行创建和维护工作,这个过程称为 reconcile loop。Operator 的工作模式也被称为 Operator Pattern,它的过程是通过观测 - 调整 -观测的循环来不断逼近或达成用户描述的期望状态。

Polardb训练营-Polardb-X集群做动态扩缩容_数据_05

如上我们可以观察到polardb-x集群PHASE列表状态,变成了running状态,我们还是编辑yaml文件,进行节点的扩容操作。replicas参数设定为2

Polardb训练营-Polardb-X集群做动态扩缩容_polardb_06

Polardb训练营-Polardb-X集群做动态扩缩容_PolarDB_07

我们的节点数量由1变成了2,PolarDB-X Operator 在扩容的时候也集成了数据均衡的能力,原理同缩容是一样的。在数据节点创建完成之后,operator 通过下述方式去完成数据均衡: 同时 operator 会观测数据均衡进度,并更新到PolarDB-X Cluster 的状态中。集成了数据自均衡的PolarDB-X Operator可以提供一个更加完整、易用、可观测的扩缩容能力。

Polardb训练营-Polardb-X集群做动态扩缩容_数据_08

这里是将PolarDB-X集群的端口转发到本地的3306端口。我们此时另外开启一个session进行链接

Polardb训练营-Polardb-X集群做动态扩缩容_元数据_09

可以看见PolarDB-X集群扩容后的状态。接下来,我们对其进行缩容

Polardb训练营-Polardb-X集群做动态扩缩容_polardb_10

还是将配置文件中的replicas改为1

Polardb训练营-Polardb-X集群做动态扩缩容_数据_11

Polardb训练营-Polardb-X集群做动态扩缩容_数据库集群_12

我们再次观察集群的状态。

弹性能力是分布式系统的基础能力之一,这里主要介绍了基于Kubernetes的PolarDB-X 集群的弹性扩缩容的实现原理和细节。