Redis 高可用与集群原理

在这里插入图片描述

1. 前言

Redis 单机虽然高性能,但一旦节点宕机,数据丢失或服务不可用问题会非常严重。为了解决这一问题,Redis 提供了 主从复制、哨兵(Sentinel)、Cluster 集群 等高可用机制。

这一篇文章我们重点拆解:

  • Sentinel 哨兵机制:如何发现故障、如何自动主从切换。
  • Cluster 集群架构:如何实现分片存储与高可用。
  • Gossip 协议:节点间如何通信。
  • 故障转移源码剖析:Redis 内部实现流程。

2. Redis 高可用架构演进

  1. 主从复制(Replication)

    • 提供读写分离,但主节点宕机会导致服务中断,需要人工干预。
  2. 哨兵(Sentinel)

    • 自动监控主节点健康,支持 自动故障转移
  3. Cluster 集群

    • 支持 数据分片(水平扩展),并内置高可用。

👉 可以理解为:
复制 = 数据冗余
Sentinel = 自动运维
Cluster = 扩展能力 + 内置高可用


3. Sentinel 哨兵机制

3.1 Sentinel 的作用

  • 监控(Monitoring):周期性检测 Master 和 Slave 是否可达。
  • 通知(Notification):当节点异常时,向客户端/其他哨兵发送通知。
  • 故障转移(Failover):自动将一个 Slave 提升为新的 Master,并让其他 Slave 复制它。

3.2 故障检测机制

  • 主观下线(SDOWN):某个 Sentinel 认为 Master 不可达。
  • 客观下线(ODOWN):多数 Sentinel 达成共识,确认 Master 宕机。

3.3 Leader 选举

在多个 Sentinel 中,需要选出一个 Leader 来执行故障转移,算法基于 Raft 的选举思想

  • 每个 Sentinel 给候选者投票。
  • 超过半数票数的 Sentinel 当选 Leader。

3.4 源码剖析(sentinel.c)

哨兵检测主观下线:

