宕机后,Redis如何实现快速恢复?

news/2026/1/22 13:56:01/文章来源:https://www.cnblogs.com/shaluyouxi/p/19516825
Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵。
下面就来具体来看看Redis的故障恢复是如何做的,以及其中的原理。

部署模式

Redis在部署时,可以采用多种方式部署,每种部署方式对应不同的可用级别。单节点部署:只有一个节点提供服务,读写均在此节点,此节点宕机则数据全部丢失,直接影响业务。master-slave方式部署:两个节点组成master-slave模式,在master上写入,slave上读取,读写分离提高访问性能,master宕机后,需要手动把slave提升为master,业务影响程度取决于手动提升master的延迟。master-slave+哨兵方式部署:master-slave与上述相同,不同的是增加一组哨兵节点,用于实时检查master的健康状态,在master宕机后自动提升slave为新的master,最大程度降低不可用的时间,对业务影响时间较短。从上面几种部署模式可以看出,提高Redis可用性的关键是:多副本部署 + 自动故障恢复,而多副本正是依赖主从复制。

高可用做法

Redis原生提供master-slave数据复制,保证slave永远与master数据保持一致。在master发生问题时,我们需要把slave提升为master,继续提供服务。而这个提升新master的操作,如果是人工处理,必然无法保证及时性,所以Redis提供了哨兵节点,用来管理master-slave节点,并在master发生问题时,能够自动进行故障恢复操作。整个故障恢复的工作,正是Redis哨兵自动完成的。

哨兵介绍

哨兵是Redis高可用的解决方案,它是一个管理多个Redis实例的服务工具,可以实现对Redis实例的监控、通知、自动故障转移。在部署哨兵时,我们只需要在配置文件中配置需要管理的master节点,哨兵节点就可以根据配置,对Redis节点进行管理,实现高可用。

 

 

一般我们需要部署多个哨兵节点,这是因为在分布式场景下,要想确定某个机器的某个节点上否发生故障,只用一台机器去检测可能是不准确的,很有可能这两台机器的网络发生了故障,而节点本身并没有问题。所以对于节点健康检测的场景,一般都会采用多个节点同时去检测,且多个节点分布在不同机器上,节点数量为奇数个,避免因为网络分区导致哨兵决策错误。这样多个哨兵节点互相交换检测信息,最终决策才能确认某个节点上否真正发生了问题。哨兵节点部署并配置完成后,哨兵就会自动地对配置的master-slave进行管理,在master发生故障时,及时地提升slave为新的master,保证可用性。那么它的工作原理上怎样的呢?

哨兵工作原理

哨兵的工作流程主要分为以下几个阶段:
  • 状态感知
  • 心跳检测
  • 选举哨兵领导者
  • 选择新的master
  • 故障恢复
  • 客户端感知新master
下面对这些阶段进行详细的介绍。

状态感知

哨兵启动后只指定了master的地址,哨兵要想在master故障时进行故障恢复,就需要知道每个master对应的slave信息。每个master可能不止一个slave,因此哨兵需要知道整个集群中完整的的拓扑关系,如何拿到这些信息?哨兵每隔10秒会向每个master节点发送info命令,info命令返回的信息中,包含了主从拓扑关系,其中包括每个slave的地址和端口号。有了这些信息后,哨兵就会记住这些节点的拓扑信息,在后续发生故障时,选择合适的slave节点进行故障恢复。哨兵除了向master发送info之外,还会向每个master节点特殊的pubsub中发送master当前的状态信息和哨兵自身的信息,其他哨兵节点通过订阅这个pubsub,就可以拿到每个哨兵发来的信息。这么做的目的主要有2个:
  • 哨兵节点可以发现其他哨兵的加入,进而方便多个哨兵节点通信,为后续共同协商提供基础
  • 与其他哨兵节点交换master的状态信息,为后续判断master是否故障提供依据

心跳检测

在故障发生时,需要立即启动故障恢复机制,那么如何保证及时性呢?每个哨兵节点每隔1秒向master、slave、其他哨兵节点发送ping命令,如果对方能在指定时间内响应,说明节点健康存活。如果未在规定时间内(可配置)响应,那么该哨兵节点认为此节点主观下线。为什么叫做主观下线?因为当前哨兵节点探测对方没有得到响应,很有可能这两个机器之间的网络发生了故障,而master节点本身没有任何问题,此时就认为master故障是不正确的。要想确认master节点是否真正发生故障,就需要多个哨兵节点共同确认才行。每个哨兵节点通过向其他哨兵节点询问此master的状态,来共同确认此节点上否真正故障。如果超过指定数量(可配置)的哨兵节点都认为此节点主观下线,那么才会把这个节点标记为客观下线

选举哨兵领导者

确认这个节点真正故障后,就需要进入到故障恢复阶段。如何进行故障恢复,也需要经历一系列流程。首先需要选举出一个哨兵领导者,由这个专门的哨兵领导者来进行故障恢复操作,不用多个哨兵都参与故障恢复。选举哨兵领导者的过程,需要多个哨兵节点共同协商来选出。这个选举协商的过程,在分布式领域中叫做达成共识,协商的算法叫做共识算法。共识算法主要为了解决在分布式场景下,多个节点如何针对某一个场景达成一致的结果。共识算法包括很多种,例如Paxos、Raft、Gossip算法等,感兴趣的同学可以自行搜索相关资料,这里不再展开来讲。哨兵选举领导者的过程类似于Raft算法,它的算法足够简单易理解。简单来讲流程如下:
  • 每个哨兵都设置一个随机超时时间,超时后向其他哨兵发送申请成为领导者的请求
  • 其他哨兵只能对收到的第一个请求进行回复确认
  • 首先达到多数确认选票的哨兵节点,成为领导者
  • 如果在确认回复后,所有哨兵都无法达到多数选票的结果,那么进行重新选举,直到选出领导者为止
选择出哨兵领导者后,之后的故障恢复操作都由这个哨兵领导者进行操作。

选择新的master

哨兵领导者针对发生故障的master节点,需要在它的slave节点中,选择一个节点来代替其工作。这个选择新master过程也是有优先级的,在多个slave的场景下,优先级按照:slave-priority配置 > 数据完整性 > runid较小者进行选择。也就是说优先选择slave-priority最小值的slave节点,如果所有slave此配置相同,那么选择数据最完整的slave节点,如果数据也一样,最后选择runid较小的slave节点。

提升新的master

经过优先级选择,选出了备选的master节点后,下一步就是要进行真正的主从切换了。哨兵领导者给备选的master节点发送slaveof no one命令,让该节点成为master。之后,哨兵领导者会给故障节点的所有slave发送slaveof $newmaster命令,让这些slave成为新master的从节点,开始从新的master上同步数据。最后哨兵领导者把故障节点降级为slave,并写入到自己的配置文件中,待这个故障节点恢复后,则自动成为新master节点的slave。至此,整个故障切换完成。

客户端感知新master

最后,客户端如何拿到最新的master地址呢?哨兵在故障切换完成之后,会向自身节点的指定pubsub中写入一条信息,客户端可以订阅这个pubsub来感知master的变化通知。我们的客户端也可以通过在哨兵节点主动查询当前最新的master,来拿到最新的master地址。另外,哨兵还提供了“钩子”机制,我们也可以在哨兵配置文件中配置一些脚本逻辑,在故障切换完成时,触发“钩子”逻辑,通知客户端发生了切换,让客户端重新在哨兵上获取最新的master地址。一般来说,推荐采用第一种方式进行处理,很多客户端SDK中已经集成好了从哨兵节点获取最新master的方法,我们直接使用即可。

总结

可见,为了保证Redis的高可用,哨兵节点要准确无误地判断故障的发生,并且快速的选出新的节点来代替其提供服务,这中间的流程还是比较复杂的。中间涉及到了分布式共识、分布式协商等知识,目的都是为了保证故障切换的准确性。

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

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

相关文章

聊聊启程国际旅行社口碑怎么样,是否值得游客选择

2026年北京文旅市场迎来高质量复苏,文旅融合与科技赋能成为行业升级的核心方向。无论是文化深度体验线路的设计、入境游全链路服务,还是智慧文旅场景的打造,优质旅行社的专业能力直接决定游客的出行体验与企业的市场…

Java版LeetCode热题100之单词拆分:从动态规划到面试实战的全面解析

Java版LeetCode热题100之单词拆分:从动态规划到面试实战的全面解析 本文深入剖析 LeetCode 第139题「单词拆分」,涵盖题目理解、算法设计、代码实现、复杂度分析、优化思路、数据结构基础、面试应对策略以及实际应用场景等多个维度,是一篇面向…

【软考每日一练015】计算机网络:DNS 递归查询与迭代查询解析

