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 配置文件的方法。

  • managerservice 模块中实现 update_overridesapply_overrides

  • 当前配置模板将更新为 2,更改将在 可用配置属性 中注明。

将更新以下现有文件

guestagent/datastore/experimental/redis/manager.py
guestagent/datastore/experimental/redis/service.py
templates/redis/config.template

备选方案

实现

负责人

Petr Malik <pmalik@tesora.com>

里程碑

Liberty

工作项

  1. 实现处理(读取/写入/更新)Redis 配置文件的功能。

  2. 实现与配置相关的 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