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

CLI (python-troveclient)

支持以下现有的 CLI 调用。

  • cluster-grow

  • cluster-shrink

不需要进行任何更改即可完成这些操作。

内部 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)

待定 (在批准后添加的部分)

实现

负责人

名称

Launchpad ID

IRC

Email

Craig Vyvial

cp16net

cp16net

cp16net@gmail.com

里程碑

目标里程碑:Mitaka

工作项

这项工作将分为两个单独的项目。

  • 扩展集群(将新实例添加到集群)

  • 缩减集群(从集群中删除实例)

升级影响

在调用扩展或缩减 API 调用之前,必须更新现有集群实例上的 guestagent。否则,集群可能会陷入 GROWING_CLUSTER 或 SHRINKING_CLUSTER 状态,因为 guestagent 将没有支持扩展或缩减集群的调用。

依赖项

测试

将有单元测试来测试策略的新调用。

将有集成测试,将测试扩展和缩减集群功能。

文档影响

我们需要更新文档,以显示对 pxc 管理器的扩展和缩减集群的支持。

附录