这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

模块:REDIS

Pigsty 内置了 Redis 支持,开源高性能缓存,可作为 PostgreSQL 的辅助与补充,支持主从、集群、哨兵三种模式。

Redis 是广为流行的开源“高性能”内存数据结构服务器,PostgreSQL 的好搭子。 Pigsty 中的 Redis 是一套生产就绪的完整解决方案,支持主从复制、哨兵高可用与原生集群模式,集成了监控与日志功能,并提供自动化的安装、配置与运维管理剧本。

1 - 参数列表

REDIS 模块提供了 21 个配置参数

REDIS 模块的参数列表。


参数概览

REDIS 参数组用于 Redis 集群的部署与配置,包括身份标识、实例定义、工作模式、内存配置、持久化以及监控。

参数类型级别说明
redis_clusterstringCRedis数据库集群名称,必选身份参数
redis_instancesdictIRedis节点上的实例定义
redis_nodeintIRedis节点编号,正整数,集群内唯一,必选身份参数
redis_fs_mainpathCRedis主数据目录,默认为 /data
redis_exporter_enabledboolCRedis Exporter 是否启用?
redis_exporter_portportCRedis Exporter监听端口
redis_exporter_optionsstringC/IRedis Exporter命令参数
redis_safeguardboolG/C/A禁止抹除现存的Redis
redis_cleanboolG/C/A初始化Redis是否抹除现存实例
redis_rmdataboolG/C/A移除Redis实例时是否一并移除数据?
redis_modeenumCRedis集群模式:sentinel,cluster,standalone
redis_confstringCRedis配置文件模板,sentinel 除外
redis_bind_addressipCRedis监听地址,默认留空则会绑定主机IP
redis_max_memorysizeC/IRedis可用的最大内存
redis_mem_policyenumCRedis内存逐出策略
redis_passwordpasswordCRedis密码,默认留空则禁用密码
redis_rdb_savestring[]CRedis RDB 保存指令,字符串列表,空数组则禁用RDB
redis_aof_enabledboolCRedis AOF 是否启用?
redis_rename_commandsdictCRedis危险命令重命名列表
redis_cluster_replicasintCRedis原生集群中每个主库配几个从库?
redis_sentinel_monitormaster[]CRedis哨兵监控的主库列表,只在哨兵集群上使用

Redis 模块包含了21个配置参数。

#redis_cluster:             <集群> # Redis数据库集群名称,必选身份参数
#redis_node: 1              <节点> # Redis节点上的实例定义
#redis_instances: {}        <节点> # Redis节点编号,正整数,集群内唯一,必选身份参数
redis_fs_main: /data              # Redis主数据目录,默认为 `/data`
redis_exporter_enabled: true      # Redis Exporter 是否启用?
redis_exporter_port: 9121         # Redis Exporter监听端口
redis_exporter_options: ''        # Redis Exporter命令参数
redis_safeguard: false            # 禁止抹除现存的Redis
redis_clean: true                 # 初始化Redis是否抹除现存实例
redis_rmdata: true                # 移除Redis实例时是否一并移除数据?
redis_mode: standalone            # Redis集群模式:sentinel,cluster,standalone
redis_conf: redis.conf            # Redis配置文件模板,sentinel 除外
redis_bind_address: '0.0.0.0'     # Redis监听地址,默认留空则会绑定主机IP
redis_max_memory: 1GB             # Redis可用的最大内存
redis_mem_policy: allkeys-lru     # Redis内存逐出策略
redis_password: ''                # Redis密码,默认留空则禁用密码
redis_rdb_save: ['1200 1']        # Redis RDB 保存指令,字符串列表,空数组则禁用RDB
redis_aof_enabled: false          # Redis AOF 是否启用?
redis_rename_commands: {}         # Redis危险命令重命名列表
redis_cluster_replicas: 1         # Redis原生集群中每个主库配几个从库?
redis_sentinel_monitor: []        # Redis哨兵监控的主库列表,仅用于哨兵集群

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-test: # redis native cluster: 3m x 3s
  hosts:
    10.10.10.12: { redis_node: 1 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
    10.10.10.13: { redis_node: 2 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
  vars: { redis_cluster: redis-test ,redis_password: 'redis.test' ,redis_mode: cluster, redis_max_memory: 32MB }

每一个Redis实例在对应节点上监听一个唯一端口,实例配置项中replica_of 用于设置一个实例的上游主库地址,构建主从复制关系。

redis_instances:
    6379: {}
    6380: { replica_of: '10.10.10.13 6379' }
    6381: { replica_of: '10.10.10.13 6379' }

redis_fs_main

参数名称: redis_fs_main, 类型: path, 层次:C

Redis使用的主数据盘挂载点,默认为/data,Pigsty会在该目录下创建redis目录,用于存放Redis数据。

所以实际存储数据的目录为 /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_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_safeguard

参数名称: redis_safeguard, 类型: bool, 层次:G/C/A

Redis的防误删安全保险开关:打开后无法使用剧本抹除正在运行的 Redis 实例。

默认值为 false,如果设置为 true,那么当剧本遇到正在运行的 Redis 实例时,会中止初始化/抹除的操作,避免误删。

redis_clean

参数名称: redis_clean, 类型: bool, 层次:G/C/A

Redis清理开关:是否在初始化的过程中抹除运行中的Redis实例?默认值为:true

剧本 redis.yml 会在执行时抹除具有相同定义的现有 Redis 实例,这样可以保证剧本的幂等性。

如果您不希望 redis.yml 这样做,可以将此参数设置为 false,那么当剧本遇到正在运行的 Redis 实例时,会中止初始化/抹除的操作,避免误删。

如果安全保险参数 redis_safeguard 已经打开,那么本参数的优先级低于该参数。

redis_rmdata

参数名称: redis_rmdata, 类型: bool, 层次:G/C/A

移除 Redis 实例的时候,是否一并移除 Redis 数据目录?默认为 true

数据目录包含了 Redis 的 RDB与AOF文件,如果不抹除它们,那么新拉起的 Redis 实例将会从这些备份文件中加载数据。

该参数仅在 redis_cleantrue 且未开启 redis_safeguard 时生效(参见 roles/redis/tasks/instance.yml 第 40~60 行),否则剧本不会触碰既有数据目录。

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.yml 第 80130 行)将 redis_sentinel_monitor 中的目标批量下发到所有哨兵;当 redis_mode=cluster 时还会执行 redis-join 阶段(redis.yml 第 134180 行)调用 redis-cli --cluster create --cluster-yes ... --cluster-replicas {{ redis_cluster_replicas }}。这两个阶段均在普通 ./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_exporterREDIS_PASSWORD=...)并在 redis-ha 阶段用于 redis-cli -a <password>,因此无需重复配置 exporter 或 Sentinel 的认证口令。

