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

Redis 高可用实战源码解析(Sentinel + Cluster 整合应用)

Redis 高可用实战源码解析(Sentinel + Cluster 整合应用)

在这里插入图片描述

1. 前言

Redis 高可用体系主要包括两个部分:

  1. Redis Sentinel:哨兵机制,监控、自动故障转移。
  2. Redis Cluster:分布式集群,数据分片与自动路由。

在生产环境中,Redis 高可用方案通常结合 复制、持久化、内存优化,保证系统稳定运行。


2. Sentinel 哨兵机制

2.1 哨兵职责

  • 监控:定期向 Master/Slave 发送 PING,检查存活状态
  • 通知:Master 故障时通知其他 Sentinel 和客户端
  • 故障转移:选举新的 Master 并让 Slave 复制到新 Master
  • 配置提供者:客户端可通过 Sentinel 获取 Master 地址

2.2 哨兵源码核心

  • sentinel.c:核心循环,事件驱动,类似 Redis 主线程
  • sentinel_monitor.c:管理被监控的 Redis 实例
  • sentinel_failover.c:故障转移逻辑
核心事件循环
while (!sentinelShutdown) {aeProcessEvents(sentinelEventLoop);sentinelCheckConfig();sentinelCheckFailoverState();
}
故障判定流程
  1. Sentinel 检测 Master 不可达
  2. Sentinel 进入 subjectively down (SDOWN) 状态
  3. 多个 Sentinel 交互判断 Master objectively down (ODOWN)
  4. 触发 故障转移
故障转移流程
void sentinelFailoverStateWaitStart() {electSlaveAsMaster();promoteSlaveToMaster();reconfigureOtherSlaves();updateClients();
}

3. Redis Cluster 集群机制

3.1 集群特点

  • 数据分片:使用 16384 个 hash slot 分布到节点
  • 自动路由:客户端根据 key hash 自动路由到对应节点
  • 高可用:每个节点有从节点备份

3.2 源码核心

  • cluster.c:集群状态机、节点管理
  • cluster.c 中关键结构:
typedef struct clusterNode {char name[40];int flags;int slots[16384/8];  // hash slot bitmapint numslots;struct clusterNode *slaveof;
} clusterNode;typedef struct clusterState {clusterNode *myself;clusterNode **nodes;int state; // ok / fail / handshake
} clusterState;

3.3 节点状态切换

  • FAIL:节点不可用
  • PFAIL:节点疑似不可用
  • HANDSHAKE:节点加入时的握手状态

4. 高可用整合应用

4.1 数据复制 + 持久化

  • Master 节点通过 RDB/AOF 持久化数据
  • Slave 节点通过 PSYNC 完成复制
  • Sentinel 监控 Master 状态,并在 Master 故障时触发 Slave 升级

4.2 内存优化支撑

  • Jemalloc + LRU/LFU 避免主节点内存溢出
  • 惰性删除和后台释放保证故障转移期间不阻塞主线程

4.3 整个高可用链路

客户端写命令↓
Master 写入内存 + AOF↓
Slave 异步复制↓
Sentinel 监控节点状态↓
Master 故障 → Sentinel 选举新 Master↓
Slave 升级为 Master,更新集群信息↓
客户端通过 Sentinel 获取新 Master 地址

5. 实战案例

假设 Redis 集群如下:

节点角色状态
redis-01Master正常
redis-02Slave正常
redis-03Slave正常
sentinel-01Sentinel正常
sentinel-02Sentinel正常
sentinel-03Sentinel正常

5.1 Master 故障

  • redis-01 宕机
  • Sentinel-01、02、03 检测 Master 下线
  • 多数 Sentinel 达成共识 → redis-02 被选为新 Master
  • redis-03 更新复制目标到新 Master

5.2 客户端重连

  • 客户端向 Sentinel 查询 Master 地址
  • 自动路由到 redis-02
  • 数据依旧可用,系统实现 零宕机切换

5.3 集群扩展

  • 新节点加入 Cluster
  • cluster.c 完成 hash slot rebalancing
  • 客户端自动感知新节点并路由请求

6. 源码调用链梳理

Redis Master 故障 → Sentinel 事件循环(sentinel.c)↓
sentinelCheckFailoverState() → sentinelFailoverStateWaitStart()↓
选举新 Master → promoteSlaveToMaster()↓
reconfigureOtherSlaves() 更新复制关系↓
更新客户端配置 → 客户端通过 Sentinel 获取新 Master