// sentinel.c
if (mst->flags & SRI_MASTER) {if ((mst->flags & SRI_S_DOWN) == 0 && mst->link->disconnected) {mst->flags |= SRI_S_DOWN; // 标记主观下线sentinelEvent(LL_WARNING, "+sdown", mst, "%@");}
}

这段代码表明,当哨兵发现主节点无法连接时,会标记为 S_DOWN


4. Redis Cluster 集群架构

4.1 核心特性

  • 分布式存储:采用 16384 个哈希槽(hash slots),每个节点负责一部分槽位。
  • 高可用:每个分片至少有 1 个 Master 和若干 Slave。
  • 自动故障转移:某个 Master 挂掉时,其 Slave 自动升级为新的 Master。

4.2 集群拓扑

         ┌───────────┐│   Client  │└─────┬─────┘│┌─────────────▼─────────────┐│        Cluster            ││ ┌────────┐   ┌────────┐   ││ │ Master │   │ Master │   │ ...│ │ Slot 0 │   │ Slot 5461  ││ └───▲────┘   └────▲───┘   ││     │            │         ││   ┌─┴─┐        ┌─┴─┐       ││   │Slave│      │Slave│     ││   └─────┘      └─────┘     │└────────────────────────────┘

4.3 请求路由

  • Client 向某个节点发起请求。
  • 如果 Key 不在本节点的槽位范围,返回 MOVED 重定向。
  • 客户端更新槽位映射表,下次直连正确节点。

5. Gossip 协议

Redis Cluster 中节点通信依赖 Gossip 协议,类似于 流言传播

  • 每个节点周期性地向随机节点发送 PING
  • 接收节点返回 PONG,附带自己已知的集群信息。
  • 这样集群拓扑信息逐渐在所有节点中收敛。

消息类型:

  • MEET:新节点加入。
  • PING/PONG:心跳检测与状态同步。
  • FAIL:节点失效信息。

👉 Gossip 的特点是 去中心化、最终一致性


6. 故障转移源码剖析

当 Master 宕机时,Cluster 的转移逻辑如下:

  1. 检测故障
// cluster.c
if (node->flags & (CLUSTER_NODE_FAIL | CLUSTER_NODE_PFAIL)) {// 标记为下线
}
  1. Slave 竞选新 Master
  • 每个 Slave 会尝试升级为 Master。
  • 使用投票机制,获得过半节点支持的 Slave 升级。
  1. 重新分配槽位
// cluster.c
clusterFailoverReplaceYourMaster();

执行槽位迁移,客户端可继续访问。

  1. 客户端感知
  • 客户端收到 MOVED / ASK,刷新槽位映射。

7. 总结

本文深入分析了 Redis 高可用与集群原理:

  1. Sentinel:实现了自动故障转移,基于 SDOWN/ODOWN 和选举机制。
  2. Cluster:通过哈希槽实现数据分片和自动转移。
  3. Gossip 协议:支撑集群中节点间的通信和状态同步。
  4. 源码剖析:揭示了 Redis 在 sentinel.ccluster.c 中的故障转移实现。

📌 下一步可以写 Redis 持久化(RDB/AOF)与复制原理,这样整个高可用 + 数据可靠性体系就完整了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97746.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97746.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97746.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle OCP认证考试题目详解082系列第31题

考察知识点:SET VERIFY ON命令 英文题目 Which two statements are true about the SET VERIFY ON command? A.It displays values for variables prefixed with && B.It displays values for variables created by the DEFINE command C.It can be used in SQL Dev…

【WebSocket✨】入门之旅(五):WebSocket 的安全性

本篇文章将讲解 WebSocket 的安全性,特别是如何防止常见的 WebSocket 安全漏洞,如中间人攻击(MITM)、XSS、CSRF 等。我们将介绍如何使用 wss:// 协议保障数据传输的安全,并给出一些安全最佳实践,帮助你在使…

流程图用什么工具做?免费/付费工具对比,附在线制作与下载教程

在日常工作和学习中,流程图是一种高效的可视化工具——项目开发时梳理需求逻辑、业务推进中拆解步骤节点、学术研究里呈现论证框架,甚至是生活中规划旅行路线,都能借助流程图让复杂信息变得清晰易懂。但面对市面上五花八门的流程图工具&#…

Oracle重做日志(Redo Log):数据一致性的“守护者“

在Oracle数据库的三大核心文件中,数据文件承载着最终的业务数据,控制文件记录着数据库的"身份档案",而重做日志(Redo Log)则扮演着"事务日记"的关键角色——它以不可篡改的方式记录每一次数据变更…

C++学习:map/set源码剖析+利用红黑树封装map/set

前面我们已经学习了红黑树这个高级数据结构的实现。我们知道STL的map/set的底层数据结构为红黑树,本期就查看STL源码的map/set,并结合着这之前的红黑树的实现,模拟实现map和set的一部分功能 STL源码:楼田莉子/CPP代码学习 作者的个…

【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录:每一次抉择,都是将未来的自己轻轻推向某个方向 ★★★ 本文前置知识: 红黑树 原理 那么在上一期博客中&#xf…

JVM默认栈大小

JVM 里线程栈的大小不是一个固定值,而是由 操作系统平台、JVM 实现版本、以及启动参数 共同决定的。 常见情况(以 HotSpot 为例): Linux / macOS 64 位 JVM 默认大约是 1M (1024 KB)32 位 JVM 默认大约是 3…

AI 机器视觉检测方案:破解食物包装四大质检难题,筑牢食品安全防线

在食品生产领域,包装盒或包装袋作为食品的直接包装载体,其质量优劣直接关系到食品安全与企业声誉。传统人工质检在应对食物包装生产的高速节奏与复杂质量问题时,逐渐暴露出诸多局限性,成为企业发展的瓶颈。而 AI 视频检测技术的出…

嵌入式 Linux 安全简介-第二部分

大家好!我是大聪明-PLUS!这是有关嵌入式Linux安全性的文章的第二部分。在第一部分中,我们讨论了一些安全概念、威胁建模、安全启动、代码和数据加密、加密密钥和密钥存储技术。在第二部分中,让我们继续讨论提高嵌入式 Linux 设备安…

Vue3+JS 复杂表单实战:从验证到性能优化的全流程方案

继上一篇分享组合式 API Hook 封装后,这次想聚焦前端开发中 “让人又爱又恨” 的场景 —— 复杂表单。不管是管理后台的配置表单,还是用户中心的多步骤提交,表单处理都占了业务开发的 40% 以上。这篇文章会从实际项目痛点出发,分享…

[特殊字符] Python在CentOS系统执行深度指南

文章目录1 Python环境安装与配置问题1.1 系统自带Python的限制1.2 安装Python 3的常见问题及解决方案1.3 SSL模块问题解决方案1.4 环境变量配置与管理1.5 软件集合(SCL)替代方案2 包管理与虚拟环境问题2.1 pip包管理器问题与解决方案2.2 虚拟环境的最佳实…

ptx 简介03,ldmatrix 的应用实例解析

1. 实例编译 运行 main.cu //nvcc -g -lineinfo -stdc17 -archnative main.cu -o main#include <iostream> #include <thrust/device_vector.h>/* ldmatrix.sync.aligned.shape.num{.trans}{.ss}.type r, [p];.shape {.m8n8}; .num {.x1, .…

PostgreSQL 的核心优势数据库优化与面试问题解析

Part0: PostgreSQL 的核心优势PostgreSQL 的核心优势可以总结为&#xff1a;它不仅仅是一个关系型数据库&#xff0c;更是一个功能极其强大、设计高度严谨、且具有无限扩展潜力的数据平台。其核心优势主要体现在以下几个方面&#xff1a;1. 高度符合 SQL 标准与可靠性&#xff…

牛客周赛 Round 109 (小红的直角三角形

小红的直角三角形思路&#xff1a;当作向量来求&#xff0c;向量乘为0&#xff1b;#include<bits/stdc.h> #define ll long long #define endl "\n" using namespace std; typedef pair<ll, ll> pll; int n; vector<pll> u; void solve() {int x,…

efcore 对象内容相同 提交MSSQL后数据库没有更新

一、efcore 对象内容相同 提交MSSQL后数据库没有更新在.net6EFcore6环境&#xff0c;遇到一个问题&#xff0c;当界面UI传给EF的对象值没有变化&#xff0c;它居然不去更新数据库。那我有2个EFcore实例都在更新数据库&#xff0c;值一直不变&#xff0c;程序就更新不到数据库中…

DockerComposeUI+cpolar:容器管理的远程可视化方案

前言&#xff1a;DockerComposeUI作为Docker容器的可视化管理工具&#xff0c;通过直观的Web界面实现容器的启动、暂停、终止等操作&#xff0c;支持镜像管理和Compose文件编辑。特别适合开发团队和运维人员&#xff0c;其图形化操作简化了复杂的命令行操作&#xff0c;状态面板…

H5 页面与 Web 页面的制作方法

1. H5 页面制作使用 HTML5、CSS3 和 JavaScript 技术&#xff1a;这些技术支持创建交互式和响应式 H5 页面。使用 H5 编辑器或框架&#xff1a;如 Adobe Dreamweaver、Brackets 或 Ionic&#xff0c;这些工具提供了预先构建的模板和组件&#xff0c;简化了开发过程。考虑移动设…

1.6、机器学习-决策树模型(金融实战)

决策树是一种基于特征分割的监督学习算法,通过递归分割数据空间来构建预测模型。 1.1、决策树模型基本原理 决策树思想的来源朴素,程序设计中的条件分支结构就是 if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。为了更好理解决策树具体怎么分类的,…

常见中间件的同步算法、CAP 默认倾向及自定义支持情况

文章目录CAP 概念1、比较2、关键说明&#xff1a;CAP 概念 CAP 定理指分布式系统无法同时满足​​一致性&#xff08;C​​onsistency&#xff09;、​​可用性&#xff08;​​A​​vailability&#xff09;、​​分区容错性&#xff08;​​P​​artition Tolerance&#xf…

Spring 中处理 HTTP 请求参数注解全解析

在 Spring 框架的 Web 开发中&#xff0c;处理 HTTP 请求参数是一项基础且重要的工作。除了 PathVariable、RequestParam 和 Valid RequestBody 外&#xff0c;还有一些其他注解也用于此目的。本文将对这些注解进行全面的区分和解析&#xff0c;帮助开发者在实际项目中更准确地…