为 Redis 实现 root-enable/root-disable/root-show¶
Trove 目前支持启用 root 用户、禁用 root 用户以及显示数据库实例的 root 启用状态,但 Redis 缺乏此功能。此蓝图概述了为 Redis 实现身份验证管理框架和 API。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/root-enable-in-redis
问题描述¶
Trove 目前不支持 Redis 实例的 root-enable、root-disable、root-show。
提议的变更¶
为 Redis 实现 root-enable、root-disable 和 root-show API。它将支持两种场景,包括 Redis 单实例和 Redis 副本实例,这些操作仅支持主实例,但可以对从实例产生影响。
此实现不支持 Redis 实例集群。
以下是详细信息
Root-enable¶
预条件检查,以确保执行此操作不是集群或从实例。
获取给定实例的从实例。
尝试获取原始身份验证密码以进行回滚。
为给定实例执行 root 启用。考虑到它是一个单实例或 Redis 副本集的主实例,如果发生任何错误,则使用原始身份验证密码回滚并引发异常。
如果一切顺利,并且存在一些从实例,则获取 root 密码并使用上述 root 密码执行 root 启用。如果存在任何失败的从实例,则将其 ID 存储到列表中。
返回 Redis root 创建视图以及失败的从实例 ID 列表。
Root-disable¶
预条件检查,以确保执行此操作不是集群或从实例。
获取给定实例的从实例。
尝试获取原始身份验证密码以进行回滚。
为给定实例执行 root 禁用。考虑到它是一个单实例或 Redis 副本集的主实例,如果发生任何错误,则使用原始身份验证密码回滚并引发异常。
如果一切顺利,并且存在一些从实例,则执行 root 禁用。如果存在任何失败的从实例,则将其 ID 存储到列表中。
如果有任何失败的从实例,则返回 HTTP 代码 200 以及失败的从实例列表。如果没有,则返回 None 以及 HTTP 代码 204。
Root-show¶
使用 mysql 的 root-show。它可以满足我们的要求。
配置¶
更改以下配置值
cfg.StrOpt('root_controller',
default='trove.extensions.redis.service.RedisRootController',
help='Root controller implementation for redis.'),
删除 trove/templates/redis/validation-rules.json 中的 requirepass,以避免通过配置组修改身份验证。
数据库¶
无
公共 API¶
更改 root-enable 和 root-disable 的返回内容。由于 Redis 没有 root 用户,因此只需将用户名显示为“-”即可。如果存在任何失败的从实例,则返回它们。例如
{
"failed_slaves": [
"67c2f6d6-7c01-4ce9-bb18-aa951ca5a39b"
],
"user": {
"password": "bdQhBXVpk7TE689aGgqdNmJmg4qHdpdBegae",
"name": "-"
}
}
公共 API 安全¶
无
Python API¶
无
CLI (python-troveclient)¶
更改返回内容以满足上述 API。
内部 API¶
无
Guest Agent¶
这项工作需要一些 guest manager 的实现
在执行 root 启用时,将 requirepass 和 masterauth 添加到 redis.conf 中,并应用覆盖以在不重启 Redis 服务的情况下生效。重建 admin 客户端,以确保 guest agent 仍然可以与任务管理器通信,因为此补丁 1 中已经完成了启用/禁用 Redis 中的 root 功能。
在执行 root 禁用时,删除 redis.conf 中的 requirepass 和 masterauth,并应用覆盖以在不重启 Redis 服务的情况下生效。同样,重建 admin 客户端。
备选方案¶
我们可以通过配置组实现 Redis 的身份验证管理,但看起来使用 root-enable 和 root-disable менее удобно。
Dashboard 影响 (UX)¶
无
实现¶
负责人¶
- 主要负责人
fanzhang <zh.f@outlook.com>
里程碑¶
- 完成目标里程碑
Queens-Q2
工作项¶
实现 Redis root 控制器、服务、模型和视图。
实现 Redis guest agent,包括管理器、服务和模型。
升级影响¶
无
依赖项¶
无
测试¶
在 int_tests.py 内部,将 root_actions_groups 添加到 Redis 支持的组中,以便在适当修改以满足 Redis 的 root 操作功能后重用一些场景测试。
将添加单元测试来测试派生的控制器功能,例如
测试单个 Redis 实例上的 root-enable。
测试 Redis 复制的主实例上的 root-enable。
测试 Redis 复制的从实例上的 root-enable。
测试 is_cluster=True 时的 root-enable。
测试上述情况下的 root-delete。
还将添加单元测试来测试 guest-agent 内部实现的功能,包括 enable_root 和 disable_root。
参考资料¶
附录¶
无。