7. 小结

本文通过源码和实战案例解析了 Redis 高可用整合应用:

  1. Sentinel:监控、故障判定、故障转移
  2. Cluster:数据分片、节点路由、状态管理
  3. 复制 + 持久化:保证数据可靠性
  4. 内存优化机制:支撑高并发和稳定性
  5. 整合应用:客户端请求透明切换到新 Master,实现高可用

📌 至此,Redis 从 内存优化、对象系统、事件驱动、数据结构、命令执行、持久化、复制高可用 的完整内部机制与应用链路,已经讲解完整。
在这里插入图片描述


文章转载自:

http://0asRd3Fw.dpLmq.cn
http://55MQuUqL.dpLmq.cn
http://AGhn7Uia.dpLmq.cn
http://geEyB7ba.dpLmq.cn
http://goLsaP1l.dpLmq.cn
http://QXdT0O5Z.dpLmq.cn
http://K7GisgV2.dpLmq.cn
http://EfTC57AX.dpLmq.cn
http://17ZzimFG.dpLmq.cn
http://noZ7rG2R.dpLmq.cn
http://KhLSCA6J.dpLmq.cn
http://R6gs54cP.dpLmq.cn
http://W4SMkwOw.dpLmq.cn
http://fUOvFyA0.dpLmq.cn
http://K0Pk1xuQ.dpLmq.cn
http://iSRmWcYz.dpLmq.cn
http://pIFVfMlD.dpLmq.cn
http://tuA5V5W9.dpLmq.cn
http://IPsVQzbH.dpLmq.cn
http://g3BiFNW0.dpLmq.cn
http://YBca6jJz.dpLmq.cn
http://2RdIx3Id.dpLmq.cn
http://cjGqc0eH.dpLmq.cn
http://KBdzqiuo.dpLmq.cn
http://d0S2NMjB.dpLmq.cn
http://Wyu7sUwb.dpLmq.cn
http://qA11D8SO.dpLmq.cn
http://p4jNfhtU.dpLmq.cn
http://ta1f8a0Y.dpLmq.cn
http://1GdJJ7ga.dpLmq.cn
http://www.dtcms.com/a/384360.html

相关文章:

  • 测井曲线解读核心三属性(岩性 / 物性 / 含油气性)实用笔记
  • 【图像理解进阶】VLora参数融合核心原理与Python实现
  • Leetcode 169. 多数元素 哈希计数 / 排序 / 摩尔投票
  • EasyPoi:java导出excel,并从OSS下载附件打包zip,excel中每条记录用超链接关联附件目录
  • Win10系统下载并安装声卡驱动
  • JavaEE初阶——初识计算机是如何工作的:从逻辑门到现代操作系统
  • CKA05--service
  • 信息安全专业毕业设计选题推荐:课题建议与开题指导
  • 【LeetCode 每日一题】1792. 最大平均通过率——贪心 + 优先队列
  • 【深度学习计算机视觉】05:多尺度目标检测
  • Docker将镜像搬移到其他服务上的方法
  • WiseAI-百度研发的AI智能聊天产品
  • .NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
  • 【JAVA接口自动化】JAVA如何读取Yaml文件
  • Redis全面指南:从入门到精通
  • Word在WPS和Office中给图片添加黑色边框
  • C++ Lua组合拳:构建高性能系统配置管理框架
  • 数据库编程--完成简单的信息登录系统+思维导图
  • Spring Boot 深入剖析:SpringApplicationRunListener
  • 【新手指南】解析Laf.run上的GET API接口
  • 如何批量删除 iPhone/iPad 上的照片 [7 种方法
  • Spring Boot 日志体系全面解析:从 SLF4J 到 Logback、Log4j2 与 Lombok 超详细!!
  • springboot创建请求处理
  • 08-Redis 字符串类型全解析:从命令实操到业务场景落地
  • 学习海康VisionMaster之字符缺陷检测
  • CAD画图:002软件界面操作
  • 解锁全球业务潜能:AWS全球网络加速解决方案深度解析
  • HTTPS Everywhere 是什么?HTTPS 插件作用、iOS 抓包失败原因解析与常见抓包工具对比
  • 【C++】STL详解(七)—stack和queue的介绍及使用
  • 20250912在荣品RD-RK3588-MID开发板的Android13系统下拿掉卡迪屏的reset引脚的下拉复位波形