Percona XtraDB 集群扩展和缩减支持¶
对于 Percona XtraDB 集群 (pxc) 数据存储,我们需要具备扩展和缩减集群的能力。这将为我们目前拥有的 pxc 解决方案添加这两个核心功能。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/pxc-grow-shrink-cluster
问题描述¶
PXC 缺乏对扩展和缩减集群的支持。这将允许用户在集群中创建一个新实例,并从集群中删除一个现有实例。
一个示例用例是,如果集群中的一个实例由于底层硬件、网络或其他问题而出现故障,用户可以删除该实例并创建一个新的实例,以保持集群的正常运行。
提议的变更¶
PXC 将使用现有的扩展和缩减 API 调用,并将其实现用于 pxc 管理器。此更改将允许集群在需要扩展或缩减集群时是异构的。异构集群意味着并非每个实例的 flavor 和 volume 都相同。
扩展的要求
集群中的新实例可以是任何有效的 flavor 大小。
集群中的新实例必须具有与集群中实例的最小大小相同或更大的 volume。这是为了确保在集群中创建的新实例具有足够的 volume 空间,可以与集群中的其他实例一起运行。
配额验证,以确保用户在其帐户中具有扩展集群所需的实例数量和 volume 空间。
缩减的要求
为了缩减集群,集群中必须至少有 2 个实例。集群实例数量必须至少为 1 才能运行。
为了使扩展正常工作,需要一些新的 guestagent API 调用。
PXC 在给定现有集群中一个节点的 IP 地址时,会自动处理加入集群。在给定现有集群实例的所有 IP 地址时,PXC 将按顺序尝试连接列表中的 IP 地址,并尝试加入集群。如果列表中的一个实例未启动(崩溃、网络或其他问题),则 PXC 将尝试列表中的下一个 IP 地址。这将帮助用户将新实例加入集群,以便他们可以缩减或删除出现问题的实例。
配置¶
预计不会进行任何配置更改。
数据库¶
无
公共 API¶
以下公共 API 调用将提供给 PXC 数据存储。
集群扩展 - 现有的调用 payload 将不会更改。实现集群扩展功能会将新实例添加到现有集群中。
集群缩减 - 现有的调用 payload 将不会更改。实现集群缩减功能将允许用户从其现有集群中删除实例。
公共 API 安全¶
无
Python API¶
无
内部 API¶
需要进行一些新的 guestagent 调用,以从现有集群中的实例获取数据,并更新现有实例上的集群配置。1
扩展集群或将新实例添加到集群的过程
首先将集群状态设置为 GROWING
启动一个新的 pxc 实例。
一旦实例启动,我们从集群中的一个实例获取现有集群的配置设置。这些设置包括集群名称、复制设置和现有集群的 IP 地址。
一旦在新实例上设置了配置,我们就启动每个实例上的 mysql。新实例通过设置的 IP 地址和集群名称找到集群。
在新的实例上启动 mysql 后,集群识别集群中的新实例。
此时,集群处于良好状态,但为了能够帮助恢复或重新启动集群中的实例,我们将一个新的配置推送到所有实例,其中包括新实例的新 IP 地址。
在集群中的所有实例都具有新的配置后,无需再次重新启动 mysql 进程,因为集群已经识别了集群中的所有实例。
然后我们将集群的任务状态设置为 complete 或 NONE。
缩减集群的过程是从集群中删除给定的实例
首先我们将任务状态设置为 SHRINKING。
然后停止给定实例上的 mysql
然后删除这些实例。
接下来,集群中的现有实例需要更新其配置,以匹配集群的当前状态。这将仅涉及更新集群中当前实例的 IP 地址。
在此之后无需重新启动,因为集群自动了解集群中的活动实例。配置更新是为了日后恢复和重新启动时使用。
完成配置更新后,我们可以将集群的任务状态重置为 completed 或 NONE。
Guest Agent¶
如 Internal API 部分所述,将有一些新的 guestagent 调用来支持扩展和缩减。
添加到 Guest Agent 的方法
write_cluster_configuration_overrides - 此方法将写入更新的集群配置更改,这些更改是集群扩展或缩减所必需的。
get_cluster_context - 此方法将返回当前集群的上下文。上下文是用于将新实例连接到现有集群设置的信息。上下文包括集群设置和复制设置。
为了完成此操作,将不会弃用任何调用。
备选方案¶
不支持扩展和缩减 pxc 集群。
Dashboard 影响 (UX)¶
待定 (在批准后添加的部分)
升级影响¶
在调用扩展或缩减 API 调用之前,必须更新现有集群实例上的 guestagent。否则,集群可能会陷入 GROWING_CLUSTER 或 SHRINKING_CLUSTER 状态,因为 guestagent 将没有支持扩展或缩减集群的调用。
依赖项¶
无
文档影响¶
我们需要更新文档,以显示对 pxc 管理器的扩展和缩减集群的支持。
附录¶
无