滚雪球学Redis[4.2讲]:Redis Sentinel 深度解析:工作原理、配置与高可用架构下的故障转移
全文目录:
- 🎉前言
- 🚦4.2 Redis Sentinel
- 🔄Sentinel的工作原理
- Sentinel的选举机制
- ⚙️Sentinel的配置与使用
- 示例:配置Redis Sentinel
- Sentinel自动故障转移过程示例
- 🧩高可用架构下的故障转移
- 常见问题与优化
- 实际部署中的经验
- 🚀展望下一节内容:Redis Cluster
- 🔧结论
🎉前言
在上一篇【4.1 Redis主从复制】中,我们详细讨论了Redis主从复制机制,它的主要目标是通过将读请求分摊到多个从节点上,从而提高系统的读性能和容错能力。然而,主从复制有一个致命的弱点:主节点故障时,所有的写操作都会中断,从节点也无法自动接管写操作,导致系统处于无法写入的状态。
为了解决这一痛点,Redis引入了一个至关重要的机制——Redis Sentinel。Redis Sentinel是一个高可用性解决方案,它通过监控、通知、故障转移和配置提供等功能,实现了Redis集群的自动故障转移。即使主节点出现问题,Sentinel也能在没有人工干预的情况下,将从节点提升为新的主节点,确保系统的高可用性。
在本节【4.2 Redis Sentinel】中,我们将深入解析Redis Sentinel的工作原理,并通过具体的配置与示例,展示如何使用Sentinel来确保Redis系统的高可用性。而下一节【4.3 Redis Cluster】将继续讨论如何通过集群模式来进一步提升Redis的扩展性与性能,为处理海量数据提供更为强大的架构。
🚦4.2 Redis Sentinel
🔄Sentinel的工作原理
Redis Sentinel 是一个独立运行的进程,它负责监控Redis的各个节点,并在检测到主节点(Master)故障时,自动执行主从角色切换,确保系统能够持续提供服务。它具备以下四个核心功能:
-
监控(Monitoring):Sentinel会不断地通过
PING命令检查主节点和从节点的状态,确保它们在健康运行中。当Sentinel发现某个节点无法响应时,它会将该节点标记为下线。 -
通知(Notification):Sentinel会将节点状态的变化(如主节点下线或故障转移)通过通知机制告知系统管理员或自动化系统,帮助迅速响应问题。
-
故障转移(Failover):如果主节点确实失效,Sentinel会从从节点中选出一个提升为新主节点,并将其他从节点指向新的主节点,以保证服务的正常运作。
-
配置提供(Configuration Provider):Sentinel还可以动态地向客户端提供最新的主节点地址,使得客户端能够自动切换到新的主节点,减少人工干预。
Sentinel的选举机制
在多个Sentinel共同监控一个Redis集群时,Sentinel通过分布式选举机制来决定由哪一个Sentinel执行故障转移。选举的过程涉及以下几个步骤:
-
判断主节点故障:每个Sentinel通过发送
PING命令检测主节点的健康状况。当某个Sentinel发现主节点未响应时,它会将该主节点标记为主观下线(Subjectively Down,简称SDOWN)。 -
主节点故障确认:如果有多个Sentinel都检测到主节点的失效,并且超过了配置的
quorum值(即监控主节点的Sentinel实例中大多数确认了主节点失效),该主节点会被标记为客观下线(Objectively Down,简称ODOWN)。 -
选举领导者(Leader):一旦确认主节点下线,各个Sentinel将通过选举机制决定由哪一个Sentinel负责执行故障转移。通常是最早发起选举的Sentinel实例当选为领导者。
-
执行故障转移:领导者Sentinel会将某个最新同步的从节点提升为新的主节点,并通知其他从节点进行同步。
📝 小提示:Sentinel选举的目的是为了避免多重故障转移,即在网络分区的情况下,不会同时有多个从节点被提升为主节点,这就是分布式一致性的重要性所在。
⚙️Sentinel的配置与使用
为了更好地理解Redis Sentinel的使用方式,我们可以通过具体的案例来展示它的工作过程。以下将演示如何配置一个典型的Redis Sentinel系统,并通过故障模拟展示其自动化的故障转移机制。
示例:配置Redis Sentinel
假设我们有一个包含一个主节点和两个从节点的Redis架构。主节点的IP地址为192.168.0.1,从节点分别为192.168.0.2和192.168.0.3。我们希望使用Redis Sentinel来监控该主从架构,并在主节点发生故障时自动进行故障转移。
- 配置Sentinel:每个Sentinel都有一个独立的配置文件
sentinel.conf,以下是一个典型的配置示例:
# 配置要监控的主节点
sentinel monitor mymaster 192.168.0.1 6379 2# Sentinel判定主节点失效的时间阈值(单位:毫秒)
sentinel down-after-milliseconds mymaster 5000# 配置在故障转移期间允许有多少个从节点同时与新的主节点进行同步
sentinel parallel-syncs mymaster 1# 故障转移超时时间,单位为毫秒
sentinel failover-timeout mymaster 60000
- 启动Sentinel:在每个Redis实例所在的服务器上,我们需要分别启动Sentinel进程,执行以下命令来启动:
redis-sentinel /path/to/sentinel.conf
通过上述配置,Sentinel会实时监控主节点的健康状况,当主节点192.168.0.1失效时,Sentinel将自动选举从节点并进行故障转移。
Sentinel自动故障转移过程示例
现在,我们假设主节点192.168.0.1突然宕机,Sentinel会通过以下步骤进行故障转移:
-
检测主节点失效:Sentinel不断发送
PING命令检测主节点的状态。当超过5000毫秒未收到回复时,Sentinel会标记主节点为下线。 -
确认主节点故障:多个Sentinel通过交互确认主节点失效,超过多数派(
quorum)的Sentinel确认后,主节点被标记为客观下线。 -
选举新的主节点:领导者Sentinel会选举最新同步的从节点(如
192.168.0.2)作为新的主节点。 -
通知其他从节点:领导者Sentinel通知其他从节点(如
192.168.0.3)重新同步新的主节点,并更新配置。 -
客户端自动更新:Sentinel还会通知客户端,使得它们能够自动连接到新的主节点
192.168.0.2,从而无需人工干预。
整个过程是完全自动化的,Redis系统的高可用性在这种自动故障转移中得以实现。
🧩高可用架构下的故障转移
Redis Sentinel提供了可靠的故障转移机制,使Redis集群能够应对主节点的故障而无需手动干预。但在实际的高可用架构中,故障转移的过程往往伴随一些挑战和潜在问题。
常见问题与优化
-
脑裂(Split-Brain):如果网络分区导致某些Sentinel实例无法与主节点通信,它们可能错误地认为主节点下线,导致多个从节点被提升为主节点。这种情况会造成数据的不一致,甚至引发严重的故障。
解决方案:为了避免脑裂,通常需要配置更高的
quorum值,确保只有在大多数Sentinel都确认主节点失效时,才进行故障转移。 -
数据丢失风险:当主节点宕机时,如果从节点还未同步主节点的最新数据,提升为新主节点后可能会丢失部分数据。
解决方案:可以通过调整
repl-backlog-size等参数,确保主从节点之间的同步延迟最小化,减少数据丢失的可能性。同时,启用AOF(Append-Only File)模式也可以帮助持久化数据。 -
从节点选择策略:在故障转移中,Sentinel会根据从节点的数据同步情况选择新的主节点。如果从节点数据同步不及时,选择错误的从节点作为新主节点可能会导致数据不一致。
解决方案:可以通过监控和调整从节点的同步延迟,确保选择的数据是最新的,保证故障转移过程的可靠性。
实际部署中的经验
在生产环境中,通常会部署多个Sentinel实例来监控一个Redis集群。一般建议部署三个或五个Sentinel实例,这样可以保证即使有一个Sentinel实例出现
问题,其他实例依然可以正常运行并执行故障转移。
为了进一步增强系统的高可用性,还可以通过Redis的持久化机制(如RDB快照和AOF日志)来保证即使在节点崩溃的情况下,数据也不会完全丢失。
进阶提示:Redis Sentinel适用于中小规模的高可用性场景,而对于需要更大规模扩展的场景,Redis Cluster则是更为理想的方案。通过数据分片和全局一致性机制,Redis Cluster能够支持数百甚至上千个节点,并实现更好的性能和容错能力。
🚀展望下一节内容:Redis Cluster
在下一节【4.3 Redis Cluster】中,我们将深入探讨Redis的集群模式。Redis Cluster通过数据分片的方式,将数据分布到多个节点上,从而实现了Redis的水平扩展(horizontal scaling)。这种架构在应对大规模数据存储和高并发请求时表现尤为出色。
Redis Cluster不仅能够通过分布式算法来实现高可用性,还引入了哈希槽(hash slots)机制来管理和路由数据存储的位置。此外,Redis Cluster还能够自动进行故障转移和主从切换,为大型分布式系统提供了更为完善的解决方案。
通过学习Redis Cluster,我们将能够掌握Redis在分布式环境下的最佳实践,并了解如何构建大规模、低延迟和高可用的Redis集群系统。
🔧结论
Redis Sentinel是Redis系统中保障高可用性的关键组件。它能够通过监控、通知、故障转移等机制,实现Redis系统的自动化维护和运维管理。在实际生产环境中,Sentinel可以帮助我们构建一个更具弹性和可靠性的Redis集群,确保在主节点故障时能够迅速进行故障切换,保持服务的稳定性。
通过本章的学习,相信大家已经对Redis Sentinel的工作原理、配置方法以及高可用架构有了深入理解。在面对Redis主从复制架构中的缺陷时,Sentinel为我们提供了一个便捷的解决方案,让系统具备更强的容错能力和自动化运维能力。
在接下来的【4.3 Redis Cluster】章节中,我们将继续探讨Redis在分布式系统中的表现,以及如何通过集群模式应对大规模数据和高并发的挑战。Redis Cluster是Redis高可用性和扩展性的完美结合,相信你一定会对它的强大功能感到惊叹!
相关文章:
滚雪球学Redis[4.2讲]:Redis Sentinel 深度解析:工作原理、配置与高可用架构下的故障转移
全文目录: 🎉前言🚦4.2 Redis Sentinel🔄Sentinel的工作原理Sentinel的选举机制 ⚙️Sentinel的配置与使用示例:配置Redis SentinelSentinel自动故障转移过程示例 🧩高可用架构下的故障转移常见问题与优化实…...
Vue3 -- 设置分页,切换分页之后选项仍能保留 控制多个表格的选中不会互相影响
在 Vue 3 中实现分页功能,并确保在切换分页时选中的选项能够保留,同时控制多个表格之间的选中状态不互相影响,可以按照以下步骤进行: 1. 数据结构设计 为每个表格维护独立的选中项和分页状态。可以使用一个对象来存储每个表格的…...
如何在 JSON 中编写“anyOf”语句?
在 JSON 中,anyOf 语句通常用于 JSON Schema(JSON 模式)中,来定义多个可能的模式,表示数据可以匹配多个子模式中的任意一个。这种功能常用于验证 JSON 数据是否符合某一组可能的条件之一。 1、问题背景 问题ÿ…...
python开发环境配置
下载python安装包安装python配置环境变量调整类库下载位置 安装python 安装python是指安装python的基础编译环境及python运行所需的必须资源,类似于安装java的JDK python2与python3差异 进行python安装前,需要先了解python2和python3的差异࿰…...
QT开发--QT SQL模块
第十五章 QT SQL模块 15.1 QT SQL模块概览 Qt SQL模块是Qt框架中操作数据库的组件,提供易用API,支持SQLite、MySQL等多种数据库。它包含数据库驱动与连接功能。 15.1.1 QSqlDatabase 类 在Qt SQL模块中,数据库驱动基于QSqlDriver类…...
如何保证接口幂等性?
一、什么是接口幂等性? 幂等性是指:同一请求,执行很多次,最终结果都一样。 二、为什么会产生接口幂等性问题? 那么,什么情况下,会产生接口幂等性的问题呢? 网络波动, 可能会引起重…...
【9718】基于springboot+vue的生鲜交易系统
作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 生鲜交易管理方面的任务繁琐,以至于交易市场每年都在生…...
Spring循环依赖解决方案
解决方案 使用提前暴露机制三级缓存进行解决 singletonObjects一级缓存,存放完整的 Bean。earlySingletonObjects二级缓存,存放提前暴露的Bean,Bean 是不完整的,未完成属性注入和执行 init 方法。singletonFactories三级缓存(用…...
解决 IntelliJ IDEA 运行时 “Command line is too long“ 问题
文章目录 文章标题:解决 IntelliJ IDEA 运行时 "Command line is too long" 问题简介问题描述解决方案代码示例代码示例1:使用JAR Manifest代码示例2:使用Classpath File代码示例3:优化项目依赖 结论进一步的资源 文章标…...
鸿蒙网络编程系列5-TCP连接超时分析
1. TCP连接超时简介 TCP是面向连接的协议,通过三次握手建立连接,但是,在建立连接的过程中对方有可能没有响应,这时候发起连接的一方会重试,如果重试多次仍然没有响应,就会触发超时,从而导致连接…...
金蝶云星空移动字段后关闭页面后重新打开无效
有同事反馈,单据的明细字段里面移动了字段,然后退出,其他字段都能按最后排版的位置显示,有个别字段始终无法按照排版的位置显示。 只需要打开BOS平台,找到对应字段,然后更改可见性。...
幂律分布笔记
一、幂律分布的数据拟合 数据分箱: 所谓分箱就是对原始数据进行分组,然后对每一组内的数据进行平滑处理。常见的分箱方式主要有等深分箱、等宽分箱、用户自定义等 对数分箱: 对原数据进行分箱,第i个箱的宽度为bi,b…...
一些NLP代表性模型
(一)BERT 由Bidirectional Encoder Representations from Transformers的首字母组成,是encoder-only结构类型的代表。 模型分预训练和微调两步,预训练任务有两类:masked language model(MLM)、next sentence predict…...
低代码移动端开发:未来的趋势与挑战
什么是低代码移动端开发? 低代码移动端开发平台允许开发者通过可视化界面和少量编码来构建应用程序。相较于传统的代码开发,低代码平台大大降低了技术和学习门槛,使非专业开发人员也能参与到移动应用的开发过程中。 低代码移动端开发的优势 …...
【Linux】嵌入式Linux系统的组成、u-boot编译
Linux—嵌入式Linux系统的组成、u-boot编译 前言一、嵌入式Linux系统的组成1.1 嵌入式Linux系统和PC完整的操作系统的对比如下:1.2 PC机—Windows系统启动流程(PC机—Linux系统、嵌入式ARM—linux系统的启动流程类似) 二、编译u-boot2.1 u-bo…...
Qt打开excel文件,并读取指定单元格数据
1. 下载并安装QXlsx库,详见之前的博文Qt子线程创建excel文件报错QObject: Cannot create children for a parent that is in a different thread.-CSDN博客 2. // 创建一个XlsxDocument对象QString filename "D:\\mydocuments\\data_acquisition\\data\\tes…...
适合下班回家做的小副业,用AI做视频,几天时间3000+
大家好,今天要给大家分享的项目是定制儿歌,精准定位宝妈群体,每天轻松赚500! ***01* 项目原理 父母都非常疼爱自己的孩子,愿意为孩子提供独特的东西。而我们正是利用这一点,通过免费AI工具生成专属的儿童…...
git的基本操作 + 分支管理
一、基本操作 1. 修改文件 Git比其他的版本管理器设计得更加优秀,因为Git追踪并管理的是修改,而非文件。 修改一个文件,不管你是添加一行,或者删除一行,还是添加了又删除了,甚至你创建了一个新文件&…...
VRRP
1、VRRP简介 虚拟路由冗余协议 VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时(单点故障…...
个人健康系统|个人健康数据管理系统|基于小程序+java的个人健康数据管理系统设计与实现(源码+数据库+文档)
个人健康数据管理系统 目录 基于小程序java的个人健康数据管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…...
Win32下用libigl+GLFW3渲染3D模型的完整配置指南(附常见错误排查)
Win32下用libiglGLFW3渲染3D模型的完整配置指南(附常见错误排查) 在Windows平台进行3D图形开发时,libigl与GLFW3的组合为开发者提供了强大的工具集。libigl作为一个轻量级的C几何处理库,与GLFW3这一跨平台的OpenGL窗口管理库结合…...
别再死记硬背了!用HuggingFace Diffusers库5分钟搞懂Stable Diffusion的VAE、U-Net和CLIP怎么协同工作
5分钟透视Stable Diffusion核心组件:用HuggingFace Diffusers实战VAE/U-Net/CLIP协同机制 当你在HuggingFace Diffusers库中第一次调用StableDiffusionPipeline时,是否好奇过那段简短的文本提示如何变成精美图像?这背后是VAE、U-Net和CLIP三…...
SpringBoot+Vue实战:手把手教你搭建社区居民健康档案管理系统(附完整源码)
SpringBootVue实战:从零构建社区居民健康档案管理系统 在数字化转型浪潮下,社区卫生服务正经历着从纸质档案到智能化管理的转变。对于Java开发者而言,这不仅是技术练兵的好机会,更是解决实际社会需求的切入点。本文将带你用Spring…...
RK3576/RK3588 Yolo11 目标检测 Demo
前言 以前的大作业,根据rknn_model_zoo和easy eai示例代码修改(缝合),仅供参考 后来我试着模块化一些,方便看,但因为核心代码都是直接用的示例代码,所以有些模块还是耦合(composit…...
光纤布拉格光栅(FBG)笔记【2】:传感机制与布拉格波长调谐分析
1. 光纤布拉格光栅的传感机制揭秘 第一次接触光纤布拉格光栅(FBG)传感时,我完全被它"以光测万物"的能力震撼了。这根比头发还细的光纤,竟然能精准感知温度、应变等物理量的变化。经过多次实验验证,我发现它的核心秘密就藏在布拉格波…...
OpenClaw语音控制扩展:Qwen3.5-4B-Claude对接Whisper实现声控自动化
OpenClaw语音控制扩展:Qwen3.5-4B-Claude对接Whisper实现声控自动化 1. 为什么需要语音控制自动化 去年冬天的一个深夜,我在赶制项目文档时突发奇想:如果能让AI听懂我的语音指令直接操作电脑,是不是连键盘都不用碰了?…...
K8s Ingress实战:如何为静态资源开启Gzip压缩和Cache Control(附完整ConfigMap配置)
Kubernetes Ingress高级配置:静态资源Gzip压缩与缓存策略实战指南 在当今快节奏的数字化体验中,网页加载速度直接影响用户留存率和转化率。根据行业研究,页面加载时间每增加1秒,可能导致转化率下降7%。作为Kubernetes运维专家&…...
从零上手Neo4j Desktop:CSV数据导入与核心Cypher操作指南
1. Neo4j Desktop环境准备与数据导入 第一次打开Neo4j Desktop时可能会被它的界面搞得有点懵,别担心,我刚开始用的时候也这样。这个工具把数据库管理、浏览器界面和插件都集成在了一起,特别适合新手快速上手。安装过程我就不赘述了࿰…...
给嵌入式新手的保姆级指南:JTAG、SWD、J-Link、ST-Link到底怎么选?
嵌入式开发调试工具全指南:从JTAG到SWD的实战选择策略 第一次拿到STM32开发板时,看着板子上那排密密麻麻的调试接口针脚,我盯着J-Link和ST-Link这两个名词发了半小时呆——它们到底有什么区别?为什么有的教程用JTAG接线࿰…...
核聚变装置逼近极限时会“漏水“:科学家发现热流平衡决定密度天花板
来源:科学剃刀人类距离可控核聚变又近了一步,但一道隐形天花板始终悬在头顶。当反应堆试图提高燃料密度以获得更多能量时,等离子体总会在某个临界点突然崩溃。这种"密度极限"现象困扰了聚变界四十年。现在,美国麻省理工…...
