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

浙公网安备 33010602011771号