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

哨兵模式的优缺点

优点 缺点
自动化故障转移 配置复杂度较高
支持读写分离(从节点读) 数据一致性可能短暂丢失
客户端透明切换 网络分区可能导致误判
相关推荐
莫雨大王11 分钟前
java并发-线程池(一)
后端
Seven9712 分钟前
【设计模式】命令模式助力快速添加新命令而不影响现有代码
java·后端·设计模式
易元13 分钟前
设计模式-组合模式
后端·架构
计算机-秋大田13 分钟前
基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)
java·vue.js·spring boot·后端·课程设计
青云交20 分钟前
Java 大视界 -- 基于 Java 的大数据分布式数据库架构设计与实践(125)
java·大数据·分布式·分布式数据库·架构设计·数据处理·高可用性
z263730561125 分钟前
Redis常用数据结构及命令详解:从基础到进阶
数据结构·数据库·redis
犀思云27 分钟前
领先AI企业经验谈:探究AI分布式推理网络架构实践
人工智能·分布式·ai网络
shengjk127 分钟前
数据湖的背景、现状与未来
人工智能·后端
MarkHD1 小时前
第二十五天 实践分布式数据管理,实现数据在多设备间的同步
分布式·wpf
小码编匠1 小时前
C# 编程技巧实现屏幕录制功能
后端·c#·.net