Redis哨兵模式原理剖析,监控、选主、通知客户端你真的懂了吗?

news2024/11/22 16:27:50

哨兵启动后只指定了master的地址,要想知道整个集群中完整的拓扑关系怎么做呢?

哨兵每隔10秒会向每个master节点发送 info 命令, info 命令返回的信息中,包含了主从拓扑关系,其中包括每个slave的地址和端口号。有了这些信息后,哨兵就会记住这些节点的拓扑信息,在后续发生故障时,选择合适的slave节点进行故障恢复。

那么有小伙伴会问,哨兵之间是如何通信的呢?

基于Redis提供的发布(pub)/订阅(sub)机制完成的。哨兵节点不会直接与其他哨兵节点建立连接, 而是首先会和主库建立起连接 ,然后向一个名为" sentinel :hello"频道发送自己的信息(IP 和端口),其他订阅了该频道的哨兵节点就会获取到该哨兵节点信息,从而哨兵节点之间互知。

2.心跳检测

======

每一秒,每个 Sentinel 对 Master、Slave、其他哨兵节点执行PING命令,检测它们是否仍然在线运行,如果有节点在规定时间内没有响应PING命令,那么该哨兵节点认为此节点"主观下线"。

3.主观下线和客观下线

===========

为什么需要客观下线机制?

因为当前哨兵节点探测对方没有得到响应,很有可能这两个机器之间的网络发生了故障,而 Master 节点本身没有任何问题,此时就认为 Master 故障是不正确的。

为了解决上述问题,客观下线应运而生,Sentinel一般会集群部署,引入多个哨兵实例一起来判断,就可以避免单

个哨兵因为自身网络状况不好,而误判主库下线的情况。

假设我们有N个哨兵实例,如果有N/2+1个实例判断主库“主观下线”,此时把节点标记为“客观下线”,此时就可以做主从切换了。

4.选举哨兵领导者?

==========

假设Sentinel 判断主库“主观下线”后,就会给其他 Sentinel 实例发送 is-master-down-by-addr 命令,接着,其他 Sentinel 实例会根据自己和主库的连接情况,做出赞成和反对决定。

假设我们有N个哨兵实例,如果有#{quorum}个实例赞成,此时这个 Sentinel 就会给其他 Sentinel 发送主从切换请求,其他 Sentinel 会进行投票,如果投票通过,这个 Sentinel 就可以进行主从切换了, 这个投票过程被称为Leader 选举 。其实整体思想和Zookeeper一样的。

在投票过程中,任何一个想成为 Leader 的哨兵,要满足两个条件:第一,拿到半数以上的赞成票;第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。

quorum一般我们都会配置成 实例数量/2+1

此时会有小伙伴问,如果所有Sentinel都想成为Leader执行主从切换怎么办?

哨兵选举领导者的过程类似于Raft算法,每个哨兵都设置一个 随机超时时间 ,超时后向其他哨兵发送申请成为领导者的请求,把超时时间都分散开来, 在大多数情况下只有一个服务器节点先发起选举,而不是同时发起选举,这样就能减少因选票瓜分导致选举失败的情况 。

后期我会专门写一个专栏为大家介绍所有一致性算法,例如:Paxos、Raft、Gossip、ZAB等,到时候具体给大家讲解Sentinel是如何解决上述问题的。

5.谁来做新的Master?

==============

选择新master过程也是有优先级的,在多个slave的场景下,优先级按照:slave-priority配置 > 数据完整性 > runid较小者进行选择。

用户可以通过 slave-priority 配置项,给不同的从库设置不同优先级。如果所有从节点的 slave-priority 值一致,那就看谁的数据更完整。

如何判断谁的数据更完整呢?

Redis哨兵模式原理剖析,监控、选主、通知客户端你真的懂了吗?

主库会用 master_repl_offset 记录当前的最新写操作在 repl_backlog_buffer 中的位置,而从库会用 slave_repl_offset 这个值记录当前的复制进度。此时,哪个从库的 slave_repl_offset 最接近 master_repl_offset。那么谁就可以作为新主库。

如果 slave_repl_offset都一致,那就比 runid,选择runid最小的 Slave 节点作为新主库。

选择出新主库,哨兵 Leader 会给该节点发送 slaveof no one 命令,让该节点成为 Master。之后,哨兵 Leader会给故障节点的所有 Slave 发送 slaveof $newmaster 命令,让这些 Slave 成为新 Master 的从节点,开始从新的Master 上同步数据(这里会进行全量复制)。最后哨兵 Leader 把故障节点降级为 Slave,并写入到自己的配置文件中,待这个故障节点恢复后,则自动成为新 Master 节点的 Slave。至此,整个故障切换完成。

6.如何通知客户端?

==========
上面已经介绍了完整的故障切换全流程,故障切换后,主节点变化了,客户端如何感知呢?
基于Redis提供的发布(pub)/订阅(sub)机制完成的,客户端可以从哨兵订阅消息,故障转移后,客户端会收到订阅消息。

通知客户端?

==========
上面已经介绍了完整的故障切换全流程,故障切换后,主节点变化了,客户端如何感知呢?
基于Redis提供的发布(pub)/订阅(sub)机制完成的,客户端可以从哨兵订阅消息,故障转移后,客户端会收到订阅消息。

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

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

相关文章

[附源码]计算机毕业设计汽配管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

10. 获取操作系统版本和位数

1. linux如何查看系统版本 (1) 查看系统版本:uname -a (2) 查看内核版本信息:less /proc/version (3) 查看发行版本信息:less /etc/issue (4) 查看发行版详细信息:lsb_release -a 2. 怎么查看linux是32位还是64 系统 (1) getco…

