Redis Sentinel 模式(3节点)部署文档

Redis Sentinel 模式(3节点)部署文档


1. 环境准备

  • Redis 镜像版本:redis:7.4.2-alpine
  • 服务器要求:同局域网、端口互通
  • 部署方式:Docker + Docker Compose

节点规划表:

节点名称 IP地址 角色
redis-11 192.168.0.11 Master + Sentinel
redis-12 192.168.0.12 Slave + Sentinel
redis-13 192.168.0.13 Slave + Sentinel

2. 目录结构

每台服务器 /opt/redis 目录布局:

注意事项,logs日志文件夹,必须手动创建并且授权777,不然容器会写入不了文件,导致启动失败

data数据持久化目录不用手动创建,通过容器来创建

bash复制编辑/opt/redis/
|-- redis.conf          # Redis 配置文件
|-- sentinel.conf       # Sentinel 配置文件
|-- docker-compose.yml  # Docker Compose 启动文件
|-- data/               # Redis 数据持久化目录
|-- logs/               # 日志输出目录

3. 配置文件编写

3.1 redis.conf(主节点配置)

# 允许所有 IP 访问
bind 0.0.0.0

# Redis 默认端口
port 6379

# 前台启动(Docker容器需要)
daemonize no

# 关闭保护模式(允许外部访问)
protected-mode no

# 开启AOF日志,保证数据安全
appendonly yes

# 指定数据目录
dir /data

# 指定日志文件位置
logfile "/logs/redis.log"

# 设置访问密码(所有节点统一)
requirepass redispass123

# 配置主节点认证密码(仅Slave节点生效)
masterauth redispass123

🔵 注意:

  • Master主节点、Slave从节点的redis.conf基本一致。
  • Slave节点在启动后,由 Sentinel 自动识别并指派主节点,因此这里不用配置 slaveof

3.2 redis.conf(从节点配置)

# 允许所有 IP 访问
bind 0.0.0.0

# Redis 默认端口
port 6379

# 前台启动(Docker容器需要)
daemonize no

# 关闭保护模式(允许外部访问)
protected-mode no

# 开启AOF日志,保证数据安全
appendonly yes

# 指定数据目录
dir /data

# 指定日志文件位置
logfile "/logs/redis.log"

# 设置访问密码(所有节点统一)
requirepass redispass123

# 从节点必须明确声明主节点信息
slaveof 192.168.0.11 6379

# 配置主节点认证密码(仅Slave节点生效)
masterauth redispass123

🔵 注意:

  • Slave从节点的redis.conf需要配置主节点的信息,不然无法加入到集群当中

    image-20250427171233455


3.3 sentinel.conf(哨兵配置)

每台哨兵配置几乎一样,只是 monitor 的IP指向初始的Master(192.168.0.11)。

# Sentinel 默认监听端口
port 26379

# 允许任意IP访问
bind 0.0.0.0

# 前台启动(容器用)
daemonize no

# 关闭保护模式
protected-mode no

# Sentinel 日志位置
logfile "/logs/sentinel.log"

# 监控的Master信息,格式:sentinel monitor <名称> <IP> <端口> <票数>
sentinel monitor redis-master 192.168.0.11 6379 2

# 连接Master用的认证密码
sentinel auth-pass redis-master redispass123

# 多少毫秒没响应认定Master下线(默认5秒)
sentinel down-after-milliseconds redis-master 5000

# 故障转移时,同时最多有几个Slave复制新Master
sentinel parallel-syncs redis-master 1

# 完成一次Failover的最大超时时间(毫秒)
sentinel failover-timeout redis-master 10000

🔵 解释:

配置项 含义
sentinel monitor redis-master 192.168.0.11 6379 2 监控 IP 为 192.168.0.11 的 Redis 主机,要求至少2个Sentinel同意才判断宕机
sentinel auth-pass redis-master redispass123 设置哨兵访问Redis实例时的密码
down-after-milliseconds 设置多长时间无响应后标记主机失联
parallel-syncs 故障转移时Slave并行同步数量
failover-timeout 转移超时时间

4. docker-compose.yml 配置

每台服务器 /opt/redis/docker-compose.yml 内容:

version: '3'

services:
  redis:
    image: redis:7.4.2-alpine
    container_name: redis
    ports:
      - "6379:6379"          # Redis端口映射
    volumes:
      - ./redis.conf:/etc/redis/redis.conf
      - ./data:/data
      - ./logs:/logs
    command: redis-server /etc/redis/redis.conf
    restart: always

  sentinel:
    image: redis:7.4.2-alpine
    container_name: sentinel
    ports:
      - "26379:26379"        # Sentinel端口映射
    volumes:
      - ./sentinel.conf:/etc/redis/sentinel.conf
      - ./logs:/logs
    command: redis-sentinel /etc/redis/sentinel.conf
    restart: always

🔵 每台机器都会同时启动2个容器(redis + sentinel)。


5. 启动步骤

每台服务器上执行:

cd /opt/redis
docker-compose up -d

查看容器是否正常运行:

docker ps

确认 redissentinel 都是状态 Up


6. 测试与验证

6.1 连接 Sentinel 查看监控信息

在任意一台机器执行:

docker exec -it sentinel redis-cli -p 26379

查询监控的 master:

SENTINEL masters

查看 slaves 状态:

SENTINEL slaves redis-master

6.2 手动模拟主节点宕机

在 192.168.0.11 上关闭 redis 服务:

docker stop redis

然后在任意 Sentinel 中观察 failover:

SENTINEL masters
  • 正常的话,会有新的Master被选举出来(比如192.168.0.12)
  • 并且所有 Slave 自动跟随新 Master

6.3 检查新主节点

连接新 Master 服务器上 redis 检查:

docker exec -it redis redis-cli -a redispass123
info replication

查找 role:masterrole:slave 字段确认身份变化。


7. 小结

项目 要点
Redis 密码 所有节点的 requirepassmasterauth 必须保持一致,否则从节点无法同步主节点,Sentinel 也无法正确进行故障转移。建议密码复杂且定期更换。
哨兵监控名称 所有 Sentinel 节点的 sentinel monitor 配置中,监控名称统一为 redis-master,保持一致,便于管理和查询。
IP 和端口 配置文件中 IP 地址和端口必须准确,尤其是 slaveofsentinel monitor,写错会导致节点连接失败或监控无效。
网络要求 所有 Redis 节点和 Sentinel 节点之间网络必须互通,确保 6379 和 26379 端口开放,防止因防火墙或安全组设置导致通信异常。
最小监控票数 sentinel monitor 配置中的票数建议设为 2,三台哨兵中至少两台同意后才能判定主节点故障,避免误判。
配置文件一致性 Redis 和 Sentinel 的配置文件除特定 IP 外保持一致,方便后期维护。可通过统一模板管理各节点配置,减少人为失误。
日志查看 关注 /logs/redis.log/logs/sentinel.log,可快速定位连接失败、节点故障、自动切换(Failover)等问题发生的原因。
容器管理 采用 Docker Compose 部署,每台服务器同时启动 redissentinel 两个容器,启动、停止、重启操作统一,简化管理。
主从同步机制 从节点初始通过 slaveof 指定主节点,后续如果发生主从切换,Sentinel 会自动通知从节点跟随新的主节点,无需人工干预。

8. 常见问题与排查建议

场景 可能原因 排查与解决办法
Sentinel 无法监控到 Master 配置文件 IP 错误、防火墙阻挡、Redis 端口未开放 检查 sentinel.conf 中的 monitor 配置;确认防火墙和安全组开放 6379 端口
Slave 无法同步数据 密码错误、主节点 IP 配置错误、网络不通 检查 slaveof 配置项和 masterauth 密码;确认从节点能 ping 通主节点
故障转移失败或缓慢 最小票数设置不合理、Sentinel 数量不足 确保至少部署 3 个 Sentinel;sentinel monitor 后的票数设置为 2
Redis 容器频繁重启 配置错误、数据目录权限不足 查看容器日志 docker logs redis,检查配置文件是否错误、目录权限是否正确
Sentinel 端口冲突或占用 26379 端口被其他程序占用 修改 sentinel.conf 中的监听端口,或者释放占用端口
无法连接 Redis 服务 未正确绑定 IP、容器未启动、密码错误 检查 bind 配置为 0.0.0.0,确保 Redis 容器正常运行,确认密码正确
Sentinel 日志频繁出现警告 哨兵节点间通信异常或延迟 检查网络稳定性,避免公网部署时延迟过高;可适当调大 down-after-milliseconds
Redis 容器磁盘空间爆满 AOF 文件增长太大 开启自动重写 AOF(auto-aof-rewrite-percentageauto-aof-rewrite-min-size
posted @ 2025-04-28 15:10  wandereryjh  阅读(33)  评论(0)    收藏  举报