【Redis】哨兵模式
目录
- 1、背景
- 2、核心功能
- 3、架构组成
- 4、工作流程
- 【1】监控阶段
- 【2】故障判定
- 【3】选举领导者哨兵
- 【4】故障转移
- 5、关键配置参数
- 6、客户端交互
- 7、优缺点
- 8、部署建议
1、背景
Redis哨兵模式(Sentinel)是Redis官方提供的高可用性(HA)解决方案,用于监控和管理Redis主从架构,实现自动故障检测、主从切换和配置更新。
2、核心功能
1、监控:持续检测主节点(master)和从节点(replica)的运行状态
2、自动故障转移:当主节点不可用时,哨兵会选举一个从节点晋升为新主节点
3、配置推送:故障切换后,自动更新客户端和其它redis节点的配置
4、通知:通过API或脚本通知管理员故障事件
3、架构组成
1、哨兵节点:独立运行的进程,不存储数据,仅负责监控和决策
2、Redis主从集群:至少包含1个主节点和若干个从节点(建议至少2个从节点)
3、仲裁机制:通常部署3个或以上哨兵节点(避免单节点故障,基于多数投票决策)
4、工作流程
【1】监控阶段
1、哨兵每秒向主从节点发送PING命令,检测是否存活
2、若节点未响应超过配置的超时时间(down-after-milliseconds),标记未主观下线(SDOWN)
【2】故障判定
1、当多个哨兵均认为主节点主观下线,则标记为客观下线(ODOWN)
【3】选举领导者哨兵
1、使用Raft算法选角一个哨兵领导者(Leader)来执行故障转移
【4】故障转移
1、领导者哨兵选择一个数据最新的从节点,执行SLAVEOF NO ONE将其升级为主节点
2、通知其它从节点复制新主节点
3、更新客户端配置(通过发布/订阅机制或直接修改配置)
5、关键配置参数
# sentinel.conf 示例
sentinel monitor mymaster 127.0.0.1 6379 2 # 监控名为mymaster的主节点,2表示需至少2个哨兵同意
sentinel down-after-milliseconds mymaster 5000 # 5秒无响应视为下线
sentinel failover-timeout mymaster 60000 # 故障转移超时时间(毫秒)
6、客户端交互
1、客户端通过哨兵获取当前主节点地址(SENTINEL get-master-addr-by-name master-name)
2、建议使用支持哨兵的客户端库,自动处理主从切换
7、优缺点
优点:
1、自动容灾,减少人工干预
2、配置简单,与原生redis兼容
缺点:
1、故障转移期间可能出现短暂数据丢失(异步复制导致)
2、不解决水平扩展问题(需结合cluster模式)
8、部署建议
1、至少部署3个哨兵节点(分散在不同物理机)
2、监控哨兵进程本身(避免哨兵单节点故障)
3、测试故障转移场景,验证超时参数合理性