Web3中文|以太坊创始人V神:关注技术,而不是价格

全球第二大数字货币交易所 FTX 轰然倒下,可以说是牵连甚广,不止是小资族,不少资深玩家都在这次事件中亏损数百、数千万美元。Solana、BlockFi等都在此次事件中受到巨大冲击。 基于BNB Chain的去中心化金融(DeFi)协议A…

Mac 上好用的远程桌面软件:Splashtop

市场分析表明, Mac电脑的市场份额正在增加 。在相关新闻中,全球远程桌面软件市场正在经历巨大的增长 。 远程桌面软件允许你通过互联网连接到一个特定的计算机,并用一个单独的设备来控制它。然后你就可以使用任何应用程序,访问主…

笔试强训48天——day23

文章目录一. 单选1.下面程序段的时间复杂度为()2. 下列关于线性链表的叙述中,正确的是( )3. 下列描述的不是链表的优点是( )4. 向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执…

纺织进入“寒冬”,纺织企业利用APS生产排产加强生产管

进入11月,对于纺服产业链而言,大体“金九银十”的旺季订单已经结束。实际上,经历了前三季度的疲弱表现,市场整体已经对四季度缺乏信心。的确从整个下游行业来看,纺织出口形势依然严峻,预计11月份纺织行业也…

图像增强之灰度变换

前言 图像增强是图像处理常用最常用的方法, 目录前言引言为什么进行空间域增强什么是图像增强如何进行图像增强空间域增强灰度变换线性变换简单的黑白转换灰度拉伸分段线性变换非线性变换对数变换幂次变换直方图均衡引言 为什么进行空间域增强 什么是图像增强 按…

天宇优配|多家房企发布再融资预案,最牛地产股九连板

多家上市房企抢先发布再融资预案;氢能工业车辆产线有新进展,燃料电池本钱或有下降空间。 房地产板块掀涨停潮 12月5日,房地产板块再度走高,掀起涨停潮,阳光股份、招商积余、沙河股份、粤宏远A等涨停;所属地…

uView教程-骨架屏搭建 #低代码 #小程序 #uView

当小程序没有加载完时会出现一个基础的骨架效果, 页面加载完之后骨架会消失掉, 这个效果怎么做的呢? 今天由我来带领大家学习如何使用骨架屏, 在guiplan低代码开发工具中, 选中要添加骨架的元素, 比如…

Lecture1:从图像分类引出概念

目录 1.我们如何处理图像分配这个任务 2.图像分类远古方法----利用曼哈顿距离:L1距离 3.图像分类远古方法----利用欧几里得距离:L2距离 4.超参数 1.我们如何处理图像分配这个任务 我们要给计算机一张图片,让它识别出这是一只猫&#xff1…

【区块链 | 预言机】从零开始使用Chainlink预言机(2)- 智能合约中使用更安全的随机数-代码实战

智能合约中使用更安全的随机数(代码实战篇) Chainlink最近推出一款革命性的产品,VRF—Verifiable Random Function可验证随机数,给智能合约带来了真正安全的随机数。本文我们就来介绍一下如何在智能合约中使用VRF吧。 我们先简要介绍一下Chainlink VFR的工作流程。 首先,…

科普:什么是ChatGPT?(文末有彩蛋)

科普:什么是ChatGPT?(文末有彩蛋) ChatGPT介绍 ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响应。ChatGPT 旨在用作聊天机器人,我们可以对其进…

STM32F103定时计算方法

//TIM2时钟配置 void TIM2_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定时器TIM2初始化 TIM_TimeBaseStructure.TIM_Period 499; //装载值(4991)500us TIM_TimeBaseStructure.TIM_Prescaler 63; //预分频&am…

WuThreat ITDR 可以快速构建多场景的身份认证与威胁检测能力

什么是WuThreat身份安全云? WuThreat 身份安全云融入身份认证和身份威胁检测与响应(ITDR)的技术,快速为企业的Web、APP等业务构建一体化多身份场景的认证与安全解决方案。WuThreat在身份认证与威胁检测领域是全球的创新领导者&am…

servletContext 对象的解释

大家好,今天来分享一下servletContext 作用 关于 servletContext 对象, 他代表是整个web 项目,他可以和servlet 或者程序的容器进行通信 同时也可以管理web项目 当一个web项目当中有很多servlet, 那这些servlet之间需要通信 就…

第二证券|六大券商热议“第三支箭”:再融资重启修复市场预期

房地产利好方针接连出台,“第三支箭”为商场再添强心针。上星期,证监会决定在房地产股权融资方面调整优化五项办法。上市房企纷繁呼应,已有近10家房企火速筹划再融资。 时隔多年,监管再度重启房企股权融资,对房地产商场…

Java搭建宝塔部署实战基于RuoYi开源博客管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的RuoYi开源博客管理系统源码,是一个朋友发来给我,让我帮他测试怎么在宝塔搭建部署的,顺便录制出一个视频教程出来,搭建的方法还是比较简…

【基础算法】几种特殊数(素数、公约数、完全数、亲密数) C++实现

●素数 素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一…

争议不断的AI绘画,如今成为了顶流?

今年以来,AIGC迅速崛起。所谓AIGC,即AI-Generated Content,指的是利用人工智能来生成内容,被认为是继专业产出内容(PGC)、用户产出内容(UGC)后的新型内容创作方式。不久前掀起热议的…

「小白学Python」Windows安装Python

前言 Python下载地址 https://www.python.org/ Python下载 打开上面的链接,打开 Python 的下载页面,如下图所示: 我们把鼠标放到 Downloads 上,然后点击 Windows,此时界面如下图所示: 这里,我…