Redis 哨兵模式详解:高可用架构的实现与配置指南

一、Redis 哨兵模式的核心作用

  1. 故障自动检测:监控主节点和从节点的健康状态。
  2. 自动故障转移:主节点不可用时,选举新的主节点并更新配置。
  3. 客户端透明切换:客户端通过哨兵节点获取最新的主节点地址。
  4. 通知与告警:支持通过脚本或 API 通知管理员故障事件。

二、Redis 哨兵模式的架构与机器要求

最小化部署架构

  • 机器数量 :至少 3 台(避免单点故障)。

  • 角色分配

    • 1 台主节点(Master) :处理写请求。
    • 2 台从节点(Slave) :复制主节点数据,处理读请求。
    • 3 台哨兵节点(Sentinel) :通常与 Redis 节点部署在同一台机器,减少资源开销。

三、Redis 哨兵模式配置步骤

1. 主从节点配置

主节点(Master)配置(redis-master.conf):

bash 复制代码
    port 6379
    daemonize yes
    logfile "/var/log/redis/redis-master.log"

从节点(Slave)配置(redis-slave1.conf):

bash 复制代码
    port 6380
    daemonize yes
    logfile "/var/log/redis/redis-slave1.log"
    replicaof 192.168.1.100 6379  # 指向主节点IP和端口

2. 哨兵节点配置

每个哨兵节点需独立配置(以 sentinel1.conf 为例):

bash 复制代码
    port 26379
    daemonize yes
    logfile "/var/log/redis/sentinel1.log"
    sentinel monitor mymaster 192.168.1.100 6379 2  # 监控主节点,2表示需2个哨兵同意故障转移
    sentinel down-after-milliseconds mymaster 5000   # 5秒无响应判定为宕机
    sentinel failover-timeout mymaster 10000         # 故障转移超时时间
    sentinel parallel-syncs mymaster 1               # 故障转移时允许同步的从节点数

3. 启动命令

bash 复制代码
    # 启动主从节点
    redis-server /path/to/redis-master.conf
    redis-server /path/to/redis-slave1.conf

    # 启动哨兵节点
    redis-sentinel /path/to/sentinel1.conf

四、实际案例:3 台机器的哨兵模式部署

1. 机器与角色分配

机器IP Redis角色 哨兵节点端口
192.168.1.100 Master (6379) Sentinel (26379)
192.168.1.101 Slave1 (6380) Sentinel (26380)
192.168.1.102 Slave2 (6381) Sentinel (26381)

2. 验证哨兵状态

bash 复制代码
    redis-cli -h 192.168.1.100 -p 26379 info sentinel

输出示例:

plaintext 复制代码
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3

五、哨兵模式的工作流程

1. 故障检测流程

sequenceDiagram participant Sentinel1 participant Master participant Sentinel2 participant Sentinel3 Sentinel1->>Master: PING (每1秒) Master-->>Sentinel1: PONG Note over Master: 主节点宕机 Sentinel1->>Master: PING (超时5秒未响应) Sentinel1->>Sentinel2: 发起主观下线(SDOWN) Sentinel1->>Sentinel3: 发起主观下线(SDOWN) Sentinel2->>Sentinel1: 确认客观下线(ODOWN) Sentinel3->>Sentinel1: 确认客观下线(ODOWN)

2. 故障转移流程

  1. 选举领导者哨兵:通过 Raft 算法选举一个领导者哨兵。
  2. 选择新主节点:根据优先级、复制偏移量等条件选择从节点。
  3. 提升新主节点 :执行 REPLICAOF NO ONE 命令。
  4. 切换从节点:更新其他从节点指向新主节点。
  5. 通知客户端:通过发布订阅机制通知客户端新主节点地址。

六、哨兵模式的注意事项

  1. 网络分区问题:哨兵可能因网络分区误判主节点宕机,需合理配置超时时间。
  2. 最少哨兵节点数:至少 3 个哨兵节点以避免"脑裂"问题。
  3. 客户端兼容性:客户端需支持哨兵协议(如 Jedis、Lettuce)。
  4. 监控与告警 :通过 sentinel.log 和 Prometheus + Grafana 监控哨兵状态。

七、总结

哨兵模式的适用场景

  • 需要高可用性的 Redis 服务。
  • 中小规模集群(大规模集群推荐 Redis Cluster)。
  • 对自动化运维有较高需求的场景。

哨兵模式的优缺点

优点 缺点
自动化故障转移 配置复杂度较高
支持读写分离(从节点读) 数据一致性可能短暂丢失
客户端透明切换 网络分区可能导致误判
相关推荐
争不过朝夕,又念着往昔30 分钟前
Go语言反射机制详解
开发语言·后端·golang
搬砖天才、1 小时前
kafka集群安装
分布式·kafka
绝无仅有2 小时前
企微审批对接错误与解决方案
后端·算法·架构
Super Rookie2 小时前
Spring Boot 企业项目技术选型
java·spring boot·后端
来自宇宙的曹先生2 小时前
用 Spring Boot + Redis 实现哔哩哔哩弹幕系统(上篇博客改进版)
spring boot·redis·后端
电商数据girl2 小时前
有哪些常用的自动化工具可以帮助处理电商API接口返回的异常数据?【知识分享】
大数据·分布式·爬虫·python·系统架构
expect7g3 小时前
Flink-Checkpoint-1.源码流程
后端·flink
00后程序员3 小时前
Fiddler中文版如何提升API调试效率:本地化优势与开发者实战体验汇总
后端
灵犀学长3 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
用户8122199367223 小时前
C# .Net Core零基础从入门到精通实战教程全集【190课】
后端