27 redis 的 sentinel 集群

news2025/2/6 5:40:26

前言

redis 的哨兵的相关业务功能的实现 

哨兵的主要作用是 检测 redis 主从集群中的 master 是否挂掉, 单个哨兵节点识别 master 下线为主管下线, 超过 quorum 个 哨兵节点 认为 master 挂掉, 识别为 客观下线

然后做 failover 的相关处理, 重新选举 master 节点 

我们这里 来看一下 这里的整个流程

 

 

定时发送 ping, pub/sub ”Hello” 频道 

sentinel 这边有单独的定时任务处理部分, 它存取数据, 只做 监听集群中的数据节点, 哨兵节点 的相关功能

定时发送 info, ping, 向 “__sentinel__:hello” 发布当前哨兵的相关信息[ip, port, id, epoch]

info 这边主要是向各个节点发送 info 命令, 然后 哨兵节点这边定时更新 数据节点的元数据信息

ping 这边主要是类似于一个集群心跳的功能 

可以给根据 ping_period, PUBLISH_PERIOD 来更新发送的频率 

72edd505fdd14faa9091701a2538061a.png

 

向各个数据节点发送 PING 之后, 会记录 last_ping_time 等等信息 

这里的 PING 就是一个心跳的功能 

17bb2cacba09445f9e808a4bbc080b63.png

 

哨兵节点这边初始化的时候, 和 master 创建连接的时候, 会订阅 “__sentinel__:hello”

各个哨兵节点就是通过 “__sentinel__:hello” 来感知哨兵列表的 

然后具体的 哨兵节点的哨兵列表的维护就是在 sentinelReceiveHelloMessages 中进行处理的 

9f67f12a00ae4518a537db77b86df01d.png

 

 

哨兵节点认为 master 主观下线

就是 上一次ping心跳 到现在的时间超过了 down_after_period

或者 info心跳信息 到现在的时间超过了 down_after_period+20s

f148c30534b541779410a32c53ab6bb1.png

 

调用堆栈信息如下

959ae1878874474aa13161d1da1eb97f.png

 

 

哨兵集群认为 master 客观下线

当认为 master 客观下线的 哨兵节点数量超过了 quorum 个的时候, 哨兵集群认为 master 客观下线 

0038a23572214ec481b9d2f0bec203d2.png

 

调用堆栈信息如下

01d333c5c19a4d74adb5f467d53b07a5.png

 

 

master 挂掉之后的重新选举 和更新

主观下线之后, 选择 哨兵 master 的流程

sentinelFailoverWaitStart 是选取 哨兵 master 的处理

sentinelFailoverSelectSlave 是从数据节点中选择 master 的处理 

sentinelFailoverSendSlaveOfNoOne 是切换 master 的处理 

e816ebb4208a4f2f9dddcfd485d2a7fb.png

 

 

sentinelFailoverWaitStart 选取哨兵 master 

sentinelGetLeader 是选择哨兵 master 的核心逻辑

哨兵master 才会往下面走下面的 从 slave 节点中选择 master 的流程 

6d80ad70aceb49638aa5b467fcf34169.png

 

选取哨兵 master 的相关处理 

先统计其他哨兵的相关投标, 然后 自己再进行投票 选择票数最多的哨兵 或者 自己

然后 投票之后, 再来选择 票数最多的哨兵 

最终筛选 是否满足基础条件, 大于 (哨兵数量/2+1) 并且大于 master选举的数量 

44a4bfe7fe52498b802f99a42f344086.png

 

 

sentinelSelectSlave 选择新的 master 数据节点

处理方式如下, 筛选掉 一部分的节点, 经过筛选的节点为备选列表, 然后还有具体的选择规则 

筛选掉 主观客观下线 的节点 

筛选掉 失联的节点

筛选掉 ping 网络存在问题的节点 

筛选掉 配置 priority 为 0 的节点 

筛选掉 info心跳 超过一定时间的节点

筛选掉和 master 这边失联时间较长的节点, 说明它可能和集群沟通有问题 

f4b324d202d2421bbda023ec08b72e3a.png

 

master 这边选择规则如下 

优先级为 slave_priority, slave_repl_offset, runId 的比较 

其中 slave_repl_offset 指代的是 该 slave 节点和 master 这边同步的偏移, 偏移越大, 和 master 这边丢失的数据越少 

就我们这里的场景, 挂掉了目前的 master 节点 redis_8002, 然后 redis_8001, redis_8003 的 slave_priority, slave_repl_offset 均相同, 然后就是根据 runId 进行选择了 

f5cb567349884ca38a992e97d8b0f0fb.png

 

然后上下文如下, 根据 runId 的规则, 选择了 redis_8003, 然后 redis_8003 成为了新的 master 节点 

4908a1484e294edc93d6ec2e07269648.png

 

 

Master 信息的传播

其他的哨兵节点是通过 PUBLISH “__sentinel__:hello” 这边的业务处理来进行更新 master 的 

804edb3cd28b4038a22aee9fc7e22dd1.png

 

然后从节点这边的 slaveOf 主从关系是 哨兵节点这边向 slave 节点这边发送的信息 

进而通知 其他的 slave 节点, master 更新了, 需要全量 或者 增量重新同步数据了

7d41693c91754175b2ec530ea59ddee4.png

 

 

 

 

 

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

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

相关文章

全球盲盒热潮:探寻海外市场的文化风潮与商机

近年来,盲盒经济在全球范围内持续升温,其独特的营销方式以及带给消费者的刺激感,引发了广大消费者的热烈追捧。特别是在海外市场,其增长速度之快,让各类盲盒品牌看到了巨大的商业潜力。然而,盲盒市场的快速…

CentOS操作学习(二)

上一篇学习了CentOS的常用指令CentOS指令学习-CSDN博客 现在我们接着学习 一、Vi编辑器 这是CentOS中自带的编辑器 三种模式 进入编辑模式后 i:在光标所在字符前开始插入a:在光标所在字符串后开始插入o:在光标所在行的下面另起一新行插入…

【华为数据之道学习笔记】6-4 打造数据供应的“三个1”

数据服务改变了传统的数据集成方式,所有数据都通过服务对外提供,用户不再直接集成数据,而是通过服务获取。因此,数据服务应该拉动数据供应链条的各个节点,以方便用户能准确地获取数据为重要目标。 数据供应到消费的完整…

【K8s】1# 使用kuboard-spray安装K8s集群

文章目录 搭建k8s集群1.推荐配置1.1.服务器配置1.2.软件版本 2.使用Kuboard-Spray安装k8s集群2.1.配置要求2.2.操作系统兼容性2.3.安装 Kuboard-Spray2.4.加载离线资源包2.5.规划并安装集群2.6.安装成功2.7.访问集群 3.涉及的命令3.1.linux 4.问题汇总Q1:启动离线集…

中电金信:金融电子化 | 打磨算力基础设施,赋能金融业数字化转型

10月8日,工信部、人民银行等六部门联合印发《算力基础设施高质量发展行动计划》(以下简称《行动计划》),在行业和产业界吸引了信息产业和相关应用行业的广泛关注。作为引领我国算力基础设施建设的重要指南,《行动计划》…

【电梯节能】安装小教程 Vs 安装后真实效果

"电梯节能" 已入驻多个地标建筑 ,彰显知名企业社会责任,如深圳华为,北京协和医院,香港友邦保险大厦,深圳湾大桥,上海玉龙国际酒店,青岛市政府 等等。 今天小伍带小伙伴们看看我们的安…

中国自动驾驶行业:迈向无限可能

中国自动驾驶行业正在经历蓬勃发展,取得了令人瞩目的成果。这一行业在技术创新、政策支持和市场需求等方面展现出巨大潜力。本文将从技术创新、产业生态和前景发展等角度,探讨中国自动驾驶行业的现状和未来前景。 中国自动驾驶行业正处于一个令人瞩目的快…

Java网络编程原理与实践--从Socket到BIO再到NIO

文章目录 Java网络编程原理与实践--从Socket到BIO再到NIOSocket基本架构Socket 基本使用简单一次发送接收客户端服务端 字节流方式简单发送接收客户端服务端 双向通信客户端服务端 多次接收消息客户端服务端 Socket写法的问题BIO简单流程BIO写法客户端服务端 BIO的问题 NIO简述…

05-垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器Serial收集器Parallel Scavenge收集器ParNew收集器CMS收集器 CMS的相关核心参数亿级流量电商系统如何优化JVM参数设置(ParNewCMS) 垃圾收集底层算法实现三色标记多标-浮动垃圾漏标-读写屏…

理解Spring中bean的作用域

singleton:Spring Ioc容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一个对象,作用域为Spring中的缺省(同一package)作用域 prototype:每次通过Spring容器获取prototype定义的bean时&#xff0c…

融资项目——vue之数据绑定

如上图,当变量{{title}}不在标签内的时候,vue可以正常渲染,点击链接后可正常跳转到百度。但如下图,如果{{title}}在标签内,则此时会产生错误,点击链接后并没有如愿跳转到百度页面。 此时,需要使…

27. 过滤器

Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfigFi…

如何开发专属花店展示平台小程序?

如今,微信小程序已经成为了花店行业拓展客户资源的重要工具。通过开发一个专属花店小程序,你可以为自己的花店带来更多的曝光和客户资源。那么,如何开发一个专属花店小程序呢?接下来,我们将一步步为你详细讲解。 首先&…

共建还是对抗?BTC 铭文风波中开发者、矿工与社区的平衡艺术

近期,比特币铭文正加速进入一场争议与危机的漩涡。12 月 6 日,比特币核心开发人员 Luke Dashjr 在 X 表示,铭文(Inscriptions)正在利用比特币核心客户端 Bitcoin Core 的一个漏洞向区块链发送垃圾信息,Bitc…

“智”绘出海新航道,亚马逊云科技携手涂鸦智能助力智能家居企业全球化

随着人工智能、5G等技术的快速发展,智能家居行业呈现高速发展的态势。Statista数据显示,2022年全球智能家居行业支出总值为1145亿美元,欧美地区以较早的智能家居普及率,率先进入全屋智能时代,其中欧盟区国家家用智能设…

阿里云赵大川:弹性计算推理解决方案拯救 AIGC 算力危机

云布道师 本篇文章围绕弹性计算推理解决方案 DeepGPU 实例如何支持 Stable Diffusion 文生图推理、Stable Diffusion 推理演示示例等相关话题展开。 赵大川 阿里云弹性计算高级技术专家 GPU 云服务器推理解决方案的提出背景 随着 AIGC 时代的到来,两个重要应用应…

水利水库大坝安全监测参数详解

变形监测 变形监测是指对工程结构或地质环境中的变形进行实时或定期的测量与监测的过程。变形监测的目的是为了及时了解结构或环境的变形情况,评估其稳定性和安全性,并采取相应的措施来预防灾害和保护人民生命财产安全。 变形监测主要包括的内容有&#…

管理层年终考核的四种方式

企业管理层是企业中的核心决策者,对企业的经营和发展有着重要的影响。因此,对企业管理层进行年终绩效环评可以更好地了解其对企业的贡献和影响,以便更好地激励和管理管理层,提高企业的绩效和效益。以下是适合管理层做年终考核的四…

数学建模笔记-拟合算法

内容:拟合算法 一.概念: 拟合的结果就是找到一个确定的曲线 二.最小二乘法: 1. 2.最小二乘法的二表示的是平方的那个2 3.求解最小二乘法: 三.评价拟合的好坏 1.总体评分和SST: 2.误差平方和SSE: 3.回…

数字滤波器的设计

一般滤波器可以分为经典滤波器和数字滤波器。 经典滤波器:假定输入信号中的有用成分和希望去除的成分各自占有不同的频带。如果信号和噪声的频谱相互重迭,经典滤波器无能为力。比如 FIR 和 IIR 滤波器等。  现代滤波器:从含有噪声的时间序…