配置 PostgreSQL 集群
这是本节的多页打印视图。 .
Redis
使用 21 个参数自定义 redis 组件
创建、移除、扩展 redis 集群
可在此模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
关于 redis 模块的常见问题
1 - 配置
Redis 的实体模型与 PostgreSQL 几乎相同, 也包括集群和实例的概念。这里的集群不是指原生 Redis 集群模式。
REDIS 模块与 PGSQL 模块的核心区别是 Redis 使用单节点多实例部署而不是 1:1 部署: 通常在一个物理/虚拟机节点上部署多个 Redis 实例以充分利用多核 CPU。 因此,配置和管理 Redis 实例的方式与 PGSQL 略有不同。
在 Pigsty 管理的 Redis 中,节点完全从属于集群,这意味着目前 不允许在一个节点上部署两个不同集群的 Redis 实例。 但是,这不影响在一个节点上部署多个独立的 Redis 主副本实例。
Redis 身份
Redis 身份参数 是定义 Redis 集群时的必需参数。
| 名称 | 属性 | 描述 | 示例 |
|---|---|---|---|
redis_cluster |
必需,集群级别 | 集群名称 | redis-test |
redis_node |
必需,节点级别 | 节点序列号 | 1,2 |
redis_instances |
必需,节点级别 | 实例定义 | { 6001 : {} ,6002 : {}} |
Redis 模式
Pigsty 中有三种可用的 redis_mode:
standalone:以独立(主从)模式设置 Rediscluster:将此 Redis 集群设置为 Redis 原生集群sentinel:将 Redis 设置为独立 Redis HA 的哨兵
以下是三个示例:
- 1 节点,一个主节点和一个从节点的 Redis 独立集群:
redis-ms - 1 节点,3 实例的 Redis 哨兵集群:
redis-sentinel - 2 节点,6 实例的 Redis 集群:
redis-cluster
限制
- 一个 Redis 节点只能属于一个 Redis 集群,这意味着您不能同时将一个节点分配给两个不同的 Redis 集群。
- 在每个 Redis 节点上,您需要为 Redis 实例分配唯一的端口号以避免端口冲突。
- 通常,同一个 Redis 集群将使用相同的密码,但 Redis 节点上的多个 Redis 实例不能设置不同的密码(因为 redis_exporter 只允许一个密码)。
- Redis 集群具有内置 HA,而独立 HA 需要在哨兵中手动配置,因为我们不确定您是否有可用的哨兵。 幸运的是,配置独立 Redis HA 很简单:使用哨兵配置 HA。
2 - 参数
redis 模块中有 21 个参数。
| 参数 | 类型 | 级别 | 注释 |
|---|---|---|---|
redis_cluster |
string | C | redis 集群名称,必需的身份参数 |
redis_instances |
dict | I | 此 redis 节点上的 redis 实例定义 |
redis_node |
int | I | redis 节点序列号,必需的节点整数 ID |
redis_fs_main |
path | C | redis 主数据挂载点,默认为 /data |
redis_exporter_enabled |
bool | C | 在 redis 节点上安装 redis exporter? |
redis_exporter_port |
port | C | redis exporter 监听端口,默认为 9121 |
redis_exporter_options |
string | C/I | redis exporter 的 cli 参数和额外选项 |
redis_safeguard |
bool | G/C/A | 防止清除正在运行的 redis 实例? |
redis_clean |
bool | G/C/A | 初始化期间清除现有的 redis? |
redis_rmdata |
bool | G/C/A | 清除 redis 服务器时移除 redis 数据? |
redis_mode |
enum | C | redis 模式:standalone、cluster、sentinel |
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 保存指令,使用空列表禁用 |
redis_aof_enabled |
bool | C | 启用 redis 追加文件? |
redis_rename_commands |
dict | C | 重命名 redis 危险命令 |
redis_cluster_replicas |
int | C | redis 集群中一个主节点的副本数量 |
redis_sentinel_monitor |
master[] | C | sentinel 主节点列表,仅限 sentinel 集群 |
默认值
默认参数在 roles/redis/defaults/main.yml 中定义
redis_cluster
名称:redis_cluster,类型:string,级别:C
redis 集群名称,必需的身份参数。
无默认值,您必须明确定义它。
符合正则表达式 [a-z][a-z0-9-]*,建议使用与组名相同的名称并以 redis- 开头
redis_node
名称:redis_node,类型:int,级别:I
redis 节点序列号,在 redis 集群中需要唯一的整数
您必须为每个 redis 节点明确定义节点 ID。整数从 0 或 1 开始。
redis_instances
名称:redis_instances,类型:dict,级别:I
此 redis 节点上的 redis 实例定义
无默认值,您必须使用此参数在每个 redis 节点上明确定义 redis 实例。
这是一个原生 redis 集群定义的示例
端口号在节点中应该是唯一的,value 中的 replica_of 应该是同一 redis 集群的实例成员。
redis_fs_main
名称:redis_fs_main,类型:path,级别:C
redis 主数据挂载点,默认为 /data
默认值:/data,并且 /data/redis 将用作 redis 数据目录。
redis_exporter_enabled
名称:redis_exporter_enabled,类型:bool,级别:C
在 redis 节点上安装 redis exporter?
默认值为 true,这将在此 redis_node 上启动一个 redis_exporter
redis_exporter_port
名称:redis_exporter_port,类型:port,级别:C
redis exporter 监听端口,默认为 9121
默认值:9121
redis_exporter_options
名称:redis_exporter_options,类型:string,级别:C/I
redis exporter 的 cli 参数和额外选项,将添加到 /etc/default/redis_exporter。
默认值为空字符串
redis_safeguard
名称:redis_safeguard,类型:bool,级别:G/C/A
防止清除正在运行的 redis 实例?
默认值为 false,如果设置为 true,且 redis 实例正在运行,初始化/移除 playbook 将立即中止。
redis_clean
名称:redis_clean,类型:bool,级别:G/C/A
初始化期间清除现有的 redis?
默认值为 true,这将在 redis 初始化或移除期间移除 redis 服务器。
redis_rmdata
名称:redis_rmdata,类型:bool,级别:G/C/A
清除 redis 服务器时移除 redis 数据?
默认值为 true,这将与 redis 实例一起移除 redis rdb / aof。
redis_mode
名称:redis_mode,类型:enum,级别:C
redis 模式:standalone、cluster、sentinel
默认值:standalone
standalone:将 redis 设置为独立(主从)模式cluster:将此 redis 集群设置为 redis 原生集群sentinel:为独立 redis HA 设置 redis 为 sentinel
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 绑定地址,空字符串将使用清单主机名
默认值: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,查看 redis 逐出策略 获取更多详情
noeviction:达到内存限制时不保存新值。当数据库使用复制时,这适用于主数据库allkeys-lru:保留最近使用的键;移除最少使用的(LRU)键allkeys-lfu:保留经常使用的键;移除最少经常使用的(LFU)键volatile-lru:移除过期字段设置为 true 的最少使用键。volatile-lfu:移除过期字段设置为 true 的最少经常使用键。allkeys-random:随机移除键以为添加的新数据腾出空间。volatile-random:随机移除过期字段设置为 true 的键。volatile-ttl:移除过期字段设置为 true 且剩余生存时间(TTL)值最短的键。
redis_password
名称:redis_password,类型:password,级别:C/N
redis 密码,空字符串将禁用密码,这是默认行为
请注意,由于 redis_exporter 的实现限制,每个节点只能设置一个 redis_password。这通常不是问题,因为 pigsty 不允许在同一节点上部署两个不同的 redis 集群。
请在生产环境中使用强密码
redis_rdb_save
名称:redis_rdb_save,类型:string[],级别:C
redis rdb 保存指令,使用空列表禁用,查看 redis 持久化 获取详情。
默认值为 ["1200 1"]:如果至少 1 个键发生变化,每 20 分钟将数据集转储到磁盘:
redis_aof_enabled
名称:redis_aof_enabled,类型:bool,级别:C
启用 redis 追加文件?默认值为 false。
redis_rename_commands
名称:redis_rename_commands,类型:dict,级别:C
重命名 redis 危险命令,这是一个 k:v old: new 的字典
默认值:{},您可以通过设置此值来隐藏像 FLUSHDB 和 FLUSHALL 这样的危险命令,这是一个示例:
redis_cluster_replicas
名称:redis_cluster_replicas,类型:int,级别:C
redis 集群中一个主节点/主要节点的副本数量,默认值:1
redis_sentinel_monitor
名称:redis_sentinel_monitor,类型:master[],级别:C
只有当 redis_mode 设置为 sentinel 时才能使用。
此 sentinel 集群要监控的 redis 主节点列表。每个主节点定义为具有 name、host、port、password、quorum 键的字典。
name 和 host 是必需的,port、password、quorum 是可选的,quorum 用于为此主节点设置法定人数,通常大于 sentinel 实例的一半。
3 - 管理
这里是 Redis 的一些常见管理任务。更多详情请查看 FAQ: Redis。
初始化 Redis
初始化集群/节点/实例
您也可以使用包装脚本:
移除 Redis
移除集群/节点/实例
您也可以使用包装脚本:
重新加载 Redis
您可以部分运行 redis.yml 任务来重新配置 redis。
请注意,redis 无法在线重新加载;您必须重启 redis 才能使配置生效。
使用 Redis CLI
使用 redis-cli 访问 redis 实例:
Redis 还有一个 redis-benchmark,可用于基准测试和在 redis 服务器上生成负载:
复制 Redis
https://redis.io/commands/replicaof/
使用 Sentinel 的高可用
您必须使用您的 redis sentinel 手动为 redis 独立主从集群启用 HA。
以 4 节点沙盒为例,redis sentinel 集群 redis-meta 用于管理 redis-ms 独立集群。
如果您希望从 sentinel 中移除 redis 主节点,请使用 SENTINEL REMOVE <name>。
您可以使用 redis_sentinel_monitor 在 sentinel 集群上配置多个 redis 主节点。
并使用以下方式刷新 sentinel 集群上的主节点列表:
4 - 剧本
redis 有两个剧本:
redis.yml:创建 redis 集群 / 节点 / 实例redis-rm.yml:移除 redis 集群 / 节点 / 实例
redis.yml
剧本 redis.yml 将初始化 redis 集群/节点/实例:
redis-rm.yml
剧本 redis-rm.yml 将移除 redis 集群/节点/实例:
5 - 监控
仪表板
REDIS 模块有三个仪表板。
Redis 概览
Redis Overview:所有 Redis 实例的概览
Redis 集群
Redis Cluster:单个 redis 集群的概览
Redis 实例
Redis Instance:单个 redis 实例的概览
告警规则
Redis 有 6 个预定义的告警规则,定义在 files/prometheus/rules/redis.yml 中。
| 名称 | 描述 | 级别 |
|---|---|---|
RedisDown |
Redis 服务器宕机 | Critical |
RedisRejectConn |
Redis 实例拒绝连接 | Critical |
RedisRTHigh |
Redis 实例响应时间过高 | Warning |
RedisCPUHigh |
Redis 实例 CPU 使用率过高 | Warning |
RedisMemHigh |
Redis 实例内存使用率过高 | Warning |
RedisQPSHigh |
Redis 实例 QPS 过高 | Warning |
6 - FAQ
由于现有 redis 实例而中止
使用
redis_clean = true和redis_safeguard = false强制清理 redis 数据
当您运行 redis.yml 初始化已经运行的 redis 实例,并且 redis_clean 设置为 false 时会发生这种情况。
如果 redis_clean 设置为 true(且 redis_safeguard 也设置为 false),redis.yml playbook 将删除现有的 redis 实例并将其重新初始化为新实例,这使得 redis.yml playbook 完全幂等。
由于启用 redis_safeguard 而中止
当使用
redis_safeguard设置为true移除 redis 实例时会发生这种情况。
您可以禁用 redis_safeguard 来移除 Redis 实例。这就是 redis_safeguard 的作用。
如何在此节点上添加一个新的 redis 实例?
使用
bin/redis-add <ip> <port>在节点上部署新的 redis 实例。
如何从节点移除单个 redis 实例?
bin/redis-rm <ip> <port>从节点移除单个 redis 实例