请在生产环境中使用强密码

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是重命名后的名字。

默认值:{},你可以通过设置此值来隐藏像 FLUSHDBFLUSHALL 这样的危险命令,下面是一个例子:

{
  "keys": "op_keys",
  "flushdb": "op_flushdb",
  "flushall": "op_flushall",
  "config": "op_config"  
}

redis_cluster_replicas

参数名称: redis_cluster_replicas, 类型: int, 层次:C

在 Redis 原生集群中,应当为一个 Master/Primary 实例配置多少个从库?默认值为: 1,即每个主库配一个从库。

redis_sentinel_monitor

参数名称: redis_sentinel_monitor, 类型: master[], 层次:C

Redis哨兵监控的主库列表,只在哨兵集群上使用。每个待纳管的主库定义方式如下所示:

redis_sentinel_monitor:  # primary list for redis sentinel, use cls as name, primary ip:port
  - { name: redis-src, host: 10.10.10.45, port: 6379 ,password: redis.src, quorum: 1 }
  - { name: redis-dst, host: 10.10.10.48, port: 6379 ,password: redis.dst, quorum: 1 }

其中,namehost 是必选参数,portpasswordquorum 是可选参数,quorum 用于设置判定主库失效所需的法定人数数,通常大于哨兵实例数的一半(默认为1)。

从 Pigsty 4.0 开始还可以为某个条目添加 remove: true,此时 redis-ha 阶段只会执行 SENTINEL REMOVE <name>,用于清理不再需要的目标。

2 - 集群配置

根据需求场景选择合适的 Redis 模式,并通过配置清单表达您的需求

概念

Redis的实体概念模型与PostgreSQL几乎相同,同样包括 集群(Cluster)实例(Instance) 的概念。注意这里的Cluster指的不是Redis原生集群方案中的集群。

REDIS模块与PGSQL模块核心的区别在于,Redis通常采用 单机多实例 部署,而不是 PostgreSQL 的 1:1 部署:一个物理/虚拟机节点上通常会部署 多个 Redis实例,以充分利用多核CPU。因此配置管理Redis实例的方式与PGSQL稍有不同。

在Pigsty管理的Redis中,节点完全隶属于集群,即目前尚不允许在一个节点上部署两个不同集群的Redis实例,但这并不影响您在在一个节点上部署多个独立 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-ms: # redis 经典主从集群
  hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
  vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }

redis-meta: # redis 哨兵 x 3
  hosts: { 10.10.10.11: { redis_node: 1 , redis_instances: { 26379: { } ,26380: { } ,26381: { } } } }
  vars:
    redis_cluster: redis-meta
    redis_password: 'redis.meta'
    redis_mode: sentinel
    redis_max_memory: 16MB
    redis_sentinel_monitor: # primary list for redis sentinel, use cls as name, primary ip:port
      - { name: redis-ms, host: 10.10.10.10, port: 6379 ,password: redis.ms, quorum: 2 }

