当前位置: 首页 > news >正文

Redis 哨兵机制

Redis哨兵(Sentinel)机制详解

一、哨兵核心功能

  1. 监控(Monitoring):持续检查主从节点运行状态
  2. 通知(Notification):通过API通知系统管理员节点故障
  3. 自动故障转移(Automatic failover):主节点故障时自动提升从节点为新主
  4. 配置提供(Configuration provider):为客户端提供最新的主节点地址

二、哨兵架构组成

  1. 哨兵节点集群:通常由3个或以上哨兵节点组成
  2. Redis主从集群:被监控的主节点和从节点
  3. 客户端:通过哨兵获取主节点信息

三、工作流程解析

1. 监控阶段

  • 每1秒向所有节点发送PING命令
  • 通过回复判断节点状态:
    • +PONG:正常
    • -LOADING:正在加载
    • -MASTERDOWN:主节点下线

2. 主观下线(SDown)判定

  • 单个哨兵节点检测到主节点无响应
  • 超过down-after-milliseconds配置时间(默认30秒)
  • 标记主节点为"主观下线"

3. 客观下线(ODown)判定

  • 多个哨兵节点(通常需过半)确认主节点不可用
  • 满足quorum参数配置的数量要求
  • 标记主节点为"客观下线"

4. 故障转移流程

  1. 选举Leader哨兵

    • 使用Raft算法选举负责故障转移的哨兵
    • 需要获得多数哨兵节点的投票
  2. 选择新主节点

    • 排除不健康的从节点
    • 选择复制偏移量最大的从节点
    • 考虑节点优先级(配置参数)
  3. 提升新主

    • 向选中的从节点发送SLAVEOF NO ONE
    • 等待新主节点确认角色变更
  4. 切换从节点

    • 向其他从节点发送SLAVEOF指向新主
    • 更新配置并持久化

四、关键配置参数

# 哨兵基本配置
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000# 重要参数说明
- quorum:确认客观下线所需哨兵数
- down-after-milliseconds:判定下线时间阈值
- parallel-syncs:故障转移时同时同步的从节点数
- failover-timeout:故障转移超时时间

五、哨兵集群通信

  1. 使用Redis协议:哨兵节点间通过Redis协议通信
  2. 发布/订阅模式:通过__sentinel__频道交换信息
  3. 自动发现机制:新哨兵加入时自动识别其他哨兵

六、客户端接入方式

  1. 直接连接:客户端连接哨兵获取主节点信息
  2. 故障感知:客户端订阅哨兵通知频道
  3. 自动切换:客户端实现主节点切换逻辑

七、生产环境最佳实践

  1. 部署建议

    • 至少部署3个哨兵节点
    • 跨机架/可用区部署
    • 独立部署(不与Redis实例同机)
  2. 性能优化

    • 调整down-after-milliseconds平衡敏感度
    • 合理设置parallel-syncs避免网络拥塞
    • 监控哨兵节点的CPU和网络使用
  3. 常见问题处理

    • 脑裂问题:配置min-slaves-to-write
    • 网络分区:合理设置超时时间
    • 配置不一致:确保所有哨兵配置相同

哨兵机制为Redis提供了高可用保障,但需要注意其并非强一致性方案,在极端网络情况下可能出现脑裂问题,需要配合适当的客户端处理策略。

http://www.dtcms.com/a/274992.html

相关文章:

  • 多代理系统(multi-agent)框架深度解析:架构、特性与未来
  • 无代码自动化测试工具
  • STM32G473串口通信-USART/UART配置和清除串口寄存器状态的注意事项
  • 隆重介绍 Xget for Chrome:您的终极下载加速器
  • 开源界迎来重磅核弹!月之暗面开源了自家最新模型 K2
  • 从延迟测试误区谈起:SmartPlayer为何更注重真实可控的低延迟?
  • gitee 代码仓库面试实际操作题
  • Cadence Virtuoso中如何集成Calibre
  • Java进阶---并发编程
  • 打造未来制造核心力:虚拟调试的价值与落地思路
  • YOLO-DETR如何提升小目标的检测效果
  • 【数据结构与算法】数据结构初阶:详解顺序表和链表(三)——单链表(上)
  • OpenCV实现感知哈希(Perceptual Hash)算法的类cv::img_hash::PHash
  • 商城网站建设实务
  • Ragflow-plus本地部署和智能问答及报告编写应用测试
  • 标准化模型格式ONNX介绍:打通AI模型从训练到部署的环节
  • C语言易错点(二)
  • C++包管理工具:conan2常用命令详解
  • JVM-----【并发可达性分析】
  • Android 12系统源码_分屏模式(一)从最近任务触发分屏模式
  • 微信小程序核心知识点速览
  • OpenCV图像基本操作:读取、显示与保存
  • OpenLLMetry 助力 LLM 应用实现可观测性
  • 1-Git安装配置与远程仓库使用
  • uniapp---入门、基本配置了解
  • springboot-2.3.3.RELEASE升级2.7.16,swagger2.9.2升级3.0.0过程
  • 猿人学js逆向比赛第一届第十九题
  • 大数据在UI前端的应用深化:用户行为数据的跨渠道整合分析
  • MinIO配置项速查表【五】
  • CentOS 安装 Redis 简明指南