Redis 配置组¶
Launchpad 蓝图: https://blueprints.launchpad.net/trove/+spec/redis-configuration-groups
问题描述¶
Redis guestagent 目前不支持配置组。
提议的变更¶
补丁集将为 Redis 3.0 或更高版本实现配置组。
Redis 将其配置 1 存储在 ‘redis.conf’ 文件中,该文件可以选择性地导入其他文件。如果对于单个属性存在多个配置指令,则使用最后一个指令。配置指令具有键值格式:“keyword argument1 argument2 … argumentN”
Redis 配置将在不停止和重启服务的情况下,使用特殊的 CONFIG 命令 1 动态重新配置。
注意:并非所有指令都受 CONFIG 命令支持,并且动态修改配置对 ‘redis.conf’ 文件没有影响。
Redis 3.0 的基本配置文件 2 将用作默认配置模板。将提供暴露配置属性的 guest agent 接口,供备份和复制等其他模块使用。
大多数配置属性将通过配置组可用。然而,有些在 Trove 环境下没有意义。
这些包括
无关选项(例如自动快照,因为 Trove 用户无法检索它们)
guestagent 特定的选项(例如文件路径、密码)
Trove 需要控制的项目(复制/集群属性)
请参阅 可用配置属性 以获取支持的选项的完整列表。
CONFIG 指令将被重命名为 guestagent 仅用于其内部使用的名称。这是为了防止用户通过更改客户端中的属性来绕过 Trove 配置组。Guestagent 管理的属性,例如数据库文件和日志的位置,可能会被用来劫持 NOVA 实例。
配置覆盖将使用 Redis 配置文件格式支持的 in-file 导入来实现。用户定义的覆盖(如果有)将保存在 ‘redis.conf.override’ 中,并在默认 ‘redis.conf’ 文件的末尾导入。
可用配置属性¶
未包含在列表中的键将保留其默认值,并且不能通过 Trove 进行配置。有关更多详细信息和默认值,请参阅 2。
用户可以通过 Trove API 配置的属性
tcp-backlog
timeout
tcp-keepalive
loglevel
databases
save
stop-writes-on-bgsave-error
rdbcompression
rdbchecksum
slave-serve-stale-data
slave-read-only
repl-diskless-sync
repl-diskless-sync-delay
repl-ping-slave-period
repl-timeout
repl-disable-tcp-nodelay
repl-backlog-size
repl-backlog-ttl
slave-priority
min-slaves-to-write
min-slaves-max-lag
requirepass
maxclients
maxmemory
maxmemory-policy
maxmemory-samples
appendonly
appendfsync
no-appendfsync-on-rewrite
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size
aof-load-truncated
lua-time-limit
cluster-node-timeout
cluster-slave-validity-factor
cluster-migration-barrier
cluster-require-full-coverage
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-entries
list-max-ziplist-value
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing
client-output-buffer-limit normal
client-output-buffer-limit slave
client-output-buffer-limit pubsub
hz
aof-rewrite-incremental-fsync
不可配置的属性,具有更新后的默认值
daemonize yes
pidfile (由 guestagent 控制)
logfile (由 guestagent 控制)
dir (由 guestagent 控制)
slaveof (由复制控制)
masterauth (由 guestagent 控制)
cluster-enabled (由集群控制)
cluster-config-file (由 guestagent 控制)
配置¶
无
数据库¶
无
公共 API¶
无
公共 API 安全¶
无
Python API¶
无 (合并后添加的空部分)
CLI (python-troveclient)¶
无 (合并后添加的空部分)
内部 API¶
CLI (python-troveclient)¶
这项工作将启用以下客户端命令
configuration-attach
configuration-create
configuration-default
configuration-delete
configuration-detach
configuration-instances
configuration-list
configuration-parameter-list
configuration-parameter-show
configuration-patch
configuration-show
configuration-update
Guest Agent¶
更新 operating_system 模块中处理 Redis 配置文件的方法。
在 manager 和 service 模块中实现 update_overrides 和 apply_overrides。
将更新以下现有文件
guestagent/datastore/experimental/redis/manager.py guestagent/datastore/experimental/redis/service.py templates/redis/config.template
备选方案¶
无
实现¶
负责人¶
Petr Malik <pmalik@tesora.com>
里程碑¶
Liberty
工作项¶
实现处理(读取/写入/更新)Redis 配置文件的功能。
实现与配置相关的 manager API 调用
def update_overrides(self, context, overrides, remove=False) def apply_overrides(self, context, overrides)
升级影响¶
无
依赖项¶
无
测试¶
将添加单元测试以验证已实现的功能和非平凡的代码路径。将添加相关的集成测试。
文档影响¶
数据存储文档应更新以反映启用的功能。
参考资料¶
- 1(1,2)
Redis 配置文档: https://redis.ac.cn/topics/config
- 2(1,2,3)
Redis 3.0 的自文档配置示例文件: https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf