深入了解Redis——哨兵机制

三,Redis哨兵机制

Redis的哨兵机制主要是为了提高Redis主从模型下的可用性,能保证主节点异常发生时还能够正常的运作并进行故障转移。哨兵机制为了实现这一点提供了以下这些功能:

  • 节点监控
  • 下线判断
  • 领导者选举
  • slave选举
  • 故障转移

在介绍这些功能前我们先用一张图了解整个Redis哨兵模型

image

这里的Sentinel便是哨兵集群,他们会监控master节点及其所有的slave节点,实时获取他们的健康信息,根据健康信息的变化来做故障转移。

节点监控

关于哨兵的节点监控的实现是通过三个定时监控任务完成对各个节点的发现和监控的:

Info事件

每隔10s钟就会向当前的master节点发送一个info命令,以获取最新的拓扑结构**。当向主节点执行info命令时,会获取从节点的信息,这也是为什么无需在sentinel配置文件中显示的配置从节点地址。而且有新的节点加入可以立刻感知出来。**

image

Sentinel节点事件

每隔2s钟就会向 Redis数据节点的__sentinel__:hello频道向其他Sentienl节点分享自己的主节点信息和自身的Sentinel信息。同时其他Sentinel也会订阅该频道,向了解其他Sentinel节点和他们对主节点的判断,整个过程分为以下两步。

  • 发现新的Sentinel节点: 通过订阅主节点的__sentinel__:hello频道,了解其他的Sentinel节点信息,如果有新的Sentinel节点加入则会保存他的信息并连接。
  • Sentinel之间交换主节点状态: Sentinel之间会交换主节点状态,用于之后的领导者选举。
image

心跳事件

每隔1s就会向 主节点,从节点,Sentinel节点发送一个心跳感应包。来确保各个节点是否可达

image

下线判断

对于一个节点的下线分为两个状态:主观下线客观下线

  • 主观下线: 当一个Sentinel节点向某个节点发送心跳包超过down-after-milliseconds没有进行有效回复,则该Sentinel认为该节点已经下线
image
  • 客观下线: 当Sentinel下线的是主节点时,会通过is-master-down-by-addr的命令向其他Sentinel节点询问主节点的判断,当超过个数时,Sentinel节点则认为主节点确实有问题,此时Sentinel节点会做出客观的下线决定。
image
sentinel is-master-down-by-addr <ip> <port> <current_epoch> <runid>

ip:主节点
port:主节点端口
current-epoch:当前配置
runid:
	当runid为"*"时,代表只是交换主节点下线的判断
	当runid为当前sentinelid时,代表希望其他sentinel节点同意他作为leader节点

​ 发送这个命令后,其他sentinel节点会返回如下内容

down_state: 对于主节点的判断是下线还是上线,0和1来进行表示
leader_runid:如果为*代表返回结果是用来做主节点不可达的,如果为具体id则代表同意该id的节点为leader

领导者Sentinel节点选举

因为在后续操作中,需要有一个人能进行slave选举和故障转移,所以必须要选出一个Sentinel节点去做这件事情。Redis使用的是Raft算法来实现领导者选举,Raft算法再次介绍篇幅过长所以就给个大概的思路:

① 每个在线的Sentinel节点都有资格成为Leader,此时发现主节点故障的Sentinel都可以发送一条is-master-down-by-addr的命令,要求设置自己为领导者。

② 收到该命令的其他Sentinel会查看自己的是否同意过别的Sentinel的leader选举要求,如果没有的话,则将该票投给对应的Sentinel节点,否则不投票拒绝。

③ 如果该Sentinel节点获得的票数大于max(quorum,num(sentinel)/2+1),即达到客观下线要求且超过当前sentinel数的一半,则将他选举为领导者

④ 如果选出新的Leader会向其他哨兵通知领导者的消息

⑤ 如果没有选出来,就进行下一轮

所以说如果Sentinel节点发生了宕机并不一定会影响整个系统的可用性,但是如果宕机数超过一半,那么哨兵机制将崩溃无法进行故障转移

slave节点选举

当领导者选出来后,则要让领导者在从库中选择一个新的master节点,那么此时slave节点的选取也是有要求的。

  • 过滤: 将不健康的节点,Sentinel无法ping通的节点和与主节点失联超过down-after-milliseconds*10s的节点
  • 优先级: 选择slave-pripority最高的节点,存在则返回,不存在则继续
  • 同步率最高: 选择offset最大的从节点,说明其复制最完整
  • id小节点: 选择id最小的从节点
image

故障转移

master节点转换: 此时领导者会将选举出来的从节点执行slaveof no one 命令让其成为主节点,并且通知其他的slave节点让他们replicaof新的master节点作为master。

