百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis快速实战-哨兵机制(Redis Sentinel)详解

mhr18 2024-10-26 10:54 26 浏览 0 评论

哨兵机制

Redis Sentinel ,Redis哨兵机制,是从Redis2.8版本开始引入的机制,其主要的作用就是用来完成主节点的自动故障转移。如下图所示,是一个典型的利用哨兵机制来监控的逻辑网络图。图片来源网络。

关于哨兵机制,官方的描述是这样的,首先哨兵会不断地监视主节点和从节点是否工作正常,当主节点发生异常的时候,哨兵就开始进行自动故障的转移,其操作就是从对应主节点的从节点中挑选出一个来将其升级为主节点,并且让其他的剩余的从节点改成从新的主节点复制数据。当有新的客户端接入的时候,通过哨兵机制可以很容易的获取到当前集群的Redis的主节点信息,并且哨兵也可以将发生故障的情况发送到客户端。

其中,对于故障的监控和故障的转移功能,都可以使得哨兵可以及时的发现主节点的故障,并且完成转移,从而保证集群的高可用;而对于提到的配置的更新,或者是服务通知的功能,则需要与客户端的交互才能够更好的体现。

哨兵集群的组建

从上面图中我们看出,在Redis哨兵集群中是通过发布订阅机制来实现哨兵之间的相互发现。下面我们就来详细介绍一下该机制。

在一个主从的Redis集群中,主库中存在设置了一个sentinel的订阅频道,而哨兵就是通过这个订阅频道来完成相互之间的通信的。如下图所示,图片来源网络。

通过如上图所示的机制来完成哨兵之间的信息传递。哨兵节点1将节点信息发布到了主频道上,在哨兵2和哨兵3上订阅了该频道,所以哨兵1发出的消息哨兵2和哨兵3都能接收到。同样的哨兵2和哨兵3也采用了同样的机制来完成通信连接。这样一来三个哨兵节点之间就形成了一个消息互通的集群,并且在发生故障的时候可以相互之间通知彼此来商量如何选择新的主节点。

哨兵监控Redis库

什么是哨兵的监控?如何来监控哨兵?这个过程是通过哨兵向主库发送INFO命令来实现。如图所示,图片来源网络。

如图所示,哨兵2给主库发送了一个INFO的命令请求,主库接收到这个命令之后,就会把所有的从库列表返回给哨兵,接下来哨兵就可以根据从库列表中的数据信息,和每个从库建立连接,并且在这个连接的基础上完成对从库信息的监控。同样的哨兵1和哨兵3也可以完成这样的操作。

主库故障的判断

哨兵是如何完成主库故障的判断呢?首先主库故障下线有两个关键概念,主观下线和客观下线。

主观下线是指任何一个哨兵都可以通过监控机制来做出对Redis节点下线的判断。

客观下线是指整个的哨兵集群共同来决定的Redis节点下线。

当某个哨兵认为主节点主观下线之后,就会给其他的哨兵发送一个命令,接下来哨兵就会根据自己与主节点的连接情况,对其进行回应,如图所示,如果当回应中赞成下线的响应大于等于哨兵配置文件中的quorum的大小的时候,就可以判定主节点客观下线了,也就是说主节点出现了故障。

哨兵集群的选举

判断主节点故障之后,就需要进行新的主节点的选取以及完成主节点的切换,这个操作就需要Redis哨兵选举机制。

为了避免出现哨兵单节点的情况,就需要建立一个哨兵的分布式集群,这样就可以避免单节点问题;与此同时,对于故障的转移和通知都只需要一个主的哨兵节点来完成即可。保证了这两个条件,哨兵的选举机制就很容易理解了,就是遵循着简单的少数服从多数的原则,当选票达到了一半以上就表示该节点成为了主节点,反之则继续进行选举。其采用的算法叫做Raft算法。

也就是说任何一个节点想要成为主节点就必须满足如下的两个条件。

第一、获取到半数以上的投票

第二、获得的票数要大于等于在哨兵配置文件中的quorum的配置值

这里就会有一个新问题,关于是否客观下线与是否能够进行主从切换都有一个关键性的配置quorum配置值参与其中。那么如何进行判断呢?

例如有一主四从,五个节点的集群,并且哨兵配置quorum为2,如果这个时候有三个哨兵节点出现了故障。这个时候主节点也出现了故障,哨兵还能否判断出主库的客观下线故障呢?