【软考每日一练015】计算机网络:DNS 递归查询与迭代查询解析 1. 原题目 题目: 主机 PC 对某个域名进行查询,最终由该域名的授权域名服务器解析并返回结果,查询过程如下图所示。这种查询方式中不合理的是( &#xff0…

2026年最新在线客服软件与系统推荐:全面评测与选择指南

随着AI大模型与多模态技术的普及,在线客服系统已从“渠道承接”升级为“业务智能引擎”,全渠道整合、AI自主决策、数据安全合规成为企业选型核心诉求。当前市场呈现“AI原生架构为主流,垂直场景定制为补充”的格局,…

2026医学考研课程排名前十出炉!避坑指南+选课干货全整理

2026医学考研课程排名前十出炉!避坑指南+选课干货全整理宝子们!医学考研有多卷不用多说了吧?2025年医学类考研报名人数都突破123万了,较上一年增长14.7%,热门院校部分专业报录比甚至超过10:1。想在千军万马中成功…

近6亿元!欧洲航天局站台,这家瑞士企业用3D打印重构卫星制造

不只是火箭,3D打印也正在造“卫星”。 2026年1月22日,据资源库了解,欧洲卫星系统与射频(RF)产品制造商SWISSto12宣布,通过欧洲航天局(ESA)旗下ARTES HummingSat合作项目,…

arcGis连不上HighGoDB的解决方案

文章目录 环境文档用途详细信息相关文档 环境 系统平台: 版本:4.7.6 文档用途 本文档主要介绍如何使得arcGis客户端能正确的连接HighGoDB数据库 详细信息 问题情况: 解决办法: 第一步:HighGoDB–>ArcGis的dl…

2026论文降AIGC率工具排行榜,CSDN权威评测AI率狂降至8%,多平台通杀还加密防漏!

作为常年和论文、文案打交道的“AI检测闯关人”,2025-2026年实测了20+款降AIGC率工具,踩过机械改写的坑,也挖到了真宝藏神器。2026年知网、维普等AI检测算法又双叒升级,单纯同义词替换早已失效,这份CSDN、凤凰网等…

Java版LeetCode热题100之最长递增子序列:从O(n²)动态规划到O(n log n)贪心+二分的深度剖析

Java版LeetCode热题100之最长递增子序列:从O(n)动态规划到O(n log n)贪心二分的深度剖析 本文全面解析 LeetCode 第300题「最长递增子序列」(Longest Increasing Subsequence, LIS),涵盖题目理解、两种经典解法(DP与贪…

大数据毕业设计选题推荐:基于Spark+Django的旅游评价分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘

✍✍计算机毕设指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡有什么问题可以…

Java版LeetCode热题100之乘积最大子数组:动态规划中的正负博弈与空间优化艺术

Java版LeetCode热题100之乘积最大子数组:动态规划中的正负博弈与空间优化艺术 本文深入剖析 LeetCode 第152题「乘积最大子数组」,从问题本质出发,详解为何普通最大子序和思路失效,如何通过维护最大/最小值双状态解决负数翻转问题…

2026年高适配工单系统品牌厂商盘点,靠谱推荐清单

2026年,企业数字化协同进入深水区,工单系统作为连接服务需求与执行闭环的核心工具,已从单一客服场景延伸至全业务链路。随着跨部门协作、现场服务等需求激增,市场对系统的合规性、智能化、集成能力要求显著提升,一…

Java版LeetCode热题100之分割等和子集:从NP完全问题到0-1背包的深度解析

Java版LeetCode热题100之分割等和子集:从NP完全问题到0-1背包的深度解析 本文全面剖析 LeetCode 第416题「分割等和子集」,这是一道经典的 NP 完全问题,可转化为 0-1 背包模型。文章涵盖题目理解、动态规划建模、二维与一维DP实现、复杂度分析…

【译】Visual Studio 2026 来了:更快、更智能,深受老用户的喜爱

我们非常激动地宣布,Visual Studio 2026 现已正式发布!这一刻是我们与您携手共创的成果。您的反馈对本次版本的塑造作用超过了以往任何一次。自 2025 年 9 月推出 Insiders 通道以来,下载并测试该预览版的开发者数量…

医学考研党必看!这些资料带你稳稳上岸

医学考研党必看!这些资料带你稳稳上岸医学考研内卷有多激烈不用多说吧?每年都是千军万马过独木桥,选对资料直接少走一半弯路!作为深耕教育领域的博主,今天就把私藏的医学考研资料清单整理出来了,从基础到冲刺全覆…

Java锁优化:从synchronized到CAS的演进与实战选择

文章目录 📊📋 一、 序言:线程同步的“速度与激情”🌍📈 二、 深度拆解:synchronized的锁升级之路🛡️🧩 2.1 锁的物理载体:Mark Word🔄🧱 2.2 演…

第六课 · 6.1从 JDBC 到 MyBatis:SQL 工程化是如何发生的?

如果说 ORM 是“对象如何存在于数据库中的体系”, 那 MyBatis,就是这套体系中最靠近数据库的一条工程路线。这一篇不讲 XML 怎么写,不讲分页插件,不教 CRUD。 我们只回答一个问题:👉 为什么 JDBC 一定会进化…

Java版LeetCode热题100之最长有效括号:三种解法深度剖析与算法思维升华

Java版LeetCode热题100之最长有效括号:三种解法深度剖析与算法思维升华 本文全面解析 LeetCode 第32题「最长有效括号」,这是一道考察字符串处理、动态规划、栈应用及双指针技巧的经典难题。文章涵盖题目理解、三种主流解法(DP、栈、双指针&a…

2026申请香港优才中介机构有哪些:从政策适配到服务全面对比

2026想办理香港优才申请中介推荐哪家?寰行盛世成为众多精英的首选香港身份服务机构。 2026年,香港优才计划(优秀人才入境计划)凭借“无投资、无雇主要求、无名额限制”的核心优势,仍是内地人才赴港的首选路径。但…

客船按需定制厂家怎么选?青岛雷旺达船舶是优选

在水上旅游蓬勃发展的当下,一艘契合景区特色与运营需求的客船,是提升游客体验、拓展业务边界的核心载体。面对市场上琳琅满目的客船制造商,如何挑选兼具品质、定制化能力与售后保障的合作伙伴?以下结合客船按需定制…