故障节点转换为slave: Sentinel将故障节点转换为slave,当故障节点恢复后自动成为新master节点的slave节点

通知客户端: 通过switch master事件,通知订阅的客户端,当前的集群主节点发生了变化

故障转移失败与failover-timeout

failover-timeout可以理解为故障转移超过时间,当然他实际上和故障转移下面的四个阶段都有深刻联系

① 选举出从节点

② 晋升从节点为主节点

③ 命令其余从节点replicaof主节点

④ 等待原主节点恢复后,命令他去复制新的主节点

1)如果Redis Sentinel对一个主节点故障转移失败,则下一次故障转移起始时间是failover-timeout的2倍

2)在②阶段时,如果Sentinel节点向①阶段选出来的从节点执行 slaveof no one一直失败(例如该从节点此时出现故障),当此过程超过 failover-timeout时,则故障转移失败。

3)在②阶段如果执行成功,Sentinel节点还会执行info命令来确认 a)阶段选出来的节点确实晋升为主节点,如果此过程执行时间超过 failover-timeout时,则故障转移失败。

4)如果③阶段执行时间超过了failover-timeout(不包含复制时 间),则故障转移失败。注意即使超过了这个时间,Sentinel节点也会 最终配置从节点去同步最新的主节点

单哨兵多主从

image

一个哨兵集群是可以管理多个主从集群的,只需通过如下节点即可实现

sentinel monitor master-business-1 10.10.xx.1 6379 2 
sentinel down-after-milliseconds master-business-1 60000 
sentinel failover-timeout master-business-1 180000 
sentinel parallel-syncs master-business-1 1
 sentinel monitor master-business-2 10.16.xx.2 6380 2 
sentinel down-after-milliseconds master-business-2 10000 
sentinel failover-timeout master-business-2 180000 
sentinel parallel-syncs master-business-2 1

优点: 更少的资源使用,更方便的运维管理

缺点: 如果该Sentienl集群失效,会导致其他的主从集群全部丧失高可用性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测——车牌图像数据集

一、重要性及意义 车牌图像识别的重要性及意义主要体现在以下几个方面&#xff1a; 智能交通管理&#xff1a;车牌图像识别技术是智能交通系统&#xff08;ITS&#xff09;的核心组成部分。通过自动识别车辆车牌&#xff0c;可以实现对交通违章行为的自动记录和处理&#xff…

【数据库】数据库应用系统生命周期

目录 1.为什么提出”软件工程“的思想&#xff1f; 2.为什么提出”瀑布模型“&#xff1f;缺点是什么&#xff1f; 3.为什么提出”快速原型模型“&#xff1f; 4.为什么提出”螺旋模型“&#xff1f; 5.关于数据库的英文缩写。 6.模型设计中的3条设计主线&#xff1a;数…

OpenHarmony分布式软总线API调用测试工具 softbus_tool使用说明

softbus_tool 是 OpenHarmony 分布式软总线 API 调用测试工具&#xff0c;文件结构如下图所示。 softbus_tool 能够将软总线 interfaces 目录下的一些常用接口集中起来&#xff0c;供设备间搭建一些场景时使用&#xff08;比如设备绑定、BR 组网&#xff0c;BLE 组网&#xff…

低成本高效益,电子画册才是品牌的重要选择

随着互联网的普及和数字化技术的进步&#xff0c;电子画册已成为许多品牌的重要选择。与传统印刷画册相比&#xff0c;电子画册具有低成本、高效益的优点&#xff0c;成为品牌宣传的新趋势。 具体来说&#xff0c;电子画册可以通过在线平台或移动设备轻松查看&#xff0c;无需额…

【学习】软件测试中为什么要进行接口测试?

接口测试是软件开发过程中不可或缺的一环&#xff0c;它主要是对软件系统中各个模块之间的接口进行测试&#xff0c;以验证它们是否能够正确地交互和协作。接口测试的目的是确保软件系统的各个部分能够无缝地协同工作&#xff0c;从而提高整个系统的质量和稳定性。 一、什么是接…

allegro图片导入及调整的详细方法

目录 1. 图片转换2. 图片导入3. 导入图片调整3.1 图层调整 1. 图片转换 allegro只能导入IPF格式的文件&#xff1a; 正常情况下我们的图片都是JPG、BMP或者其他常见格式&#xff0c;需要将之转换为IPF格式才能导入&#xff0c;这里有工具。 需要工具在此 ->BMP转IPF工具 …

JDBC笔记

