参数列表

Etcd 模块提供了 10 个相关配置参数,用于定制所需的 Etcd 集群。

ETCD 是一个分布式的、可靠的键-值存储,用于存放系统中最为关键的数据。在 Pigsty 中,etcd 作为高可用组件 Patroni 使用的 DCS,它对于 PG 的高可用非常重要。

Pigsty 为 etcd 集群使用一个硬编码的默认集群组名 etcd,它可以是一套现有的外部 etcd 集群,或者是默认由 Pigsty 使用 etcd.yml 剧本部署创建的新etcd集群。


参数列表

Pigsty 中有 21 个关于 Redis 模块的配置参数:

参数 类型 级别 注释
redis_cluster string C Redis数据库集群名称,必选身份参数
redis_instances dict I Redis节点上的实例定义
redis_node int I Redis节点编号,正整数,集群内唯一,必选身份参数
redis_fs_main path C Redis主数据目录,默认为 /data
redis_exporter_enabled bool C Redis Exporter 是否启用?
redis_exporter_port port C Redis Exporter监听端口
redis_exporter_options string C/I Redis Exporter命令参数
redis_safeguard bool G/C/A 禁止抹除现存的Redis
redis_clean bool G/C/A 初始化Redis是否抹除现存实例
redis_rmdata bool G/C/A 移除Redis实例时是否一并移除数据?
redis_mode enum C Redis集群模式:sentinel,cluster,standalone
redis_conf string C Redis配置文件模板,sentinel 除外
redis_bind_address ip C Redis监听地址,默认留空则会绑定主机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哨兵监控的主库列表,只在哨兵集群上使用?

默认参数

Etcd 模块的默认参数定义于 roles/redis/defaults/main.yml

#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 实例的监控指标都由它负责抓取。

redis_exporter_port

参数名称: redis_exporter_port, 类型: port, 层次:C

Redis Exporter监听端口,默认值为:9121

redis_exporter_options

参数名称: redis_exporter_options, 类型: string, 层次:C/I

传给 Redis Exporter 的额外命令行参数,会被渲染到 /etc/defaut/redis_exporter 中,默认为空字符串。

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_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_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,即将此值设置为空字符串 ''

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 集群。

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

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)。