前面我们提到哨兵节点判断主节点客观下线的条件是quorum=2,所以当一个哨兵判断到主观下线之后,就会通知另一个哨兵询问情况,这个时候两个哨兵都判断了主观下线,那么就可以判断主节点为客观下线。

而这个时候就要进行选举了,当哨兵标记主节点下线之后,就会进行一个选择,这个时候需要满足一个一半以上的原则,也就是说有5个节点除以2加一之后的结果是3。但是目前只有两个节点存活,所以无法完成主节点的切换。

选主条件

完成主库的客观下线之后,如何从从库中选择出一个新的主库呢?就需要满足如下的一些条件。首先,需要过滤掉一些不健康的节点,也就是与哨兵之间没有响应的节点。其次,选择配置优先级较高的从节点。第三,选择数据量较为完整的从节点。如下图所示。

故障转移

主库确定之后,就要开始故障转移操作了,如下图所示。

建设主库客观下线嘞,并且选择了哨兵3是leader。

  1. 将slave-1脱离原从节点升级主节点,
  2. 将从节点slave-2指向新的主节点
  3. 通知客户端主节点已更换
  4. 将原主节点(oldMaster)变成从节点,指向新的主节点

转移之后的效果如下

相关推荐

B站收藏视频失效?mybili 收藏夹备份神器完整部署指南

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙很多B站用户都有过类似经历:自己精心收藏的视频突然“消失”,点开一看不是“已被删除”,就是“因UP主设置不可见”。而B站并不会主动通知...

中间件推荐初始化配置

Redis推荐初始化配置bind0.0.0.0protected-modeyesport6379tcp-backlog511timeout300tcp-keepalive300...

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

后端开发必看!Redis 哨兵机制如何保障系统高可用?

你是否曾在项目中遇到过Redis主服务器突然宕机,导致整个业务系统出现数据读取异常、响应延迟甚至服务中断的情况?面对这样的突发状况,作为互联网大厂的后端开发人员,如何快速恢复服务、保障系统的高可用...

Redis合集-大Key处理建议

以下是Redis大Key问题的全流程解决方案,涵盖检测、处理、优化及预防策略,结合代码示例和最佳实践:一、大Key的定义与风险1.大Key判定标准数据类型大Key阈值风险场景S...

深入解析跳跃表:Redis里的"老六"数据结构,专治各种不服

大家好,我是你们的码农段子手,今天要给大家讲一个Redis世界里最会"跳科目三"的数据结构——跳跃表(SkipList)。这货表面上是个青铜,实际上是个王者,连红黑树见了都要喊声大哥。...

Redis 中 AOF 持久化技术原理全解析,看完你就懂了!

你在使用Redis的过程中,有没有担心过数据丢失的问题?尤其是在服务器突然宕机、意外断电等情况发生时,那些还没来得及持久化的数据,是不是让你夜不能寐?别担心,Redis的AOF持久化技术就是...

Redis合集-必备的几款运维工具

Redis在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来,从这三个方面,介绍一些工具。先来学习下监控Redis实时...

别再纠结线程池大小 + 线程数量了,没有固定公式的!

我们在百度上能很轻易地搜索到以下线程池设置大小的理论:在一台服务器上我们按照以下设置CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2你不会真的按照这个理论来设置线程池的...

网络编程—IO多路复用详解

假如你想了解IO多路复用,那本文或许可以帮助你本文的最大目的就是想要把select、epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别。基础知识IO多路复用涉及...

5分钟学会C/C++多线程编程进程和线程

前言对线程有基本的理解简单的C++面向过程编程能力创造单个简单的线程。创造单个带参数的线程。如何等待线程结束。创造多个线程,并使用互斥量来防止资源抢占。会使用之后,直接跳到“汇总”,复制模板来用就行...

尽情阅读,技术进阶,详解mmap的原理

1.一句话概括mmapmmap的作用,在应用这一层,是让你把文件的某一段,当作内存一样来访问。将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程...

C++11多线程知识点总结

一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多...

微服务高可用的2个关键技巧,你一定用得上

概述上一篇文章讲了一个朋友公司使用SpringCloud架构遇到问题的一个真实案例,虽然不是什么大的技术问题,但如果对一些东西理解的不深刻,还真会犯一些错误。这篇文章我们来聊聊在微服务架构中,到底如...

Java线程间如何共享与传递数据

1、背景在日常SpringBoot应用或者Java应用开发中,使用多线程编程有很多好处,比如可以同时处理多个任务,提高程序的并发性;可以充分利用计算机的多核处理器,使得程序能够更好地利用计算机的资源,...

取消回复欢迎 发表评论: