Percona XtraDB 集群 Root 启用¶
目录
对于 Percona XtraDB 集群 (PXC) 数据存储,我们需要能够启用 root 权限,以便能够使用特权用户管理数据存储。例如,为了将 PXC 数据存储集群与 Cloud Foundry 集成,需要一个 root 用户来自动管理集群上的数据库用户和数据库。这将为我们当前拥有的 PXC 解决方案添加 root 启用功能。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/pxc-root-enable
提议的变更¶
PXC 将使用现有的 root 启用 API 调用。此变更将允许集群在集群内部启用 root 权限。该调用会将 root 用户和密码应用于集群中的单个节点,由于集群会复制到其他节点,因此它们将获得相同的 root 用户和密码设置。
Root 启用的要求
针对集群资源的 root 启用 API 应该将 root 凭据应用于集群。
用户应该能够使用 root 用户和密码连接到集群中的任何实例来管理数据存储。
PXC 需要扩展现有的 root 启用调用到其集群数据存储实现中,因为当前 root 启用调用在对集群调用 root 启用时会引发异常,因为大多数数据存储不支持此功能。这将需要对 guestagent 进行配置更改,如下面所述。
此变更仅涉及将现有功能添加到 PXC 数据存储,而不更改其他数据存储的现有功能。它不会在集群创建时添加 root 启用,因为该功能当前不存在于集群创建 API 中。
配置¶
为了允许 PXC 集群启用 root 权限,我们需要更新 guestagent API 以支持此调用。在查看其他集群启用的数据存储之后,唯一支持此功能的其他集群数据存储是 Vertica。 许多代码可以轻松地重用并应用于 PXC,我们还将大部分代码拉到公共位置,以便将来其他数据存储以及今天的 PXC 数据存储可以使用。 Vertica 数据存储可以扩展该类,并添加其数据存储特定的其他更改。
PXC 配置更改将使用 root_controller 配置参数,该参数当前使用 DefaultRootController,而是指向新的类 ClusterRootController。
公共 API¶
以下公共 API 调用将提供给 PXC 数据存储。
集群 root 启用 - 现有的调用负载不会更改。实现集群资源的 root 启用将允许用户在集群中的所有实例上启用 root 权限,并允许用户指定将用于在集群上启用 root 权限的密码。
内部 API¶
Vertica 数据存储已经具有此功能,并且大部分代码可重用,因此我们可以将此代码移动到公共位置并在此基础上构建。
将
trove.extensions.vertica.models.VerticaRoot类移动到trove.extensions.common.models.ClusterRoot将
trove.extensions.vertica.service.VericaRootController类移动到trove.extensions.common.service.ClusterRootController使
trove.extensions.vertica.service.VericaRootController类扩展trove.extensions.common.service.ClusterRootController,并进行 Vertica 需要的少量更改。
Guest Agent¶
PXC guest agent 需要具有启用 root 权限的方法,无论是否带有密码。由于此功能在此之前不存在,因此我们只需要 enable_root_with_password 而不需要 PXC 的 enable_root 方法。 enable_root_with_password 方法是 root 启用调用的新版本。旧版本没有密码,为了向后兼容而保留。
将 enable_root_with_password 方法添加到 pxc 管理器。
不需要弃用任何调用即可完成此操作。
Dashboard 影响 (UX)¶
Dashboard 需要更新才能为 PXC 集群启用此功能。此更改需要仅适用于数据存储类型为 pxc 的集群,因为其他数据存储没有此功能。
需要在集群下拉菜单中添加一个新选项,以允许用户为给定的集群启用 root 权限。如果集群不是 pxc 数据存储类型,则该选项应为灰色。
应该有一个对话框,允许用户输入他们想要用于 root 用户的密码,或者允许系统随机生成密码并将其显示给他们一次,以便他们可以将其复制并粘贴到需要 root 访问权限的任何应用程序中。
实现¶
Assignee(s)¶
名称 |
Launchpad ID |
IRC |
|
|---|---|---|---|
Craig Vyvial |
cp16net |
cp16net |
|