这是本节的多页打印视图。 .
模块:REDIS
REDIS 是 Pigsty 的 Redis 兼容缓存模块。您可以通过 redis_type 选择 Redis 或 Valkey,默认仍为 redis。
两种引擎都支持主从复制、Sentinel 与原生集群模式,并复用相同的配置路径、实例服务名、监控和日志入口。
角色会安装所选引擎与 redis-exporter,实例进程分别使用 redis-server / redis-cli 或 valkey-server / valkey-cli。切换 redis_type 会改变软件包和二进制,并不会自动验证数据格式、复制拓扑或回滚路径;已有集群切换前应先演练,且同一逻辑集群的所有节点必须使用同一引擎。
默认 Redis 软件包继续采用 7.2 BSD 分支;不同操作系统仓库中的小版本可能不同,应以目标仓库元数据为准。
1 - 集群配置
概念
Redis 的实体概念模型与 PostgreSQL 几乎相同,同样包括 集群(Cluster) 与 实例(Instance) 的概念。注意这里的 Cluster 指的不是 Redis 原生集群方案中的集群。
REDIS 模块与 PGSQL 模块核心的区别在于,Redis 通常采用 单机多实例 部署,而不是 PostgreSQL 的 1:1 部署:一个物理/虚拟机节点上通常会部署 多个 Redis 实例,以充分利用多核 CPU。因此 配置 和 管理 Redis 实例的方式与 PGSQL 稍有不同。
在 Pigsty 管理的 Redis 中,节点完全隶属于集群,即目前尚不允许在一个节点上部署两个不同集群的 Redis 实例,但这并不影响您在一个节点上部署多个独立 Redis 主从实例。当然这样也会有一些局限性,例如在这种情况下您就无法为同一个节点上的不同实例指定不同的密码了。
服务端实现由 redis_type 选择:默认 redis,也可设为 valkey。
该参数应在集群层统一设置;角色会切换软件包、*-server 与 *-cli 二进制,但继续使用 /etc/redis、/data/redis、实例 systemd 单元名和 redis 监控命名空间。
已有集群切换引擎前必须单独验证数据与回滚路径。
身份参数
Redis 身份参数 是定义 Redis 集群时必须提供的信息,包括:
| 名称 | 属性 | 说明 | 例子 |
|---|---|---|---|
redis_cluster |
必选,集群级别 | 集群名 | redis-test |
redis_node |
必选,节点级别 | 节点号 | 1,2 |
redis_instances |
必选,节点级别 | 实例定义 | { 6001 : {} ,6002 : {}} |
redis_cluster:Redis 集群名称,作为集群资源的顶层命名空间。redis_node:Redis 节点标号,整数,在集群内唯一,用于区分不同节点。redis_instances:JSON 对象,Key 为实例端口号,Value 为包含实例其他配置 JSON 对象。
工作模式
Redis 有三种不同的工作模式,由 redis_mode 参数指定:
standalone:默认的独立主从模式cluster:Redis 原生分布式集群模式sentinel:哨兵模式,可以为主从模式的 Redis 提供高可用能力
下面给出了三种 Redis 集群的定义样例:
- 一个1节点,一主一从的 Redis Standalone 集群:
redis-ms - 一个1节点,3实例的 Redis Sentinel 集群:
redis-sentinel - 一个2节点,6实例的 Redis Cluster 集群:
redis-cluster
以上示例省略了 redis_type,因此使用默认 Redis。若要部署 Valkey,在对应集群的 vars 中增加 redis_type: valkey;不要在同一逻辑集群内混用两种引擎。
局限性
- 一个节点只能属于一个 Redis 集群,这意味着您不能将一个节点同时分配给两个不同的 Redis 集群。
- 在每个 Redis 节点上,您需要为 Redis 实例 分配唯一的端口号,避免端口冲突。
- 通常同一个 Redis 集群会使用同一个密码,但一个 Redis 节点上的多个 Redis 实例无法设置不同的密码(因为 redis_exporter 只允许使用一个密码)
- Redis Cluster 自带高可用,而 Redis 主从的高可用需要在 Sentinel 中额外进行手工配置:因为我们不知道您是否会部署 Sentinel。
- 好在配置 Redis 主从实例的高可用非常简单,可以通过 Sentinel 进行配置,详情请参考 管理-设置Redis主从高可用
典型配置示例
以下是一些常见场景的 Redis 配置示例:
缓存集群(纯内存)
适用于对数据持久性要求不高的纯缓存场景:
Session 存储集群
适用于 Web 应用 Session 存储,需要一定的持久性:
消息队列集群
适用于简单的消息队列场景,需要较高的数据可靠性:
高可用主从集群
带有 Sentinel 自动故障转移的主从集群:
大容量原生集群
适用于大数据量、高吞吐场景的原生分布式集群:
安全加固配置
生产环境推荐的安全配置:
2 - 参数列表
REDIS 模块的参数列表,共有 22 个参数,分为两个部分:
REDIS:19 个参数,用于 Redis/Valkey 集群的部署与配置REDIS_REMOVE:3 个参数,控制 Redis 集群的移除
自 Pigsty v3.6 起,redis.yml 剧本不再包含移除功能,移除相关参数已迁移至独立的 redis_remove 角色和 redis-rm.yml 剧本。
参数概览
REDIS 参数组用于 Redis 集群的部署与配置,包括身份标识、实例定义、工作模式、内存配置、持久化以及监控。
| 参数 | 类型 | 级别 | 说明 |
|---|---|---|---|
redis_cluster |
string |
C |
Redis 数据库集群名称,必选身份参数 |
redis_instances |
dict |
I |
Redis 节点上的实例定义 |
redis_node |
int |
I |
Redis 节点编号,正整数,集群内唯一,必选身份参数 |
redis_fs_main |
path |
C |
Redis 主数据目录,默认为 /data/redis |
redis_exporter_enabled |
bool |
C |
Redis Exporter 是否启用? |
redis_exporter_port |
port |
C |
Redis Exporter 监听端口 |
redis_exporter_options |
string |
C/I |
Redis Exporter 命令参数 |
redis_type |
enum |
G/C |
服务端引擎:redis(默认)或 valkey |
redis_mode |
enum |
C |
Redis 集群模式:sentinel,cluster,standalone |
redis_conf |
string |
C |
Redis 配置文件模板,sentinel 除外 |
redis_bind_address |
ip |
C |
Redis 监听地址,默认值 0.0.0.0,留空则绑定主机 IP |
redis_max_memory |
size |
C/I |
Redis 可用的最大内存 |
redis_mem_policy |
enum |
C |
Redis 内存逐出策略 |
redis_password |
password |
C |
Redis 密码,默认留空则禁用密码 |
redis_rdb_save |
string[] |
C |
Redis RDB 保存指令,字符串列表,空数组则禁用 RDB |
redis_aof_enabled |
bool |
C |
Redis AOF 是否启用? |
redis_rename_commands |
dict |
C |
Redis 危险命令重命名列表 |
redis_cluster_replicas |
int |
C |
Redis 原生集群中每个主库配几个从库? |
redis_sentinel_monitor |
master[] |
C |
Redis 哨兵监控的主库列表,只在哨兵集群上使用 |
REDIS_REMOVE 参数组控制 Redis 集群的移除行为,包括防误删保险、数据清理以及软件包卸载。
| 参数 | 类型 | 级别 | 说明 |
|---|---|---|---|
redis_safeguard |
bool |
G/C/A |
为 true 时无条件拒绝移除操作 |
redis_rm_data |
bool |
G/C/A |
移除 Redis 实例时是否一并移除数据目录? |
redis_rm_pkg |
bool |
G/C/A |
移除时是否卸载所选引擎与 redis-exporter? |
默认参数
REDIS:19 个参数,定义于 roles/redis/defaults/main.yml
REDIS_REMOVE:3 个参数,定义于 roles/redis_remove/defaults/main.yml
REDIS
本节包含 redis 角色的参数,
这些是 redis.yml 剧本使用的操作标志参数。
redis_cluster
参数名称: redis_cluster, 类型: string, 层次:C
身份参数,必选参数,必须显式在集群层面配置,将用作集群内资源的命名空间。
需要遵循特定命名规则:[a-z][a-z0-9-]*,以兼容不同约束对身份标识的要求,建议使用 redis- 作为集群名前缀。
redis_node
参数名称: redis_node, 类型: int, 层次:I
Redis 节点序列号,身份参数,必选参数,必须显式在节点(Host)层面配置。
自然数,在集群中应当是唯一的,用于区别与标识集群内的不同节点,从0或1开始分配。
redis_instances
参数名称: redis_instances, 类型: dict, 层次:I
当前 Redis 节点上的 Redis 实例定义,必选参数,必须显式在节点(Host)层面配置。
内容为 JSON KV 对象格式。Key 为数值类型端口号,Value 为该实例特定的 JSON 配置项。
每一个 Redis 实例在对应节点上监听一个唯一端口,实例配置项中 replica_of 用于设置一个实例的上游主库地址,构建主从复制关系。
redis_fs_main
参数名称: redis_fs_main, 类型: path, 层次:C
Redis 使用的主数据目录,默认为 /data/redis。
部署阶段不允许使用旧值 /data(redis 角色的 identity assert 会直接报错);移除阶段为兼容旧配置,redis-rm.yml 在 redis_fs_main=/data 时会按 /data/redis 执行删除。
数据目录的属主为操作系统用户 redis,内部结构详情请参考 FHS:Redis
redis_exporter_enabled
参数名称: redis_exporter_enabled, 类型: bool, 层次:C
是否启用 Redis 监控组件 Redis Exporter?
默认启用,在每个 Redis 节点上部署一个,默认监听 redis_exporter_port 9121 端口。所有本节点上 Redis 实例的监控指标都由它负责抓取。
将此参数设为 false 时,roles/redis/tasks/exporter.yml 仍会渲染配置文件,但会跳过 redis_exporter systemd 服务的启动步骤(redis_exporter_launch 任务带有 when: redis_exporter_enabled|bool 判断),可用于在节点上保留手工配置的 exporter。
redis_register 仍会写入该节点的 VictoriaMetrics 文件发现目标;如果没有自行提供同端口的 Exporter,应同时处理该监控目标,避免持续抓取失败。
redis_exporter_port
参数名称: redis_exporter_port, 类型: port, 层次:C
Redis Exporter 监听端口,默认值为:9121
redis_exporter_options
参数名称: redis_exporter_options, 类型: string, 层次:C/I
传给 Redis Exporter 的额外命令行参数,会被渲染到 /etc/default/redis_exporter 中(参见 roles/redis/tasks/exporter.yml),默认为空字符串。REDIS_EXPORTER_OPTS 最终会附加到 systemd 服务的 ExecStart=/bin/redis_exporter $REDIS_EXPORTER_OPTS,可用于配置额外的抓取目标或过滤行为。
redis_type
参数名称:redis_type,类型:enum,层次:G/C
选择 REDIS 模块使用的服务端实现,允许值为 redis 与 valkey,默认 redis。
角色会安装与该值同名的软件包,并在实例 systemd 单元中调用 /bin/redis-server / /bin/redis-cli 或 /bin/valkey-server / /bin/valkey-cli。配置路径、数据目录、实例服务名、Exporter 与监控标签仍使用 redis 命名空间,以保持现有清单和运维入口兼容。
应在集群层为所有成员设置相同值。修改 redis_type 只会改变角色选择的软件包和二进制,不会自动验证 RDB/AOF、复制、Sentinel 或 Cluster 的跨版本兼容性;已有集群切换前应先演练并准备回滚。
redis_mode
参数名称: redis_mode, 类型: enum, 层次:C
Redis 集群的工作模式,有三种选项:standalone, cluster, sentinel,默认值为 standalone
standalone:默认,独立的 Redis 主从模式cluster: Redis 原生集群模式sentinel:Redis 高可用组件:哨兵
当使用 standalone 模式时,Pigsty 会根据 replica_of 参数设置 Redis 主从复制关系。
当使用 cluster 模式时,Pigsty 会根据 redis_cluster_replicas 参数使用所有定义的实例创建原生 Redis 集群。
当 redis_mode=sentinel 时,redis.yml 会执行 redis-ha 阶段,将 redis_sentinel_monitor 中的目标批量下发到所有哨兵;当 redis_mode=cluster 时还会执行 redis-join 阶段,调用所选引擎的 redis-cli 或 valkey-cli 执行 --cluster create。这两个阶段均在普通 ./redis.yml -l <cluster> 中自动触发,也可以通过 -t redis-ha 或 -t redis-join 单独运行。
redis_conf
参数名称: redis_conf, 类型: string, 层次:C
Redis 配置模板路径,Sentinel 除外。
默认值:redis.conf,这是一个模板文件,位于 roles/redis/templates/redis.conf。
如果你想使用自己的 Redis 配置模板,你可以将它放在 templates/ 目录中,并设置此参数为模板文件名。
注意: Redis Sentinel 使用的是另一个不同的模板文件,即 roles/redis/templates/redis-sentinel.conf。
redis_bind_address
参数名称: redis_bind_address, 类型: ip, 层次:C
Redis 服务器绑定的 IP 地址,空字符串将使用配置清单中定义的主机名。
默认值:0.0.0.0,这将绑定到此主机上的所有可用 IPv4 地址。
在生产环境中出于安全性考虑,建议仅绑定内网 IP,即将此值设置为空字符串 ''
当该值为空字符串时,模板 roles/redis/templates/redis.conf
会使用 inventory_hostname 渲染 bind <ip>,从而绑定到清单中声明的管理地址。
redis_max_memory
参数名称: redis_max_memory, 类型: size, 层次:C/I
每个 Redis 实例使用的最大内存配置,默认值:1GB。
redis_mem_policy
参数名称: redis_mem_policy, 类型: enum, 层次:C
Redis 内存回收策略,默认值:allkeys-lru,
noeviction:内存达限时不保存新值:当使用主从复制时仅适用于主库allkeys-lru:保持最近使用的键;删除最近最少使用的键(LRU)allkeys-lfu:保持频繁使用的键;删除最少频繁使用的键(LFU)volatile-lru:删除带有真实过期字段的最近最少使用的键volatile-lfu:删除带有真实过期字段的最少频繁使用的键allkeys-random:随机删除键以为新添加的数据腾出空间volatile-random:随机删除带有过期字段的键volatile-ttl:删除带有真实过期字段和最短剩余生存时间(TTL)值的键。
详情请参阅 Redis内存回收策略。
redis_password
参数名称: redis_password, 类型: password, 层次:C/N
Redis 密码,空字符串将禁用密码,这是默认行为。
注意,由于 redis_exporter 的实现限制,您每个节点只能设置一个 redis_password。这通常不是问题,因为 pigsty 不允许在同一节点上部署两个不同的 Redis 集群。
Pigsty 会自动将此密码写入 /etc/default/redis_exporter(REDIS_PASSWORD=...),并通过 REDISCLI_AUTH 传给 redis-ha 与 redis-join 所选的 redis-cli / valkey-cli,避免把密码直接放在命令行参数中。
请在生产环境中使用强密码
redis_rdb_save
参数名称: redis_rdb_save, 类型: string[], 层次:C
Redis RDB 保存指令,使用空列表则禁用 RDB。
默认值是 ["1200 1"]:如果最近20分钟至少有1个键更改,则将数据集转储到磁盘。
详情请参考 Redis持久化。
redis_aof_enabled
参数名称: redis_aof_enabled, 类型: bool, 层次:C
启用 Redis AOF 吗?默认值是 false,即不使用 AOF。
redis_rename_commands
参数名称: redis_rename_commands, 类型: dict, 层次:C
重命名 Redis 危险命令,这是一个 k:v 字典:old: new,old 是待重命名的命令名称,new 是重命名后的名字。
默认值:{},你可以通过设置此值来隐藏像 FLUSHDB 和 FLUSHALL 这样的危险命令,下面是一个例子:
redis_cluster_replicas
参数名称: redis_cluster_replicas, 类型: int, 层次:C
在 Redis 原生集群中,应当为一个 Master/Primary 实例配置多少个从库?默认值为: 1,即每个主库配一个从库。
redis_sentinel_monitor
参数名称: redis_sentinel_monitor, 类型: master[], 层次:C
Redis 哨兵监控的主库列表,只在哨兵集群上使用。每个待纳管的主库定义方式如下所示:
其中,name,host 是必选参数,port,password,quorum 是可选参数,quorum 用于设置判定主库失效所需的法定人数数,通常大于哨兵实例数的一半(默认为1)。
从 Pigsty 4.0 开始还可以为某个条目添加 remove: true,此时 redis-ha 阶段只会执行 SENTINEL REMOVE <name>,用于清理不再需要的目标。
REDIS_REMOVE
本节包含 redis_remove 角色的参数,
这些是 redis-rm.yml 剧本使用的操作标志参数。
redis_safeguard
参数名称: redis_safeguard, 类型: bool, 层次:G/C/A
Redis 的防误删安全保险开关,默认值为 false。设置为 true 时,redis-rm.yml 会在注销、停服和删除之前
直接中止;它是静态布尔开关,不会探测 Redis 实例是否正在运行。
可以通过命令行参数 -e redis_safeguard=false 强制覆盖此保护。
redis_rm_data
参数名称: redis_rm_data, 类型: bool, 层次:G/C/A
移除 Redis 实例时,是否一并移除 Redis 数据目录?默认为 true。
数据目录(默认 /data/redis/,即 redis_fs_main)包含了 Redis 的 RDB 与 AOF 文件,如果不移除它们,那么新部署的 Redis 实例将会从这些备份文件中加载数据。
设置为 false 可以保留数据目录用于后续恢复。
redis_rm_pkg
参数名称: redis_rm_pkg, 类型: bool, 层次:G/C/A
移除 Redis 节点时,是否一并卸载 redis_type 指定的引擎与 redis-exporter 软件包?默认为 false。指定 redis_port 只移除单个实例时不会卸载共享软件包。
通常情况下不需要卸载软件包,仅当需要彻底清理节点时才需要启用此选项。
3 - 预置剧本
REDIS 模块提供了两个剧本,用于部署/移除 Redis 集群/节点/实例:
redis.yml:部署 Redis 集群/节点/实例redis-rm.yml:移除 Redis 集群/节点/实例
redis.yml
用于部署 Redis 的 redis.yml 剧本包含以下子任务:
操作级别
redis.yml 支持三种操作级别,通过 -l 限制目标范围,通过 -e redis_port=<port> 指定单个实例:
| 操作级别 | 限制参数 | 说明 |
|---|---|---|
| 集群 | -l <cluster> |
部署整个 Redis 集群的所有节点和实例 |
| 节点 | -l <ip> |
部署指定节点上的所有 Redis 实例 |
| 实例 | -l <ip> -e redis_port=<port> |
仅部署指定节点上的单个实例 |
集群级别操作
部署整个 Redis 集群,包括所有节点上的所有实例:
集群级别操作会:
- 按
redis_type安装 Redis 或 Valkey,并安装redis-exporter - 在所有节点上创建 redis 用户和目录结构
- 启动所有节点上的 redis_exporter
- 部署并启动所有定义的 Redis 实例
- 将所有实例注册到监控系统
- 如果是
sentinel模式,配置哨兵监控目标 - 如果是
cluster模式,组建原生集群
节点级别操作
仅部署指定节点上的所有 Redis 实例:
节点级别操作适用于:
- 向现有集群 扩容新节点
- 重新部署某个节点上的所有实例
- 节点故障恢复后重新初始化
注意:节点级别命令仍会进入
redis-ha/redis-join的模式判断:在sentinel模式下会刷新哨兵纳管目标;在cluster模式下,剧本先使用所选 CLI 检查种子实例的cluster_state:ok,已健康则退出,否则执行--cluster create。这个检查不会替代扩容流程,向既有原生集群加节点仍应手工执行redis-cli/valkey-cli --cluster add-node与reshard。
实例级别操作
通过 -e redis_port=<port> 参数指定单个实例进行操作:
实例级别操作适用于:
- 向现有节点 添加新实例
- 重新部署单个故障实例
- 更新单个实例的配置
当指定 redis_port 时:
- 仅渲染该端口对应的配置文件
- 仅启动/重启该端口对应的 systemd 服务
- 会重写该节点的监控注册文件(内容来自
redis_instances全量定义) - 不会 启停
redis_exporter或重载 Vector 日志配置 - 不会 影响同节点上的其他 Redis 实例进程
常用标签
可以通过 -t <tag> 参数选择性执行部分任务:
幂等性说明
redis.yml 的大部分任务可安全重复执行;原生集群初始化仍需注意拓扑状态:
redis_node/redis_exporter/redis_instance/redis_register重复执行会覆盖配置并重启实例redis-ha重复执行会按redis_sentinel_monitor重新下发SENTINEL REMOVE/MONITORredis-join会先检查种子实例是否已经达到cluster_state:ok,健康集群会直接退出;未完成、损坏或正在扩容的拓扑不会由这个检查自动修复,不能把它当作通用的 add-node/reshard 操作
提示:如果只想更新配置而不想重启所有实例,可以使用
-t redis_config仅渲染配置,然后手动重启需要的实例。
Redis/Valkey 采用 Type=notify。实例启动时 systemd 最多等待 1800s 收到就绪通知,以覆盖大型 RDB/AOF 加载与恢复;
redis-rm.yml
用于移除 Redis 的 redis-rm.yml 剧本包含以下子任务:
标签化执行遵循数据/卸包开关:-t redis 总会进入实例停服阶段;
单独运行 -t redis_data 只有在 redis_rm_data=true 时才停服,
单独运行 -t redis_pkg 只有在 redis_rm_pkg=true 时才停服。
换言之,-t redis_data -e redis_rm_data=false 与 -t redis_pkg -e redis_rm_pkg=false
不会仅因选中标签就停止 Redis。真实移除前应核对完全相同的 -l、标签与 extra-vars。
操作级别
redis-rm.yml 同样支持三种操作级别:
| 操作级别 | 限制参数 | 说明 |
|---|---|---|
| 集群 | -l <cluster> |
移除整个 Redis 集群的所有节点和实例 |
| 节点 | -l <ip> |
移除指定节点上的所有 Redis 实例 |
| 实例 | -l <ip> -e redis_port=<port> |
仅移除指定节点上的单个实例 |
集群级别移除
移除整个 Redis 集群:
集群级别移除会:
- 从监控系统注销所有节点的所有实例
- 停止所有节点上的 redis_exporter
- 停止并禁用所有 Redis 实例
- 删除所有数据目录(如果
redis_rm_data=true) - 卸载
redis_type指定的引擎与redis-exporter(如果redis_rm_pkg=true)
节点级别移除
仅移除指定节点上的所有 Redis 实例:
节点级别移除适用于:
- 集群 缩容,下线整个节点
- 节点退役前的清理
- 节点迁移前的准备
节点级别移除会:
- 从监控系统注销该节点的所有实例
- 停止该节点上的 redis_exporter
- 停止该节点上的所有 Redis 实例
- 删除该节点上的所有数据目录
- 删除该节点上的 Vector 日志配置
实例级别移除
通过 -e redis_port=<port> 参数指定移除单个实例:
实例级别移除适用于:
- 移除节点上的 单个从库
- 移除不再需要的实例
- 主从切换后移除原主库
当指定 redis_port 时的行为差异:
| 组件 | 节点级别(无 redis_port) | 实例级别(有 redis_port) |
|---|---|---|
| 监控注册 | 删除整个节点的注册文件 | 仅从注册文件中移除该实例 |
| redis_exporter | 停止并禁用 | 不操作(其他实例还需要) |
| Redis 实例 | 停止所有实例 | 仅停止指定端口的实例 |
| 数据目录 | 删除 redis_fs_main(默认 /data/redis/)整个目录 |
仅删除 redis_fs_main/<cluster>-<node>-<port>/(redis_fs_main=/data 时按 /data/redis 兼容处理) |
| Vector 配置 | 删除 /etc/vector/redis.yaml |
不操作(其他实例还需要) |
| 软件包 | 可选卸载 | 不操作 |
控制参数
redis-rm.yml 提供以下控制参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
redis_safeguard |
false |
安全保险,设为 true 时拒绝执行移除操作 |
redis_rm_data |
true |
是否删除数据目录(RDB/AOF 文件) |
redis_rm_pkg |
false |
是否卸载所选引擎与 redis-exporter |
使用示例:
redis_safeguard 默认是 false,redis_rm_data 默认是 true。移除剧本还会容忍多项停服、注销、删数据和卸包错误;真实运行后必须检查目标进程、数据目录与监控注册,不能只凭剧本返回状态判定完成。
安全保险机制
当集群配置了 redis_safeguard: true 时,redis-rm.yml 会拒绝执行:
需要显式覆盖才能执行:
快速参考
部署操作速查
移除操作速查
包装脚本
Pigsty 提供了便捷的包装脚本:
示例演示
使用 Redis 剧本初始化 Redis 集群:
4 - 管理预案
以下是一些常见的 Redis 管理任务 SOP(预案):
REDIS 模块默认使用 redis_type: redis;选择 redis_type: valkey 时,服务端与客户端命令分别改为 valkey-server / valkey-cli。
本文命令行示例使用默认的 redis-cli,Valkey 集群请替换为 valkey-cli;剧本内部会自动选择正确的 CLI。
基础运维
高可用管理
扩缩容与迁移
故障排查
更多问题请参考 FAQ:REDIS。
初始化Redis
您可以使用 redis.yml 剧本来初始化 Redis 集群、节点、或实例:
你也可以使用包装脚本命令行脚本来初始化:
下线Redis
您可以使用 redis-rm.yml 剧本来下线 Redis 集群、节点、或实例:
redis_rm_data 默认为 true。先核对 RDB/AOF 备份、当前主从/哨兵/集群拓扑并让操作者确认精确目标;下面命令会直接执行相应的下线操作。
你也可以使用包装脚本来下线 Redis 集群/节点/实例:
重新配置Redis
您可以部分执行 redis.yml 剧本来重新配置 Redis 集群、节点、或实例:
请注意,redis 无法在线重载配置,您只能使用 launch 任务进行重启来让配置生效。
使用Redis客户端
默认 Redis 引擎使用 redis-cli 访问实例;Valkey 使用 valkey-cli,参数与下列示例相同:
Redis 提供了 redis-benchmark 工具,可以用于 Redis 的性能评估,或生成一些负载用于测试。
手工设置Redis从库
https://redis.io/commands/replicaof/
设置Redis主从高可用
Redis 独立主从集群可以通过 Redis 哨兵集群配置自动高可用,详细用户请参考 Sentinel官方文档
以四节点 沙箱 为例,一套 Redis Sentinel 集群 redis-meta,可以用来管理很多套独立 Redis 主从集群。
以一主一从的 Redis 普通主从集群 redis-ms 为例,您需要在每个 Sentinel 实例上,使用 SENTINEL MONITOR 添加目标,并使用 SENTINEL SET 提供密码,高可用就配置完毕了。
如果您想移除某个由 Sentinel 管理的 Redis 主从集群,使用 SENTINEL REMOVE <name> 移除即可。
您可以使用定义在 Sentinel 集群上的 redis_sentinel_monitor 参数,来自动配置管理哨兵监控管理的主库列表。
redis.yml 中的 redis-ha 阶段会根据该列表在每个哨兵实例上渲染 /tmp/<cluster>.monitor 并依次执行 SENTINEL REMOVE 与 SENTINEL MONITOR 命令,
从而保证哨兵纳管状态与清单保持一致。如果只想移除某个目标而不再重新添加,可以在监控对象上设置 remove: true,剧本会在 SENTINEL REMOVE 后跳过重新注册。
使用以下命令刷新 Redis 哨兵集群上的纳管主库列表:
初始化 Redis 原生集群
当 redis_mode 设置为 cluster 时,redis.yml 会额外执行 redis-join 阶段:
剧本会使用 redis_type 对应的 CLI 执行 --cluster create --cluster-yes ... --cluster-replicas {{ redis_cluster_replicas }},把所有清单实例拼成原生集群。
该步骤在首次部署时自动运行;后续执行 ./redis.yml -l <cluster> -t redis-join 会先检查种子实例的 cluster_state:ok,健康集群会直接退出。该保护不负责 add-node、reshard 或修复部分初始化的拓扑,只有确认当前拓扑状态后才应单独触发。
扩容Redis节点
扩容独立主从集群
向现有的 Redis 主从集群添加新节点/实例时,首先在配置清单中添加新的定义:
然后仅针对新节点执行部署:
扩容原生集群
向 Redis 原生集群添加新节点需要额外的步骤:
扩容哨兵集群
向 Sentinel 集群添加新实例后,需要同时完成实例部署与纳管目标刷新:
缩容Redis节点
缩容独立主从集群
缩容原生集群
数据备份与恢复
手动备份
数据恢复
使用 AOF 持久化
如果需要更高的数据安全性,可以启用 AOF:
重新部署以应用 AOF 配置:
常见问题诊断
连接问题排查
内存问题排查
性能问题排查
复制问题排查
性能调优
内存优化
持久化优化
连接池配置建议
客户端应用连接 Redis 时,建议:
- 使用连接池,避免频繁创建连接
- 设置合理的超时时间(推荐 1-3 秒)
- 启用 TCP keepalive
- 对于高并发场景,考虑使用 Pipeline 批量操作
监控关键指标
通过 Grafana 仪表盘关注以下指标:
- 内存使用率:
redis:ins:mem_usage> 80% 时需要关注 - CPU 使用率:
redis:ins:cpu_usage> 70% 时需要关注 - QPS:关注突增和异常波动
- 响应时间:
redis:ins:rt> 1ms 时需要排查 - 连接数:关注连接数增长趋势
- 复制延迟:主从复制场景下需要关注
5 - 监控告警
监控面板
REDIS 模块提供了 3 个监控面板
- Redis Overview:redis 集群概览
- Redis Cluster:redis 集群详情
- Redis Instance:redis 实例详情
监控
Pigsty 提供了三个与 REDIS 模块有关的监控仪表盘:
Redis Overview
Redis Overview:关于所有 Redis 集群/实例的详细信息
Redis Cluster
Redis Cluster:关于单个 Redis 集群的详细信息
Redis Instance
Redis Instance: 关于单个 Redis 实例的详细信息
告警规则
Pigsty 针对 redis 提供了以下六条预置告警规则,定义于 files/victoria/rules/redis.yml
RedisDown:redis 实例不可用RedisRejectConn:redis 实例拒绝连接RedisRTHigh:redis 实例响应时间过高RedisCPUHigh:redis 实例 CPU 使用率过高RedisMemHigh:redis 实例内存使用率过高RedisQPSHigh:redis 实例 QPS 过高
实际触发条件以规则的 expr 为准:响应时间 >160µs 持续 1 分钟,CPU 与内存使用率均为 >70% 持续 1 分钟,QPS 为 >32000 持续 5 分钟。以下片段原样反映当前规则源码;其中 CPU、内存和 QPS 的 description 仍残留 60%、80% 与 16000 等旧阈值,RedisRTHigh 注释中的指标名也误写为 pg:ins:query_rt,这些注释不会改变实际表达式。
6 - 指标列表
本页快照记录 REDIS 模块的 275 类监控指标;实际运行时的指标集合会随软件包版本、启用的采集器和目标状态变化。
| Metric Name | Type | Labels | Description |
|---|---|---|---|
| ALERTS | Unknown | cls, ip, level, severity, instance, category, ins, alertname, job, alertstate |
N/A |
| ALERTS_FOR_STATE | Unknown | cls, ip, level, severity, instance, category, ins, alertname, job |
N/A |
| redis:cls:aof_rewrite_time | Unknown | cls, job |
N/A |
| redis:cls:blocked_clients | Unknown | cls, job |
N/A |
| redis:cls:clients | Unknown | cls, job |
N/A |
| redis:cls:cmd_qps | Unknown | cls, cmd, job |
N/A |
| redis:cls:cmd_rt | Unknown | cls, cmd, job |
N/A |
| redis:cls:cmd_time | Unknown | cls, cmd, job |
N/A |
| redis:cls:conn_rate | Unknown | cls, job |
N/A |
| redis:cls:conn_reject | Unknown | cls, job |
N/A |
| redis:cls:cpu_sys | Unknown | cls, job |
N/A |
| redis:cls:cpu_sys_child | Unknown | cls, job |
N/A |
| redis:cls:cpu_usage | Unknown | cls, job |
N/A |
| redis:cls:cpu_usage_child | Unknown | cls, job |
N/A |
| redis:cls:cpu_user | Unknown | cls, job |
N/A |
| redis:cls:cpu_user_child | Unknown | cls, job |
N/A |
| redis:cls:fork_time | Unknown | cls, job |
N/A |
| redis:cls:key_evict | Unknown | cls, job |
N/A |
| redis:cls:key_expire | Unknown | cls, job |
N/A |
| redis:cls:key_hit | Unknown | cls, job |
N/A |
| redis:cls:key_hit_rate | Unknown | cls, job |
N/A |
| redis:cls:key_miss | Unknown | cls, job |
N/A |
| redis:cls:mem_max | Unknown | cls, job |
N/A |
| redis:cls:mem_usage | Unknown | cls, job |
N/A |
| redis:cls:mem_usage_max | Unknown | cls, job |
N/A |
| redis:cls:mem_used | Unknown | cls, job |
N/A |
| redis:cls:net_traffic | Unknown | cls, job |
N/A |
| redis:cls:qps | Unknown | cls, job |
N/A |
| redis:cls:qps_mu | Unknown | cls, job |
N/A |
| redis:cls:qps_realtime | Unknown | cls, job |
N/A |
| redis:cls:qps_sigma | Unknown | cls, job |
N/A |
| redis:cls:rt | Unknown | cls, job |
N/A |
| redis:cls:rt_mu | Unknown | cls, job |
N/A |
| redis:cls:rt_sigma | Unknown | cls, job |
N/A |
| redis:cls:rx | Unknown | cls, job |
N/A |
| redis:cls:size | Unknown | cls, job |
N/A |
| redis:cls:tx | Unknown | cls, job |
N/A |
| redis:env:blocked_clients | Unknown | job |
N/A |
| redis:env:clients | Unknown | job |
N/A |
| redis:env:cmd_qps | Unknown | cmd, job |
N/A |
| redis:env:cmd_rt | Unknown | cmd, job |
N/A |
| redis:env:cmd_time | Unknown | cmd, job |
N/A |
| redis:env:conn_rate | Unknown | job |
N/A |
| redis:env:conn_reject | Unknown | job |
N/A |
| redis:env:cpu_usage | Unknown | job |
N/A |
| redis:env:cpu_usage_child | Unknown | job |
N/A |
| redis:env:key_evict | Unknown | job |
N/A |
| redis:env:key_expire | Unknown | job |
N/A |
| redis:env:key_hit | Unknown | job |
N/A |
| redis:env:key_hit_rate | Unknown | job |
N/A |
| redis:env:key_miss | Unknown | job |
N/A |
| redis:env:mem_usage | Unknown | job |
N/A |
| redis:env:net_traffic | Unknown | job |
N/A |
| redis:env:qps | Unknown | job |
N/A |
| redis:env:qps_mu | Unknown | job |
N/A |
| redis:env:qps_realtime | Unknown | job |
N/A |
| redis:env:qps_sigma | Unknown | job |
N/A |
| redis:env:rt | Unknown | job |
N/A |
| redis:env:rt_mu | Unknown | job |
N/A |
| redis:env:rt_sigma | Unknown | job |
N/A |
| redis:env:rx | Unknown | job |
N/A |
| redis:env:tx | Unknown | job |
N/A |
| redis:ins | Unknown | cls, id, instance, ins, job |
N/A |
| redis:ins:blocked_clients | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:clients | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cmd_qps | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis:ins:cmd_rt | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis:ins:cmd_time | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis:ins:conn_rate | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:conn_reject | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_sys | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_sys_child | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_usage | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_usage_child | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_user | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:cpu_user_child | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:key_evict | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:key_expire | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:key_hit | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:key_hit_rate | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:key_miss | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:lsn_rate | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:mem_usage | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:net_traffic | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:qps | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:qps_mu | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:qps_realtime | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:qps_sigma | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:rt | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:rt_mu | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:rt_sigma | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:rx | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:ins:tx | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:node:ip | Unknown | cls, ip, instance, ins, job |
N/A |
| redis:node:mem_alloc | Unknown | cls, ip, job |
N/A |
| redis:node:mem_total | Unknown | cls, ip, job |
N/A |
| redis:node:mem_used | Unknown | cls, ip, job |
N/A |
| redis:node:qps | Unknown | cls, ip, job |
N/A |
| redis_active_defrag_running | gauge | cls, ip, instance, ins, job |
active_defrag_running metric |
| redis_allocator_active_bytes | gauge | cls, ip, instance, ins, job |
allocator_active_bytes metric |
| redis_allocator_allocated_bytes | gauge | cls, ip, instance, ins, job |
allocator_allocated_bytes metric |
| redis_allocator_frag_bytes | gauge | cls, ip, instance, ins, job |
allocator_frag_bytes metric |
| redis_allocator_frag_ratio | gauge | cls, ip, instance, ins, job |
allocator_frag_ratio metric |
| redis_allocator_resident_bytes | gauge | cls, ip, instance, ins, job |
allocator_resident_bytes metric |
| redis_allocator_rss_bytes | gauge | cls, ip, instance, ins, job |
allocator_rss_bytes metric |
| redis_allocator_rss_ratio | gauge | cls, ip, instance, ins, job |
allocator_rss_ratio metric |
| redis_aof_current_rewrite_duration_sec | gauge | cls, ip, instance, ins, job |
aof_current_rewrite_duration_sec metric |
| redis_aof_enabled | gauge | cls, ip, instance, ins, job |
aof_enabled metric |
| redis_aof_last_bgrewrite_status | gauge | cls, ip, instance, ins, job |
aof_last_bgrewrite_status metric |
| redis_aof_last_cow_size_bytes | gauge | cls, ip, instance, ins, job |
aof_last_cow_size_bytes metric |
| redis_aof_last_rewrite_duration_sec | gauge | cls, ip, instance, ins, job |
aof_last_rewrite_duration_sec metric |
| redis_aof_last_write_status | gauge | cls, ip, instance, ins, job |
aof_last_write_status metric |
| redis_aof_rewrite_in_progress | gauge | cls, ip, instance, ins, job |
aof_rewrite_in_progress metric |
| redis_aof_rewrite_scheduled | gauge | cls, ip, instance, ins, job |
aof_rewrite_scheduled metric |
| redis_blocked_clients | gauge | cls, ip, instance, ins, job |
blocked_clients metric |
| redis_client_recent_max_input_buffer_bytes | gauge | cls, ip, instance, ins, job |
client_recent_max_input_buffer_bytes metric |
| redis_client_recent_max_output_buffer_bytes | gauge | cls, ip, instance, ins, job |
client_recent_max_output_buffer_bytes metric |
| redis_clients_in_timeout_table | gauge | cls, ip, instance, ins, job |
clients_in_timeout_table metric |
| redis_cluster_connections | gauge | cls, ip, instance, ins, job |
cluster_connections metric |
| redis_cluster_current_epoch | gauge | cls, ip, instance, ins, job |
cluster_current_epoch metric |
| redis_cluster_enabled | gauge | cls, ip, instance, ins, job |
cluster_enabled metric |
| redis_cluster_known_nodes | gauge | cls, ip, instance, ins, job |
cluster_known_nodes metric |
| redis_cluster_messages_received_total | gauge | cls, ip, instance, ins, job |
cluster_messages_received_total metric |
| redis_cluster_messages_sent_total | gauge | cls, ip, instance, ins, job |
cluster_messages_sent_total metric |
| redis_cluster_my_epoch | gauge | cls, ip, instance, ins, job |
cluster_my_epoch metric |
| redis_cluster_size | gauge | cls, ip, instance, ins, job |
cluster_size metric |
| redis_cluster_slots_assigned | gauge | cls, ip, instance, ins, job |
cluster_slots_assigned metric |
| redis_cluster_slots_fail | gauge | cls, ip, instance, ins, job |
cluster_slots_fail metric |
| redis_cluster_slots_ok | gauge | cls, ip, instance, ins, job |
cluster_slots_ok metric |
| redis_cluster_slots_pfail | gauge | cls, ip, instance, ins, job |
cluster_slots_pfail metric |
| redis_cluster_state | gauge | cls, ip, instance, ins, job |
cluster_state metric |
| redis_cluster_stats_messages_meet_received | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_meet_received metric |
| redis_cluster_stats_messages_meet_sent | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_meet_sent metric |
| redis_cluster_stats_messages_ping_received | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_ping_received metric |
| redis_cluster_stats_messages_ping_sent | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_ping_sent metric |
| redis_cluster_stats_messages_pong_received | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_pong_received metric |
| redis_cluster_stats_messages_pong_sent | gauge | cls, ip, instance, ins, job |
cluster_stats_messages_pong_sent metric |
| redis_commands_duration_seconds_total | counter | cls, cmd, ip, instance, ins, job |
Total amount of time in seconds spent per command |
| redis_commands_failed_calls_total | counter | cls, cmd, ip, instance, ins, job |
Total number of errors prior command execution per command |
| redis_commands_latencies_usec_bucket | Unknown | cls, cmd, ip, le, instance, ins, job |
N/A |
| redis_commands_latencies_usec_count | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis_commands_latencies_usec_sum | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis_commands_processed_total | counter | cls, ip, instance, ins, job |
commands_processed_total metric |
| redis_commands_rejected_calls_total | counter | cls, cmd, ip, instance, ins, job |
Total number of errors within command execution per command |
| redis_commands_total | counter | cls, cmd, ip, instance, ins, job |
Total number of calls per command |
| redis_config_io_threads | gauge | cls, ip, instance, ins, job |
config_io_threads metric |
| redis_config_maxclients | gauge | cls, ip, instance, ins, job |
config_maxclients metric |
| redis_config_maxmemory | gauge | cls, ip, instance, ins, job |
config_maxmemory metric |
| redis_connected_clients | gauge | cls, ip, instance, ins, job |
connected_clients metric |
| redis_connected_slave_lag_seconds | gauge | cls, ip, slave_ip, instance, slave_state, ins, slave_port, job |
Lag of connected slave |
| redis_connected_slave_offset_bytes | gauge | cls, ip, slave_ip, instance, slave_state, ins, slave_port, job |
Offset of connected slave |
| redis_connected_slaves | gauge | cls, ip, instance, ins, job |
connected_slaves metric |
| redis_connections_received_total | counter | cls, ip, instance, ins, job |
connections_received_total metric |
| redis_cpu_sys_children_seconds_total | counter | cls, ip, instance, ins, job |
cpu_sys_children_seconds_total metric |
| redis_cpu_sys_main_thread_seconds_total | counter | cls, ip, instance, ins, job |
cpu_sys_main_thread_seconds_total metric |
| redis_cpu_sys_seconds_total | counter | cls, ip, instance, ins, job |
cpu_sys_seconds_total metric |
| redis_cpu_user_children_seconds_total | counter | cls, ip, instance, ins, job |
cpu_user_children_seconds_total metric |
| redis_cpu_user_main_thread_seconds_total | counter | cls, ip, instance, ins, job |
cpu_user_main_thread_seconds_total metric |
| redis_cpu_user_seconds_total | counter | cls, ip, instance, ins, job |
cpu_user_seconds_total metric |
| redis_db_keys | gauge | cls, ip, instance, ins, db, job |
Total number of keys by DB |
| redis_db_keys_expiring | gauge | cls, ip, instance, ins, db, job |
Total number of expiring keys by DB |
| redis_defrag_hits | gauge | cls, ip, instance, ins, job |
defrag_hits metric |
| redis_defrag_key_hits | gauge | cls, ip, instance, ins, job |
defrag_key_hits metric |
| redis_defrag_key_misses | gauge | cls, ip, instance, ins, job |
defrag_key_misses metric |
| redis_defrag_misses | gauge | cls, ip, instance, ins, job |
defrag_misses metric |
| redis_dump_payload_sanitizations | counter | cls, ip, instance, ins, job |
dump_payload_sanitizations metric |
| redis_errors_total | counter | cls, ip, err, instance, ins, job |
Total number of errors per error type |
| redis_evicted_keys_total | counter | cls, ip, instance, ins, job |
evicted_keys_total metric |
| redis_expired_keys_total | counter | cls, ip, instance, ins, job |
expired_keys_total metric |
| redis_expired_stale_percentage | gauge | cls, ip, instance, ins, job |
expired_stale_percentage metric |
| redis_expired_time_cap_reached_total | gauge | cls, ip, instance, ins, job |
expired_time_cap_reached_total metric |
| redis_exporter_build_info | gauge | cls, golang_version, ip, commit_sha, instance, version, ins, job, build_date |
redis exporter build_info |
| redis_exporter_last_scrape_connect_time_seconds | gauge | cls, ip, instance, ins, job |
exporter_last_scrape_connect_time_seconds metric |
| redis_exporter_last_scrape_duration_seconds | gauge | cls, ip, instance, ins, job |
exporter_last_scrape_duration_seconds metric |
| redis_exporter_last_scrape_error | gauge | cls, ip, instance, ins, job |
The last scrape error status. |
| redis_exporter_scrape_duration_seconds_count | Unknown | cls, ip, instance, ins, job |
N/A |
| redis_exporter_scrape_duration_seconds_sum | Unknown | cls, ip, instance, ins, job |
N/A |
| redis_exporter_scrapes_total | counter | cls, ip, instance, ins, job |
Current total redis scrapes. |
| redis_instance_info | gauge | cls, ip, os, role, instance, run_id, redis_version, tcp_port, process_id, ins, redis_mode, maxmemory_policy, redis_build_id, job |
Information about the Redis instance |
| redis_io_threaded_reads_processed | counter | cls, ip, instance, ins, job |
io_threaded_reads_processed metric |
| redis_io_threaded_writes_processed | counter | cls, ip, instance, ins, job |
io_threaded_writes_processed metric |
| redis_io_threads_active | gauge | cls, ip, instance, ins, job |
io_threads_active metric |
| redis_keyspace_hits_total | counter | cls, ip, instance, ins, job |
keyspace_hits_total metric |
| redis_keyspace_misses_total | counter | cls, ip, instance, ins, job |
keyspace_misses_total metric |
| redis_last_key_groups_scrape_duration_milliseconds | gauge | cls, ip, instance, ins, job |
Duration of the last key group metrics scrape in milliseconds |
| redis_last_slow_execution_duration_seconds | gauge | cls, ip, instance, ins, job |
The amount of time needed for last slow execution, in seconds |
| redis_latency_percentiles_usec | summary | cls, cmd, ip, instance, quantile, ins, job |
A summary of latency percentile distribution per command |
| redis_latency_percentiles_usec_count | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis_latency_percentiles_usec_sum | Unknown | cls, cmd, ip, instance, ins, job |
N/A |
| redis_latest_fork_seconds | gauge | cls, ip, instance, ins, job |
latest_fork_seconds metric |
| redis_lazyfree_pending_objects | gauge | cls, ip, instance, ins, job |
lazyfree_pending_objects metric |
| redis_loading_dump_file | gauge | cls, ip, instance, ins, job |
loading_dump_file metric |
| redis_master_last_io_seconds_ago | gauge | cls, ip, master_host, instance, ins, job, master_port |
Master last io seconds ago |
| redis_master_link_up | gauge | cls, ip, master_host, instance, ins, job, master_port |
Master link status on Redis slave |
| redis_master_repl_offset | gauge | cls, ip, instance, ins, job |
master_repl_offset metric |
| redis_master_sync_in_progress | gauge | cls, ip, master_host, instance, ins, job, master_port |
Master sync in progress |
| redis_mem_clients_normal | gauge | cls, ip, instance, ins, job |
mem_clients_normal metric |
| redis_mem_clients_slaves | gauge | cls, ip, instance, ins, job |
mem_clients_slaves metric |
| redis_mem_fragmentation_bytes | gauge | cls, ip, instance, ins, job |
mem_fragmentation_bytes metric |
| redis_mem_fragmentation_ratio | gauge | cls, ip, instance, ins, job |
mem_fragmentation_ratio metric |
| redis_mem_not_counted_for_eviction_bytes | gauge | cls, ip, instance, ins, job |
mem_not_counted_for_eviction_bytes metric |
| redis_memory_max_bytes | gauge | cls, ip, instance, ins, job |
memory_max_bytes metric |
| redis_memory_used_bytes | gauge | cls, ip, instance, ins, job |
memory_used_bytes metric |
| redis_memory_used_dataset_bytes | gauge | cls, ip, instance, ins, job |
memory_used_dataset_bytes metric |
| redis_memory_used_lua_bytes | gauge | cls, ip, instance, ins, job |
memory_used_lua_bytes metric |
| redis_memory_used_overhead_bytes | gauge | cls, ip, instance, ins, job |
memory_used_overhead_bytes metric |
| redis_memory_used_peak_bytes | gauge | cls, ip, instance, ins, job |
memory_used_peak_bytes metric |
| redis_memory_used_rss_bytes | gauge | cls, ip, instance, ins, job |
memory_used_rss_bytes metric |
| redis_memory_used_scripts_bytes | gauge | cls, ip, instance, ins, job |
memory_used_scripts_bytes metric |
| redis_memory_used_startup_bytes | gauge | cls, ip, instance, ins, job |
memory_used_startup_bytes metric |
| redis_migrate_cached_sockets_total | gauge | cls, ip, instance, ins, job |
migrate_cached_sockets_total metric |
| redis_module_fork_in_progress | gauge | cls, ip, instance, ins, job |
module_fork_in_progress metric |
| redis_module_fork_last_cow_size | gauge | cls, ip, instance, ins, job |
module_fork_last_cow_size metric |
| redis_net_input_bytes_total | counter | cls, ip, instance, ins, job |
net_input_bytes_total metric |
| redis_net_output_bytes_total | counter | cls, ip, instance, ins, job |
net_output_bytes_total metric |
| redis_number_of_cached_scripts | gauge | cls, ip, instance, ins, job |
number_of_cached_scripts metric |
| redis_process_id | gauge | cls, ip, instance, ins, job |
process_id metric |
| redis_pubsub_channels | gauge | cls, ip, instance, ins, job |
pubsub_channels metric |
| redis_pubsub_patterns | gauge | cls, ip, instance, ins, job |
pubsub_patterns metric |
| redis_pubsubshard_channels | gauge | cls, ip, instance, ins, job |
pubsubshard_channels metric |
| redis_rdb_bgsave_in_progress | gauge | cls, ip, instance, ins, job |
rdb_bgsave_in_progress metric |
| redis_rdb_changes_since_last_save | gauge | cls, ip, instance, ins, job |
rdb_changes_since_last_save metric |
| redis_rdb_current_bgsave_duration_sec | gauge | cls, ip, instance, ins, job |
rdb_current_bgsave_duration_sec metric |
| redis_rdb_last_bgsave_duration_sec | gauge | cls, ip, instance, ins, job |
rdb_last_bgsave_duration_sec metric |
| redis_rdb_last_bgsave_status | gauge | cls, ip, instance, ins, job |
rdb_last_bgsave_status metric |
| redis_rdb_last_cow_size_bytes | gauge | cls, ip, instance, ins, job |
rdb_last_cow_size_bytes metric |
| redis_rdb_last_save_timestamp_seconds | gauge | cls, ip, instance, ins, job |
rdb_last_save_timestamp_seconds metric |
| redis_rejected_connections_total | counter | cls, ip, instance, ins, job |
rejected_connections_total metric |
| redis_repl_backlog_first_byte_offset | gauge | cls, ip, instance, ins, job |
repl_backlog_first_byte_offset metric |
| redis_repl_backlog_history_bytes | gauge | cls, ip, instance, ins, job |
repl_backlog_history_bytes metric |
| redis_repl_backlog_is_active | gauge | cls, ip, instance, ins, job |
repl_backlog_is_active metric |
| redis_replica_partial_resync_accepted | gauge | cls, ip, instance, ins, job |
replica_partial_resync_accepted metric |
| redis_replica_partial_resync_denied | gauge | cls, ip, instance, ins, job |
replica_partial_resync_denied metric |
| redis_replica_resyncs_full | gauge | cls, ip, instance, ins, job |
replica_resyncs_full metric |
| redis_replication_backlog_bytes | gauge | cls, ip, instance, ins, job |
replication_backlog_bytes metric |
| redis_second_repl_offset | gauge | cls, ip, instance, ins, job |
second_repl_offset metric |
| redis_sentinel_master_ckquorum_status | gauge | cls, ip, message, instance, ins, master_name, job |
Master ckquorum status |
| redis_sentinel_master_ok_sentinels | gauge | cls, ip, instance, ins, master_address, master_name, job |
The number of okay sentinels monitoring this master |
| redis_sentinel_master_ok_slaves | gauge | cls, ip, instance, ins, master_address, master_name, job |
The number of okay slaves of the master |
| redis_sentinel_master_sentinels | gauge | cls, ip, instance, ins, master_address, master_name, job |
The number of sentinels monitoring this master |
| redis_sentinel_master_setting_ckquorum | gauge | cls, ip, instance, ins, master_address, master_name, job |
Show the current ckquorum config for each master |
| redis_sentinel_master_setting_down_after_milliseconds | gauge | cls, ip, instance, ins, master_address, master_name, job |
Show the current down-after-milliseconds config for each master |
| redis_sentinel_master_setting_failover_timeout | gauge | cls, ip, instance, ins, master_address, master_name, job |
Show the current failover-timeout config for each master |
| redis_sentinel_master_setting_parallel_syncs | gauge | cls, ip, instance, ins, master_address, master_name, job |
Show the current parallel-syncs config for each master |
| redis_sentinel_master_slaves | gauge | cls, ip, instance, ins, master_address, master_name, job |
The number of slaves of the master |
| redis_sentinel_master_status | gauge | cls, ip, master_status, instance, ins, master_address, master_name, job |
Master status on Sentinel |
| redis_sentinel_masters | gauge | cls, ip, instance, ins, job |
The number of masters this sentinel is watching |
| redis_sentinel_running_scripts | gauge | cls, ip, instance, ins, job |
Number of scripts in execution right now |
| redis_sentinel_scripts_queue_length | gauge | cls, ip, instance, ins, job |
Queue of user scripts to execute |
| redis_sentinel_simulate_failure_flags | gauge | cls, ip, instance, ins, job |
Failures simulations |
| redis_sentinel_tilt | gauge | cls, ip, instance, ins, job |
Sentinel is in TILT mode |
| redis_slave_expires_tracked_keys | gauge | cls, ip, instance, ins, job |
slave_expires_tracked_keys metric |
| redis_slave_info | gauge | cls, ip, master_host, instance, read_only, ins, job, master_port |
Information about the Redis slave |
| redis_slave_priority | gauge | cls, ip, instance, ins, job |
slave_priority metric |
| redis_slave_repl_offset | gauge | cls, ip, master_host, instance, ins, job, master_port |
Slave replication offset |
| redis_slowlog_last_id | gauge | cls, ip, instance, ins, job |
Last id of slowlog |
| redis_slowlog_length | gauge | cls, ip, instance, ins, job |
Total slowlog |
| redis_start_time_seconds | gauge | cls, ip, instance, ins, job |
Start time of the Redis instance since unix epoch in seconds. |
| redis_target_scrape_request_errors_total | counter | cls, ip, instance, ins, job |
Errors in requests to the exporter |
| redis_total_error_replies | counter | cls, ip, instance, ins, job |
total_error_replies metric |
| redis_total_reads_processed | counter | cls, ip, instance, ins, job |
total_reads_processed metric |
| redis_total_system_memory_bytes | gauge | cls, ip, instance, ins, job |
total_system_memory_bytes metric |
| redis_total_writes_processed | counter | cls, ip, instance, ins, job |
total_writes_processed metric |
| redis_tracking_clients | gauge | cls, ip, instance, ins, job |
tracking_clients metric |
| redis_tracking_total_items | gauge | cls, ip, instance, ins, job |
tracking_total_items metric |
| redis_tracking_total_keys | gauge | cls, ip, instance, ins, job |
tracking_total_keys metric |
| redis_tracking_total_prefixes | gauge | cls, ip, instance, ins, job |
tracking_total_prefixes metric |
| redis_unexpected_error_replies | counter | cls, ip, instance, ins, job |
unexpected_error_replies metric |
| redis_up | gauge | cls, ip, instance, ins, job |
Information about the Redis instance |
| redis_uptime_in_seconds | gauge | cls, ip, instance, ins, job |
uptime_in_seconds metric |
| scrape_duration_seconds | Unknown | cls, ip, instance, ins, job |
N/A |
| scrape_samples_post_metric_relabeling | Unknown | cls, ip, instance, ins, job |
N/A |
| scrape_samples_scraped | Unknown | cls, ip, instance, ins, job |
N/A |
| scrape_series_added | Unknown | cls, ip, instance, ins, job |
N/A |
| up | Unknown | cls, ip, instance, ins, job |
N/A |
7 - 常见问题
Redis移除失败:ABORT due to redis_safeguard enabled
这意味着正准备移除的 Redis 实例打开了防误删保险:当 redis_safeguard 设置为 true 时,redis-rm.yml 会无条件拒绝执行。
该开关不会探测实例是否正在运行。
确认精确的 -l/redis_port 目标、近期备份以及 redis_rm_data 的取值后,通过 -e redis_safeguard=false 覆盖保护并执行移除。该参数只解除保险,不会替您验证目标或数据可恢复性。
如何在某个节点上添加一个新的Redis实例?
使用 bin/redis-add <ip> <port> 在节点上部署一个新的 redis 实例。
如何从节点上移除一个特定实例?
使用 bin/redis-rm <ip> <port> 从节点上移除一个单独的 redis 实例。
如何选择 Redis 或 Valkey?
当前源码默认使用 redis_type: redis,同时已经支持显式设置 redis_type: valkey。
角色会据此安装 redis 或 valkey 软件包,并在实例单元中调用对应的 redis-server / valkey-server 与 CLI;
配置路径、实例服务名、监控 job 和参数前缀仍保留 redis 命名空间。
默认 Redis 软件包继续采用 7.2 BSD 分支,不同操作系统渠道里的小版本可能不同,请以实际仓库元数据为准。 已有集群改用 Valkey 不等于自动迁移:切换前应核对目标版本的数据文件兼容性、复制与 Sentinel/Cluster 行为,并准备回滚方案。


