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

哨兵模式的优缺点

优点 缺点
自动化故障转移 配置复杂度较高
支持读写分离(从节点读) 数据一致性可能短暂丢失
客户端透明切换 网络分区可能导致误判
相关推荐
智购科技自动贩卖机7 分钟前
自动售货机嵌入式系统安全加固实践:从Go语言国密算法到硬件防拆的工程化落地
大数据·人工智能·后端·安全·golang·系统安全
莫得感情 o17 分钟前
Redis 08 · 主从复制:全量同步、增量同步与复制延迟
redis·缓存
烂蜻蜓24 分钟前
Flask入门教程(附录):模板渲染API——Jinja2集成全解析
后端·python·flask
摇滚侠24 分钟前
《Spring Boot 3:高级与架构设计》第 2 章 IOC容器的高级机制 Environment 阅读笔记 4
spring boot·笔记·后端
豆角焖肉30 分钟前
Spring Boot入门实战:从零搭建第一个应用
java·spring boot·后端·自动配置
BUG指挥官1 小时前
Redis已接入AI
数据库·人工智能·spring boot·redis·spring cloud
国科安芯1 小时前
基于抗辐射MCU的卫星分布式控制系统CANFD总线架构研究
网络·人工智能·分布式·单片机·嵌入式硬件·架构·抗辐射
mldong2 小时前
Go 开发者也有自己的轻量工作流引擎了:go get 一行,5 分钟跑通一条审批流
后端·go
BingoGo9 小时前
PHP clone 之后,为什么改副本会影响原对象?
后端·php
JaguarJack9 小时前
PHP clone 之后,为什么改副本会影响原对象?
后端·php·服务端