文章目录 JDBC相关JDBC-API详解一、DriverManager1.DriverManager(驱动管理类)作用 二、Connection1.Connection(数据库连接对象)作用2.具体操作**获取执行SQL对象****事务管理** 三、Statement1.Statement作用执行SQL语句 四、ResultSet1.ResultSet(结果集对象)作用2.获取查询…

SpringBoot菜品分页查询模块开发(多表连接查询)

需要注意的地方 为什么创建VO类怎么进行多表连接查询分页查询的统一返回结果类PageResult分页查询Mapper的返回结果是Page<目标实体类> 需求分析与设计 一&#xff1a;产品原型 系统中的菜品数据很多的时候&#xff0c;如果在一个页面中全部展示出来会显得比较乱&…

C语言—每日选择题—Day68

第一题 1、运行以下C语言代码&#xff0c;输出的结果是&#xff08;&#xff09; #include <stdio.h> int main() {char *str[3] {"stra", "strb", "strc"};char *p str[0];int i 0;while(i < 3){printf("%s ",p);i;} retur…

代码随想录算法训练营Day50|LC123 买卖股票的最佳时机IIILC188 买卖股票的最佳时机IV

一句话总结&#xff1a;虽然是困难题&#xff0c;其实都只需要对122 买卖股票的最佳时机II稍作变形即可。 原题链接&#xff1a;123 买卖股票的最佳时机III 相较于买卖股票的最佳时机和股票II来说&#xff0c;本题加了最多操作两次的限制。那么这里实际上就可以直接用滚动数组…

JVM垃圾收集——垃圾收集器

文章目录 1、垃圾收集器的发展和分类1.1、评估垃圾收集器的性能指标1.1.1、吞吐量1.1.2、停顿时间1.1.3、吞吐量和停顿时间的比较 1.2、垃圾收集器的发展史1.3、垃圾收集器的分类1.4、查看默认的垃圾收集器 2、Serial收集器&#xff1a;串行回收3、ParNew收集器&#xff1a;并行…

基于Springboot中小企业设备管理系统设计与实现(论文+源码)_kaic

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

运筹说 第110期|生灭过程和Poisson过程

上一期我们一起学习了排队论的基本概念&#xff0c;本期小编将带大家学习生灭过程和Poisson过程。 下面&#xff0c;让我们一起来学习生灭过程和Poisson过程吧&#xff01; 一、生灭过程简介 01引言 在排队论中&#xff0c;如果N(t)表示时刻t系统中的顾客数&#xff0c;则{N…

【电控笔记5】电流环pi参数整定

旋转坐标系下的电压方程&#xff0c;由id和iq计算出ud和uq 把常数项&#xff08;上面两个红框&#xff09;拿出来解耦合&#xff0c;作为前馈&#xff0c;如下 电流环传递函数 电流带宽 响应时间 另一种方法&#xff1a;内膜控制器

pygame旋转角度发射射线

self.x self.x math.cos(math.radians(self.xuanzhuanjiao)) * 70 self.y self.y - math.sin(math.radians(self.xuanzhuanjiao)) * 70 旋转角度&#xff0c;70是间隔 间隔太小会卡 import pygame from pygame.locals import * import sys import mathpygame.init()width, …

鸿蒙HarmonyOS开发实例:【分布式关系型数据库】

介绍 本示例使用[ohos.data.relationalStore]接口和[ohos.distributedDeviceManager] 接口展示了在eTS中分布式关系型数据库的使用&#xff0c;在增、删、改、查的基本操作外&#xff0c;还包括分布式数据库的数据同步同能。 效果预览 使用说明: 启动应用后点击“ ”按钮可…

使用Ollama在本地运行AI大模型gemma

1.下载&#xff1a; https://github.com/ollama/ollama/releases 2.配置环境变量 我的电脑-右键-属性-系统-高级系统设置-环境变量-【系统环境变量】新建 变量名&#xff1a;OLLAMA_MODELS &#xff08;固定变量名&#xff09; 变量值&#xff1a;E:\Ollama\Lib &#xff0…

HNHN 笔记

1 Title HNHN: Hypergraph Networks with Hyperedge Neurons(Yihe Dong、Will Sawin、Yoshua Bengio、Mila)[ICML 2020] 2 Conclusion This study proposes a novel framework, HNHN, for hypergraph representation learning. HNHN is a hypergraph convolution network wit…

开启未来之门:Victoria VR 与 OpenAI 整合,引领 Web3 AI+AR 风潮

加密市场一直是科技创新的前沿阵地。虚拟现实&#xff08;VR&#xff09;技术和人工智能&#xff08;AI&#xff09;被认为是引领未来的重要技术之一&#xff0c;Web3 自然不会缺席这场足以改变人们生活方式的变革&#xff01; 2月份&#xff0c;Apple Vision Pro 的发售迅速引…