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)。
  • 对自动化运维有较高需求的场景。

哨兵模式的优缺点

优点 缺点
自动化故障转移 配置复杂度较高
支持读写分离(从节点读) 数据一致性可能短暂丢失
客户端透明切换 网络分区可能导致误判
相关推荐
做运维的阿瑞4 小时前
Python零基础入门:30分钟掌握核心语法与实战应用
开发语言·后端·python·算法·系统架构
西红柿维生素5 小时前
5mins了解redis底层数据结&源码
数据库·redis·缓存
猿究院-陆昱泽5 小时前
Redis 五大核心数据结构知识点梳理
redis·后端·中间件
yuriy.wang5 小时前
Spring IOC源码篇五 核心方法obtainFreshBeanFactory.doLoadBeanDefinitions
java·后端·spring
咖啡教室7 小时前
程序员应该掌握的网络命令telnet、ping和curl
运维·后端
你的人类朋友8 小时前
Let‘s Encrypt 免费获取 SSL、TLS 证书的原理
后端
老葱头蒸鸡8 小时前
(14)ASP.NET Core2.2 中的日志记录
后端·asp.net
hong_zc8 小时前
redis之缓存
数据库·redis·缓存
失散138 小时前
分布式专题——23 Kafka日志索引详解
java·分布式·云原生·架构·kafka
程序消消乐8 小时前
深入理解Kafka的复制协议与可靠性保证
分布式·kafka