redis-test: # redis 原生集群: 3主 x 3从
  hosts:
    10.10.10.12: { redis_node: 1 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
    10.10.10.13: { redis_node: 2 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
  vars: { redis_cluster: redis-test ,redis_password: 'redis.test' ,redis_mode: cluster, redis_max_memory: 32MB }

局限性

  • 一个节点只能属于一个 Redis 集群,这意味着您不能将一个节点同时分配给两个不同的Redis集群。
  • 在每个 Redis 节点上,您需要为 Redis实例 分配唯一的端口号,避免端口冲突。
  • 通常同一个 Reids 集群会使用同一个密码,但一个 Redis节点上的多个 Redis 实例无法设置不同的密码(因为 redis_exporter 只允许使用一个密码0
  • Redis Cluster自带高可用,而Redis主从的高可用需要在 Sentinel 中额外进行手工配置:因为我们不知道您是否会部署 Sentinel。
  • 好在配置 Redis 主从实例的高可用非常简单,可以通过Sentinel进行配置,详情请参考管理-设置Redis主从高可用



3 - 预置剧本

如何使用预置的 ansible 剧本来管理 Redis 集群,常用管理命令速查。

REDIS模块提供了两个剧本,用于拉起/销毁 传统主从Redis集群/节点/实例:


redis.yml

用于初始化 Redis 的 redis.yml 剧本包含以下子任务:

redis_node        : 初始化redis节点
  - redis_install : 安装redis & redis_exporter
  - redis_user    : 创建操作系统用户 redis
  - redis_dir     : 配置 redis的FHS目录结构
redis_exporter    : 配置 redis_exporter 监控
  - redis_exporter_config  : 生成redis_exporter配置
  - redis_exporter_launch  : 启动redis_exporter
redis_instance    : 初始化并重启redis集群/节点/实例
  - redis_check   : 检查redis实例是否存在
  - redis_clean   : 清除现有的redis实例
  - redis_config  : 生成redis实例配置
  - redis_launch  : 启动redis实例
redis_register    : 将redis注册到基础设施中(向 VictoriaMetrics 写入 `/infra/targets/redis/*.yml` 并为 Vector 渲染 `/etc/vector/redis.yaml`redis_ha          : 配置redis哨兵
redis_join        : 加入redis集群

示例:使用Redis剧本初始化Redis集群

asciicast


redis-rm.yml

用于卸载 Redis 的 redis-rm.yml 剧本包含以下子任务:

redis_deregister : 从 VictoriaMetrics 与 Vector 中移除注册信息(删除 /infra/targets/redis/*.yml、撤销 /etc/vector/redis.yaml)
redis_exporter   : 停止并禁用 redis_exporter
redis            : 停止并禁用 redis 集群 / 节点 / 实例
redis_data       : 根据 redis_clean / redis_port 的配置删除数据目录(RDB/AOF)
redis_pkg        : 卸载 redis & redis_exporter 软件包,仅当 redis_uninstall=true 时执行

4 - 管理预案

Redis 集群管理 SOP,创建、销毁、扩容、缩容与高可用的详细说明

以下是一些常见的 Redis 管理任务 SOP(预案):

更多问题请参考 FAQ:REDIS


初始化Redis

您可以使用 redis.yml 剧本来初始化 Redis 集群、节点、或实例:

# 初始化集群内所有 Redis 实例
./redis.yml -l <cluster>      # 初始化 redis 集群

# 初始化特定节点上的所有 Redis 实例
./redis.yml -l 10.10.10.10    # 初始化 redis 节点

# 初始化特定 Redis 实例:  10.10.10.11:6379
./redis.yml -l 10.10.10.11 -e redis_port=6379 -t redis

你也可以使用包装脚本命令行脚本来初始化:

bin/redis-add redis-ms          # 初始化 redis 集群 'redis-ms'
bin/redis-add 10.10.10.10       # 初始化 redis 节点 '10.10.10.10'
bin/redis-add 10.10.10.10 6379  # 初始化 redis 实例 '10.10.10.10:6379'

下线Redis

您可以使用 redis-rm.yml 剧本来下线 Redis 集群、节点、或实例:

# 下线 Redis 集群 `redis-test`
./redis-rm.yml -l redis-test

# 下线 Redis 集群 `redis-test` 并卸载 Redis 软件包
./redis-rm.yml -l redis-test -e redis_uninstall=true

# 下线 Redis 节点 10.10.10.13 上的所有实例
./redis-rm.yml -l 10.10.10.13

# 下线特定 Redis 实例 10.10.10.13:6379
./redis-rm.yml -l 10.10.10.13 -e redis_port=6379

你也可以使用包装脚本来下线 Redis 集群/节点/实例:

bin/redis-rm redis-ms          # 下线 redis 集群 'redis-ms'
bin/redis-rm 10.10.10.10       # 下线 redis 节点 '10.10.10.10'
bin/redis-rm 10.10.10.10 6379  # 下线 redis 实例 '10.10.10.10:6379'

重新配置Redis

您可以部分执行 redis.yml 剧本来重新配置 Redis 集群、节点、或实例:

./redis.yml -l <cluster> -t redis_config,redis_launch

请注意,redis 无法在线重载配置,您只能使用 launch 任务进行重启来让配置生效。


使用Redis客户端

使用 redis-cli 访问 Reids 实例:

$ redis-cli -h 10.10.10.10 -p 6379 # <--- 使用 Host 与 Port 访问对应 Redis 实例
10.10.10.10:6379> auth redis.ms    # <--- 使用密码验证
OK
10.10.10.10:6379> set a 10         # <--- 设置一个Key
OK
10.10.10.10:6379> get a            # <--- 获取 Key 的值
"10"

Redis提供了redis-benchmark工具,可以用于Redis的性能评估,或生成一些负载用于测试。

redis-benchmark -h 10.10.10.13 -p 6379

手工设置Redis从库

https://redis.io/commands/replicaof/

# 将一个 Redis 实例提升为主库
> REPLICAOF NO ONE
"OK"

# 将一个 Redis 实例设置为另一个实例的从库
> REPLICAOF 127.0.0.1 6799
"OK"

设置Redis主从高可用

Redis独立主从集群可以通过 Redis 哨兵集群配置自动高可用,详细用户请参考 Sentinel官方文档

以四节点沙箱环境为例,一套 Redis Sentinel 集群 redis-meta,可以用来管理很多套独立 Redis 主从集群。

以一主一从的Redis普通主从集群 redis-ms 为例,您需要在每个 Sentinel 实例上,使用 SENTINEL MONITOR 添加目标,并使用 SENTINEL SET 提供密码,高可用就配置完毕了。

# 对于每一个 sentinel,将 redis 主服务器纳入哨兵管理:(26379,26380,26381)
$ redis-cli -h 10.10.10.11 -p 26379 -a redis.meta
10.10.10.11:26379> SENTINEL MONITOR redis-ms 10.10.10.10 6379 1
10.10.10.11:26379> SENTINEL SET redis-ms auth-pass redis.ms      # 如果启用了授权,需要配置密码

如果您想移除某个由 Sentinel 管理的 Redis 主从集群,使用 SENTINEL REMOVE <name> 移除即可。

您可以使用定义在 Sentinel 集群上的 redis_sentinel_monitor 参数,来自动配置管理哨兵监控管理的主库列表。

redis_sentinel_monitor:  # 需要被监控的主库列表,端口、密码、法定人数(应为1/2以上的哨兵数量)为可选参数
  - { name: redis-src, host: 10.10.10.45, port: 6379 ,password: redis.src, quorum: 1 }
  - { name: redis-dst, host: 10.10.10.48, port: 6379 ,password: redis.dst, quorum: 1 }

redis.yml 中的 redis-ha 阶段会根据该列表在每个哨兵实例上渲染 /tmp/<cluster>.monitor 并依次执行 SENTINEL REMOVESENTINEL MONITOR 命令, 从而保证哨兵纳管状态与清单保持一致。如果只想移除某个目标而不再重新添加,可以在监控对象上设置 remove: true,剧本会在 SENTINEL REMOVE 后跳过重新注册。

使用以下命令刷新 Redis 哨兵集群上的纳管主库列表:

./redis.yml -l redis-meta -t redis-ha   # 如果您的 Sentinel 集群名称不是 redis-meta,请在这里替换。

初始化 Redis 原生集群

redis_mode 设置为 cluster 时,redis.yml 会额外执行 redis-join 阶段 : 在 /tmp/<cluster>-join.sh 中使用 redis-cli --cluster create --cluster-yes ... --cluster-replicas {{ redis_cluster_replicas }} 把所有实例拼成原生集群。 该步骤在首次部署时自动运行,后续重新执行 ./redis.yml -l <cluster> -t redis-join 将再次生成并运行相同命令; 由于 --cluster create 并非幂等操作, 只有在你确认需要重建整个原生集群时才应单独触发这一阶段。

5 - 监控告警

如何监控 redis?有哪些告警规则值得关注?

监控面板

REDIS 模块提供了 3 个监控面板

  • Redis Overview:redis 集群概览
  • Redis Cluster:redis 集群详情
  • Redis Instance:redis 实例详情

监控

Pigsty 提供了三个与 REDIS 模块有关的监控仪表盘:


Redis Overview

Redis Overview:关于所有Redis集群/实例的详细信息

redis-overview.jpg


Redis Cluster

Redis Cluster:关于单个Redis集群的详细信息

Redis Cluster Dashboard

redis-cluster.jpg



Redis Instance

Redis Instance: 关于单个Redis实例的详细信息

Redis Instance Dashboard

redis-instance



告警规则

Pigsty 针对 redis 提供了以下六条预置告警规则,定义于 files/victoria/rules/redis.yml

  • RedisDown:redis 实例不可用
  • RedisRejectConn:redis 实例拒绝连接
  • RedisRTHigh:redis 实例响应时间过高
  • RedisCPUHigh:redis 实例 CPU 使用率过高
  • RedisMemHigh:redis 实例内存使用率过高
  • RedisQPSHigh:redis 实例 QPS 过高
#==============================================================#
#                         Error                                #
#==============================================================#
# redis down triggers a P0 alert
- alert: RedisDown
  expr: redis_up < 1
  for: 1m
  labels: { level: 0, severity: CRIT, category: redis }
  annotations:
    summary: "CRIT RedisDown: {{ $labels.ins }} {{ $labels.instance }} {{ $value }}"
    description: |
      redis_up[ins={{ $labels.ins }}, instance={{ $labels.instance }}] = {{ $value }} == 0
      http://g.pigsty/d/redis-instance?from=now-5m&to=now&var-ins={{$labels.ins}}

# redis reject connection in last 5m
- alert: RedisRejectConn
  expr: redis:ins:conn_reject > 0
  labels: { level: 0, severity: CRIT, category: redis }
  annotations:
    summary: "CRIT RedisRejectConn: {{ $labels.ins }} {{ $labels.instance }} {{ $value }}"
    description: |
      redis:ins:conn_reject[cls={{ $labels.cls }}, ins={{ $labels.ins }}][5m] = {{ $value }} > 0
      http://g.pigsty/d/redis-instance?from=now-10m&to=now&viewPanel=88&fullscreen&var-ins={{ $labels.ins }}



#==============================================================#
#                         Latency                              #
#==============================================================#
# redis avg query response time > 160 µs
- alert: RedisRTHigh
  expr: redis:ins:rt > 0.00016
  for: 1m
  labels: { level: 1, severity: WARN, category: redis }
  annotations:
    summary: "WARN RedisRTHigh: {{ $labels.cls }} {{ $labels.ins }}"
    description: |
      pg:ins:query_rt[cls={{ $labels.cls }}, ins={{ $labels.ins }}] = {{ $value }} > 160µs
      http://g.pigsty/d/redis-instance?from=now-10m&to=now&viewPanel=97&fullscreen&var-ins={{ $labels.ins }}



#==============================================================#
#                        Saturation                            #
#==============================================================#
# redis cpu usage more than 70% for 1m
- alert: RedisCPUHigh
  expr: redis:ins:cpu_usage > 0.70
  for: 1m
  labels: { level: 1, severity: WARN, category: redis }
  annotations:
    summary: "WARN RedisCPUHigh: {{ $labels.cls }} {{ $labels.ins }}"
    description: |
      redis:ins:cpu_all[cls={{ $labels.cls }}, ins={{ $labels.ins }}] = {{ $value }} > 60%
      http://g.pigsty/d/redis-instance?from=now-10m&to=now&viewPanel=43&fullscreen&var-ins={{ $labels.ins }}

# redis mem usage more than 70% for 1m
- alert: RedisMemHigh
  expr: redis:ins:mem_usage > 0.70
  for: 1m
  labels: { level: 1, severity: WARN, category: redis }
  annotations:
    summary: "WARN RedisMemHigh: {{ $labels.cls }} {{ $labels.ins }}"
    description: |
      redis:ins:mem_usage[cls={{ $labels.cls }}, ins={{ $labels.ins }}] = {{ $value }} > 80%
      http://g.pigsty/d/redis-instance?from=now-10m&to=now&viewPanel=7&fullscreen&var-ins={{ $labels.ins }}

#==============================================================#
#                         Traffic                              #
#==============================================================#
# redis qps more than 32000 for 5m
- alert: RedisQPSHigh
  expr: redis:ins:qps > 32000
  for: 5m
  labels: { level: 2, severity: INFO, category: redis }
  annotations:
    summary: "INFO RedisQPSHigh: {{ $labels.cls }} {{ $labels.ins }}"
    description: |
      redis:ins:qps[cls={{ $labels.cls }}, ins={{ $labels.ins }}] = {{ $value }} > 16000
      http://g.pigsty/d/redis-instance?from=now-10m&to=now&viewPanel=96&fullscreen&var-ins={{ $labels.ins }}

6 - 指标列表

Pigsty REDIS 模块提供的完整监控指标列表与释义

REDIS 模块包含有 275 类可用监控指标。

Metric NameTypeLabelsDescription
ALERTSUnknowncls, ip, level, severity, instance, category, ins, alertname, job, alertstateN/A
ALERTS_FOR_STATEUnknowncls, ip, level, severity, instance, category, ins, alertname, jobN/A
redis:cls:aof_rewrite_timeUnknowncls, jobN/A
redis:cls:blocked_clientsUnknowncls, jobN/A
redis:cls:clientsUnknowncls, jobN/A
redis:cls:cmd_qpsUnknowncls, cmd, jobN/A
redis:cls:cmd_rtUnknowncls, cmd, jobN/A
redis:cls:cmd_timeUnknowncls, cmd, jobN/A
redis:cls:conn_rateUnknowncls, jobN/A
redis:cls:conn_rejectUnknowncls, jobN/A
redis:cls:cpu_sysUnknowncls, jobN/A
redis:cls:cpu_sys_childUnknowncls, jobN/A
redis:cls:cpu_usageUnknowncls, jobN/A
redis:cls:cpu_usage_childUnknowncls, jobN/A
redis:cls:cpu_userUnknowncls, jobN/A
redis:cls:cpu_user_childUnknowncls, jobN/A
redis:cls:fork_timeUnknowncls, jobN/A
redis:cls:key_evictUnknowncls, jobN/A
redis:cls:key_expireUnknowncls, jobN/A
redis:cls:key_hitUnknowncls, jobN/A
redis:cls:key_hit_rateUnknowncls, jobN/A
redis:cls:key_missUnknowncls, jobN/A
redis:cls:mem_maxUnknowncls, jobN/A
redis:cls:mem_usageUnknowncls, jobN/A
redis:cls:mem_usage_maxUnknowncls, jobN/A
redis:cls:mem_usedUnknowncls, jobN/A
redis:cls:net_trafficUnknowncls, jobN/A
redis:cls:qpsUnknowncls, jobN/A
redis:cls:qps_muUnknowncls, jobN/A
redis:cls:qps_realtimeUnknowncls, jobN/A
redis:cls:qps_sigmaUnknowncls, jobN/A
redis:cls:rtUnknowncls, jobN/A
redis:cls:rt_muUnknowncls, jobN/A
redis:cls:rt_sigmaUnknowncls, jobN/A
redis:cls:rxUnknowncls, jobN/A
redis:cls:sizeUnknowncls, jobN/A
redis:cls:txUnknowncls, jobN/A
redis:env:blocked_clientsUnknownjobN/A
redis:env:clientsUnknownjobN/A
redis:env:cmd_qpsUnknowncmd, jobN/A
redis:env:cmd_rtUnknowncmd, jobN/A
redis:env:cmd_timeUnknowncmd, jobN/A
redis:env:conn_rateUnknownjobN/A
redis:env:conn_rejectUnknownjobN/A
redis:env:cpu_usageUnknownjobN/A
redis:env:cpu_usage_childUnknownjobN/A
redis:env:key_evictUnknownjobN/A
redis:env:key_expireUnknownjobN/A
redis:env:key_hitUnknownjobN/A
redis:env:key_hit_rateUnknownjobN/A
redis:env:key_missUnknownjobN/A
redis:env:mem_usageUnknownjobN/A
redis:env:net_trafficUnknownjobN/A
redis:env:qpsUnknownjobN/A
redis:env:qps_muUnknownjobN/A
redis:env:qps_realtimeUnknownjobN/A
redis:env:qps_sigmaUnknownjobN/A
redis:env:rtUnknownjobN/A
redis:env:rt_muUnknownjobN/A
redis:env:rt_sigmaUnknownjobN/A
redis:env:rxUnknownjobN/A
redis:env:txUnknownjobN/A
redis:insUnknowncls, id, instance, ins, jobN/A
redis:ins:blocked_clientsUnknowncls, ip, instance, ins, jobN/A
redis:ins:clientsUnknowncls, ip, instance, ins, jobN/A
redis:ins:cmd_qpsUnknowncls, cmd, ip, instance, ins, jobN/A
redis:ins:cmd_rtUnknowncls, cmd, ip, instance, ins, jobN/A
redis:ins:cmd_timeUnknowncls, cmd, ip, instance, ins, jobN/A
redis:ins:conn_rateUnknowncls, ip, instance, ins, jobN/A
redis:ins:conn_rejectUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_sysUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_sys_childUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_usageUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_usage_childUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_userUnknowncls, ip, instance, ins, jobN/A
redis:ins:cpu_user_childUnknowncls, ip, instance, ins, jobN/A
redis:ins:key_evictUnknowncls, ip, instance, ins, jobN/A
redis:ins:key_expireUnknowncls, ip, instance, ins, jobN/A
redis:ins:key_hitUnknowncls, ip, instance, ins, jobN/A
redis:ins:key_hit_rateUnknowncls, ip, instance, ins, jobN/A
redis:ins:key_missUnknowncls, ip, instance, ins, jobN/A
redis:ins:lsn_rateUnknowncls, ip, instance, ins, jobN/A
redis:ins:mem_usageUnknowncls, ip, instance, ins, jobN/A
redis:ins:net_trafficUnknowncls, ip, instance, ins, jobN/A
redis:ins:qpsUnknowncls, ip, instance, ins, jobN/A
redis:ins:qps_muUnknowncls, ip, instance, ins, jobN/A
redis:ins:qps_realtimeUnknowncls, ip, instance, ins, jobN/A
redis:ins:qps_sigmaUnknowncls, ip, instance, ins, jobN/A
redis:ins:rtUnknowncls, ip, instance, ins, jobN/A
redis:ins:rt_muUnknowncls, ip, instance, ins, jobN/A
redis:ins:rt_sigmaUnknowncls, ip, instance, ins, jobN/A
redis:ins:rxUnknowncls, ip, instance, ins, jobN/A
redis:ins:txUnknowncls, ip, instance, ins, jobN/A
redis:node:ipUnknowncls, ip, instance, ins, jobN/A
redis:node:mem_allocUnknowncls, ip, jobN/A
redis:node:mem_totalUnknowncls, ip, jobN/A
redis:node:mem_usedUnknowncls, ip, jobN/A
redis:node:qpsUnknowncls, ip, jobN/A
redis_active_defrag_runninggaugecls, ip, instance, ins, jobactive_defrag_running metric
redis_allocator_active_bytesgaugecls, ip, instance, ins, joballocator_active_bytes metric
redis_allocator_allocated_bytesgaugecls, ip, instance, ins, joballocator_allocated_bytes metric
redis_allocator_frag_bytesgaugecls, ip, instance, ins, joballocator_frag_bytes metric
redis_allocator_frag_ratiogaugecls, ip, instance, ins, joballocator_frag_ratio metric
redis_allocator_resident_bytesgaugecls, ip, instance, ins, joballocator_resident_bytes metric
redis_allocator_rss_bytesgaugecls, ip, instance, ins, joballocator_rss_bytes metric
redis_allocator_rss_ratiogaugecls, ip, instance, ins, joballocator_rss_ratio metric
redis_aof_current_rewrite_duration_secgaugecls, ip, instance, ins, jobaof_current_rewrite_duration_sec metric
redis_aof_enabledgaugecls, ip, instance, ins, jobaof_enabled metric
redis_aof_last_bgrewrite_statusgaugecls, ip, instance, ins, jobaof_last_bgrewrite_status metric
redis_aof_last_cow_size_bytesgaugecls, ip, instance, ins, jobaof_last_cow_size_bytes metric
redis_aof_last_rewrite_duration_secgaugecls, ip, instance, ins, jobaof_last_rewrite_duration_sec metric
redis_aof_last_write_statusgaugecls, ip, instance, ins, jobaof_last_write_status metric
redis_aof_rewrite_in_progressgaugecls, ip, instance, ins, jobaof_rewrite_in_progress metric
redis_aof_rewrite_scheduledgaugecls, ip, instance, ins, jobaof_rewrite_scheduled metric
redis_blocked_clientsgaugecls, ip, instance, ins, jobblocked_clients metric
redis_client_recent_max_input_buffer_bytesgaugecls, ip, instance, ins, jobclient_recent_max_input_buffer_bytes metric
redis_client_recent_max_output_buffer_bytesgaugecls, ip, instance, ins, jobclient_recent_max_output_buffer_bytes metric
redis_clients_in_timeout_tablegaugecls, ip, instance, ins, jobclients_in_timeout_table metric
redis_cluster_connectionsgaugecls, ip, instance, ins, jobcluster_connections metric
redis_cluster_current_epochgaugecls, ip, instance, ins, jobcluster_current_epoch metric
redis_cluster_enabledgaugecls, ip, instance, ins, jobcluster_enabled metric
redis_cluster_known_nodesgaugecls, ip, instance, ins, jobcluster_known_nodes metric
redis_cluster_messages_received_totalgaugecls, ip, instance, ins, jobcluster_messages_received_total metric
redis_cluster_messages_sent_totalgaugecls, ip, instance, ins, jobcluster_messages_sent_total metric
redis_cluster_my_epochgaugecls, ip, instance, ins, jobcluster_my_epoch metric
redis_cluster_sizegaugecls, ip, instance, ins, jobcluster_size metric
redis_cluster_slots_assignedgaugecls, ip, instance, ins, jobcluster_slots_assigned metric
redis_cluster_slots_failgaugecls, ip, instance, ins, jobcluster_slots_fail metric
redis_cluster_slots_okgaugecls, ip, instance, ins, jobcluster_slots_ok metric
redis_cluster_slots_pfailgaugecls, ip, instance, ins, jobcluster_slots_pfail metric
redis_cluster_stategaugecls, ip, instance, ins, jobcluster_state metric
redis_cluster_stats_messages_meet_receivedgaugecls, ip, instance, ins, jobcluster_stats_messages_meet_received metric
redis_cluster_stats_messages_meet_sentgaugecls, ip, instance, ins, jobcluster_stats_messages_meet_sent metric
redis_cluster_stats_messages_ping_receivedgaugecls, ip, instance, ins, jobcluster_stats_messages_ping_received metric
redis_cluster_stats_messages_ping_sentgaugecls, ip, instance, ins, jobcluster_stats_messages_ping_sent metric
redis_cluster_stats_messages_pong_receivedgaugecls, ip, instance, ins, jobcluster_stats_messages_pong_received metric
redis_cluster_stats_messages_pong_sentgaugecls, ip, instance, ins, jobcluster_stats_messages_pong_sent metric
redis_commands_duration_seconds_totalcountercls, cmd, ip, instance, ins, jobTotal amount of time in seconds spent per command
redis_commands_failed_calls_totalcountercls, cmd, ip, instance, ins, jobTotal number of errors prior command execution per command
redis_commands_latencies_usec_bucketUnknowncls, cmd, ip, le, instance, ins, jobN/A
redis_commands_latencies_usec_countUnknowncls, cmd, ip, instance, ins, jobN/A
redis_commands_latencies_usec_sumUnknowncls, cmd, ip, instance, ins, jobN/A
redis_commands_processed_totalcountercls, ip, instance, ins, jobcommands_processed_total metric
redis_commands_rejected_calls_totalcountercls, cmd, ip, instance, ins, jobTotal number of errors within command execution per command
redis_commands_totalcountercls, cmd, ip, instance, ins, jobTotal number of calls per command
redis_config_io_threadsgaugecls, ip, instance, ins, jobconfig_io_threads metric
redis_config_maxclientsgaugecls, ip, instance, ins, jobconfig_maxclients metric
redis_config_maxmemorygaugecls, ip, instance, ins, jobconfig_maxmemory metric
redis_connected_clientsgaugecls, ip, instance, ins, jobconnected_clients metric
redis_connected_slave_lag_secondsgaugecls, ip, slave_ip, instance, slave_state, ins, slave_port, jobLag of connected slave
redis_connected_slave_offset_bytesgaugecls, ip, slave_ip, instance, slave_state, ins, slave_port, jobOffset of connected slave
redis_connected_slavesgaugecls, ip, instance, ins, jobconnected_slaves metric
redis_connections_received_totalcountercls, ip, instance, ins, jobconnections_received_total metric
redis_cpu_sys_children_seconds_totalcountercls, ip, instance, ins, jobcpu_sys_children_seconds_total metric
redis_cpu_sys_main_thread_seconds_totalcountercls, ip, instance, ins, jobcpu_sys_main_thread_seconds_total metric
redis_cpu_sys_seconds_totalcountercls, ip, instance, ins, jobcpu_sys_seconds_total metric
redis_cpu_user_children_seconds_totalcountercls, ip, instance, ins, jobcpu_user_children_seconds_total metric
redis_cpu_user_main_thread_seconds_totalcountercls, ip, instance, ins, jobcpu_user_main_thread_seconds_total metric
redis_cpu_user_seconds_totalcountercls, ip, instance, ins, jobcpu_user_seconds_total metric
redis_db_keysgaugecls, ip, instance, ins, db, jobTotal number of keys by DB
redis_db_keys_expiringgaugecls, ip, instance, ins, db, jobTotal number of expiring keys by DB
redis_defrag_hitsgaugecls, ip, instance, ins, jobdefrag_hits metric
redis_defrag_key_hitsgaugecls, ip, instance, ins, jobdefrag_key_hits metric
redis_defrag_key_missesgaugecls, ip, instance, ins, jobdefrag_key_misses metric
redis_defrag_missesgaugecls, ip, instance, ins, jobdefrag_misses metric
redis_dump_payload_sanitizationscountercls, ip, instance, ins, jobdump_payload_sanitizations metric
redis_errors_totalcountercls, ip, err, instance, ins, jobTotal number of errors per error type
redis_evicted_keys_totalcountercls, ip, instance, ins, jobevicted_keys_total metric
redis_expired_keys_totalcountercls, ip, instance, ins, jobexpired_keys_total metric
redis_expired_stale_percentagegaugecls, ip, instance, ins, jobexpired_stale_percentage metric
redis_expired_time_cap_reached_totalgaugecls, ip, instance, ins, jobexpired_time_cap_reached_total metric
redis_exporter_build_infogaugecls, golang_version, ip, commit_sha, instance, version, ins, job, build_dateredis exporter build_info
redis_exporter_last_scrape_connect_time_secondsgaugecls, ip, instance, ins, jobexporter_last_scrape_connect_time_seconds metric
redis_exporter_last_scrape_duration_secondsgaugecls, ip, instance, ins, jobexporter_last_scrape_duration_seconds metric
redis_exporter_last_scrape_errorgaugecls, ip, instance, ins, jobThe last scrape error status.
redis_exporter_scrape_duration_seconds_countUnknowncls, ip, instance, ins, jobN/A
redis_exporter_scrape_duration_seconds_sumUnknowncls, ip, instance, ins, jobN/A
redis_exporter_scrapes_totalcountercls, ip, instance, ins, jobCurrent total redis scrapes.
redis_instance_infogaugecls, ip, os, role, instance, run_id, redis_version, tcp_port, process_id, ins, redis_mode, maxmemory_policy, redis_build_id, jobInformation about the Redis instance
redis_io_threaded_reads_processedcountercls, ip, instance, ins, jobio_threaded_reads_processed metric
redis_io_threaded_writes_processedcountercls, ip, instance, ins, jobio_threaded_writes_processed metric
redis_io_threads_activegaugecls, ip, instance, ins, jobio_threads_active metric
redis_keyspace_hits_totalcountercls, ip, instance, ins, jobkeyspace_hits_total metric
redis_keyspace_misses_totalcountercls, ip, instance, ins, jobkeyspace_misses_total metric
redis_last_key_groups_scrape_duration_millisecondsgaugecls, ip, instance, ins, jobDuration of the last key group metrics scrape in milliseconds
redis_last_slow_execution_duration_secondsgaugecls, ip, instance, ins, jobThe amount of time needed for last slow execution, in seconds
redis_latency_percentiles_usecsummarycls, cmd, ip, instance, quantile, ins, jobA summary of latency percentile distribution per command
redis_latency_percentiles_usec_countUnknowncls, cmd, ip, instance, ins, jobN/A
redis_latency_percentiles_usec_sumUnknowncls, cmd, ip, instance, ins, jobN/A
redis_latest_fork_secondsgaugecls, ip, instance, ins, joblatest_fork_seconds metric
redis_lazyfree_pending_objectsgaugecls, ip, instance, ins, joblazyfree_pending_objects metric
redis_loading_dump_filegaugecls, ip, instance, ins, jobloading_dump_file metric
redis_master_last_io_seconds_agogaugecls, ip, master_host, instance, ins, job, master_portMaster last io seconds ago
redis_master_link_upgaugecls, ip, master_host, instance, ins, job, master_portMaster link status on Redis slave
redis_master_repl_offsetgaugecls, ip, instance, ins, jobmaster_repl_offset metric
redis_master_sync_in_progressgaugecls, ip, master_host, instance, ins, job, master_portMaster sync in progress
redis_mem_clients_normalgaugecls, ip, instance, ins, jobmem_clients_normal metric
redis_mem_clients_slavesgaugecls, ip, instance, ins, jobmem_clients_slaves metric
redis_mem_fragmentation_bytesgaugecls, ip, instance, ins, jobmem_fragmentation_bytes metric
redis_mem_fragmentation_ratiogaugecls, ip, instance, ins, jobmem_fragmentation_ratio metric
redis_mem_not_counted_for_eviction_bytesgaugecls, ip, instance, ins, jobmem_not_counted_for_eviction_bytes metric
redis_memory_max_bytesgaugecls, ip, instance, ins, jobmemory_max_bytes metric
redis_memory_used_bytesgaugecls, ip, instance, ins, jobmemory_used_bytes metric
redis_memory_used_dataset_bytesgaugecls, ip, instance, ins, jobmemory_used_dataset_bytes metric
redis_memory_used_lua_bytesgaugecls, ip, instance, ins, jobmemory_used_lua_bytes metric
redis_memory_used_overhead_bytesgaugecls, ip, instance, ins, jobmemory_used_overhead_bytes metric
redis_memory_used_peak_bytesgaugecls, ip, instance, ins, jobmemory_used_peak_bytes metric
redis_memory_used_rss_bytesgaugecls, ip, instance, ins, jobmemory_used_rss_bytes metric
redis_memory_used_scripts_bytesgaugecls, ip, instance, ins, jobmemory_used_scripts_bytes metric
redis_memory_used_startup_bytesgaugecls, ip, instance, ins, jobmemory_used_startup_bytes metric
redis_migrate_cached_sockets_totalgaugecls, ip, instance, ins, jobmigrate_cached_sockets_total metric
redis_module_fork_in_progressgaugecls, ip, instance, ins, jobmodule_fork_in_progress metric
redis_module_fork_last_cow_sizegaugecls, ip, instance, ins, jobmodule_fork_last_cow_size metric
redis_net_input_bytes_totalcountercls, ip, instance, ins, jobnet_input_bytes_total metric
redis_net_output_bytes_totalcountercls, ip, instance, ins, jobnet_output_bytes_total metric
redis_number_of_cached_scriptsgaugecls, ip, instance, ins, jobnumber_of_cached_scripts metric
redis_process_idgaugecls, ip, instance, ins, jobprocess_id metric
redis_pubsub_channelsgaugecls, ip, instance, ins, jobpubsub_channels metric
redis_pubsub_patternsgaugecls, ip, instance, ins, jobpubsub_patterns metric
redis_pubsubshard_channelsgaugecls, ip, instance, ins, jobpubsubshard_channels metric
redis_rdb_bgsave_in_progressgaugecls, ip, instance, ins, jobrdb_bgsave_in_progress metric
redis_rdb_changes_since_last_savegaugecls, ip, instance, ins, jobrdb_changes_since_last_save metric
redis_rdb_current_bgsave_duration_secgaugecls, ip, instance, ins, jobrdb_current_bgsave_duration_sec metric
redis_rdb_last_bgsave_duration_secgaugecls, ip, instance, ins, jobrdb_last_bgsave_duration_sec metric
redis_rdb_last_bgsave_statusgaugecls, ip, instance, ins, jobrdb_last_bgsave_status metric
redis_rdb_last_cow_size_bytesgaugecls, ip, instance, ins, jobrdb_last_cow_size_bytes metric
redis_rdb_last_save_timestamp_secondsgaugecls, ip, instance, ins, jobrdb_last_save_timestamp_seconds metric
redis_rejected_connections_totalcountercls, ip, instance, ins, jobrejected_connections_total metric
redis_repl_backlog_first_byte_offsetgaugecls, ip, instance, ins, jobrepl_backlog_first_byte_offset metric
redis_repl_backlog_history_bytesgaugecls, ip, instance, ins, jobrepl_backlog_history_bytes metric
redis_repl_backlog_is_activegaugecls, ip, instance, ins, jobrepl_backlog_is_active metric
redis_replica_partial_resync_acceptedgaugecls, ip, instance, ins, jobreplica_partial_resync_accepted metric
redis_replica_partial_resync_deniedgaugecls, ip, instance, ins, jobreplica_partial_resync_denied metric
redis_replica_resyncs_fullgaugecls, ip, instance, ins, jobreplica_resyncs_full metric
redis_replication_backlog_bytesgaugecls, ip, instance, ins, jobreplication_backlog_bytes metric
redis_second_repl_offsetgaugecls, ip, instance, ins, jobsecond_repl_offset metric
redis_sentinel_master_ckquorum_statusgaugecls, ip, message, instance, ins, master_name, jobMaster ckquorum status
redis_sentinel_master_ok_sentinelsgaugecls, ip, instance, ins, master_address, master_name, jobThe number of okay sentinels monitoring this master
redis_sentinel_master_ok_slavesgaugecls, ip, instance, ins, master_address, master_name, jobThe number of okay slaves of the master
redis_sentinel_master_sentinelsgaugecls, ip, instance, ins, master_address, master_name, jobThe number of sentinels monitoring this master
redis_sentinel_master_setting_ckquorumgaugecls, ip, instance, ins, master_address, master_name, jobShow the current ckquorum config for each master
redis_sentinel_master_setting_down_after_millisecondsgaugecls, ip, instance, ins, master_address, master_name, jobShow the current down-after-milliseconds config for each master
redis_sentinel_master_setting_failover_timeoutgaugecls, ip, instance, ins, master_address, master_name, jobShow the current failover-timeout config for each master
redis_sentinel_master_setting_parallel_syncsgaugecls, ip, instance, ins, master_address, master_name, jobShow the current parallel-syncs config for each master
redis_sentinel_master_slavesgaugecls, ip, instance, ins, master_address, master_name, jobThe number of slaves of the master
redis_sentinel_master_statusgaugecls, ip, master_status, instance, ins, master_address, master_name, jobMaster status on Sentinel
redis_sentinel_mastersgaugecls, ip, instance, ins, jobThe number of masters this sentinel is watching
redis_sentinel_running_scriptsgaugecls, ip, instance, ins, jobNumber of scripts in execution right now
redis_sentinel_scripts_queue_lengthgaugecls, ip, instance, ins, jobQueue of user scripts to execute
redis_sentinel_simulate_failure_flagsgaugecls, ip, instance, ins, jobFailures simulations
redis_sentinel_tiltgaugecls, ip, instance, ins, jobSentinel is in TILT mode
redis_slave_expires_tracked_keysgaugecls, ip, instance, ins, jobslave_expires_tracked_keys metric
redis_slave_infogaugecls, ip, master_host, instance, read_only, ins, job, master_portInformation about the Redis slave
redis_slave_prioritygaugecls, ip, instance, ins, jobslave_priority metric
redis_slave_repl_offsetgaugecls, ip, master_host, instance, ins, job, master_portSlave replication offset
redis_slowlog_last_idgaugecls, ip, instance, ins, jobLast id of slowlog
redis_slowlog_lengthgaugecls, ip, instance, ins, jobTotal slowlog
redis_start_time_secondsgaugecls, ip, instance, ins, jobStart time of the Redis instance since unix epoch in seconds.
redis_target_scrape_request_errors_totalcountercls, ip, instance, ins, jobErrors in requests to the exporter
redis_total_error_repliescountercls, ip, instance, ins, jobtotal_error_replies metric
redis_total_reads_processedcountercls, ip, instance, ins, jobtotal_reads_processed metric
redis_total_system_memory_bytesgaugecls, ip, instance, ins, jobtotal_system_memory_bytes metric
redis_total_writes_processedcountercls, ip, instance, ins, jobtotal_writes_processed metric
redis_tracking_clientsgaugecls, ip, instance, ins, jobtracking_clients metric
redis_tracking_total_itemsgaugecls, ip, instance, ins, jobtracking_total_items metric
redis_tracking_total_keysgaugecls, ip, instance, ins, jobtracking_total_keys metric
redis_tracking_total_prefixesgaugecls, ip, instance, ins, jobtracking_total_prefixes metric
redis_unexpected_error_repliescountercls, ip, instance, ins, jobunexpected_error_replies metric
redis_upgaugecls, ip, instance, ins, jobInformation about the Redis instance
redis_uptime_in_secondsgaugecls, ip, instance, ins, jobuptime_in_seconds metric
scrape_duration_secondsUnknowncls, ip, instance, ins, jobN/A
scrape_samples_post_metric_relabelingUnknowncls, ip, instance, ins, jobN/A
scrape_samples_scrapedUnknowncls, ip, instance, ins, jobN/A
scrape_series_addedUnknowncls, ip, instance, ins, jobN/A
upUnknowncls, ip, instance, ins, jobN/A

7 - 常见问题

Pigsty REDIS 模块常见问题答疑

Redis初始化失败:ABORT due to existing redis instance

这意味着正在初始化的 Redis 实例已经存在了,使用 redis_clean = trueredis_safeguard = false 来强制清除redis数据

当您运行redis.yml来初始化一个已经在运行的redis实例,并且redis_clean设置为false时,就会出现这种情况。

如果redis_clean设置为true(并且 redis_safeguard 也设置为false),redis.yml剧本将删除现有的redis实例并将其重新初始化为一个新的实例,这使得redis.yml剧本完全具有幂等性。


Redis初始化失败:ABORT due to redis_safeguard enabled

这意味着正准备清理的 Redis 实例打开了防误删保险:当 redis_safeguard 设置为 true 时,尝试移除一个redis实例时就会出现这种情况。

您可以关闭 redis_safeguard 来移除Redis实例。这就是 redis_safeguard 的作用。


如何在某个节点上添加一个新的Redis实例?

使用 bin/redis-add <ip> <port> 在节点上部署一个新的redis实例。


如何从节点上移除一个特定实例?

使用 bin/redis-rm <ip> <port> 从节点上移除一个单独的redis实例。


是否有计划升级到 Valkey 或最新版本?

因为 Redis 并非本项目的核心组件,目前没有计划更新至 Redis 最新的 RSAL / AGPLv3 版本或 Valkey 的计划。 Pigsty 中的 Redis 版本锁定在最后一个使用 BSD 协议的 7.2.6 版本。

这个版本经过大规模生产环境的验证,而 Pigsty 已经没有这样的场景去重新验证更新版本的稳定性与可靠性了。