十三、Redis哨兵模式--Sentinel

news2024/11/14 13:56:59
上一篇介绍了`Redis`中的主从复制。我们知道`Redis`主从中一般只有主节点对外提供写操作,如果主节点发生故障,为了保证`Redis`的可用性,这时就要在可用的`slave`节点中,挑选一个作为主节点。这种切换操作如果是人为的操作,那么存在一定的延时性,且耗费较大的人力。为了解决这个问题,`Redis`提供了一种模式--那就是**哨兵模式**。

Redis哨兵模式是一个分布式系统,监控主从架构中的节点。通过自动故障转移,保证集群的**高可用。**哨兵也是一台Redis服务器,只是不提供任何服务,推荐配置为单数(避免投票时出现相同票)。

1、主要结构

1.1、单哨兵模式

image.png

1.2、多哨兵模式

image.png

2、主要功能

2.1、监控

Sentinel会不间断的监控主节点和从节点是否正常。

2.2、通知

当Sentinel检测到某个节点出现异常时,会通知其他哨兵。

2.3、自动故障转移

当主服务器出现故障时,Sentinel会进行一次自动故障转移,它会从失效的主服务器的从服务器中选择出一个可用的从服务器作为新的主服务器,并通知失效的主服务器的从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新的主服务器地址,使得集群可以使用主服务器替换失效的服务器。

3、Sentinel工作原理分析

3.1、哨兵文件详解

配置1:sentinel monitor master-name ip port quorum
这个配置文件表示的是,哨兵定期监控名字叫做master-nameIP为ip,端口为port的主节点。quorum表示的哨兵判断主节点是否发生故障的票数。也就是说如果我将quorum设置为2,那么就代表至少要有两个哨兵认为主节点故障了,才算这个主节点是客观下线的。一般设置为sentinel节点数的一半加一。
配置2:sentinel down-after-millseconds master-name times
每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否可达的,如果超过了配置的times时间没有收到pong回复,就主观判断节点是不可达的。times单位为毫秒。
配置3:sentinel parallel-syncs master-name nums
当哨兵节点认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点复制。这个配置就是来控制在故障转移之后,每次可以向新的主节点发起复制的节点个数,最多为nums个,因为如果不加控制会对主节点的网络和磁盘IO资源带来较大的压力。
配置4:sentinel failover-timeout master-name times
这个代表哨兵进行故障转移时,如果超过了配置的times时间就表示故障转移失败。
配置5:sentinel auth-pass master-name password
如果主节点设置了密码,则需要这个配置,否则哨兵无法对主节点进行监控。

3.2、为什么用到哨兵

哨兵主要是为了解决在主从复制架构中出现宕机的情况。主要分为两种情况:

3.2.1、从Redis宕机

这个相对来说简单些,在Redis中从库重新启动后会自动加入到主从架构中,自动完成数据同步。在Redis 2.8之后,主从断线后,数据恢复采用增量复制。

3.2.2、主Redis宕机

这个相对来说复杂点,需要以下两步才能完成

  1. 在从数据库中执行slaveof no noe命令,断开主从关系并且提升为主库继续服务。
  2. 将主库重新启动后,执行slaveof 新的master-ip port命令将其设置从库,这时数据就能更新回来,以从库的方式继续提供服务。

由于这个手动操作的过程其实是比较麻烦的并且容易出错,所以Redis提供了**哨兵模式(Sentinel)**来解决这个问题。

3.2.3、主观下线

主观下线就是单个Sentinel认为某个服务下线。Sentinel会以每秒一次的频率向所有与其建立了命令连接的实例(master,从服务,其他Sentinel)发送ping命令,通过判断ping命令回复是有效回复还是无效回复判断实例是否在线(对该Sentinel来说是主观下线)。
Sentinel配置文件中的down-after-millseconds设置了判断主观下线的时间长度,如果实例在down-afetr-millseconds毫秒内,没有收到有效回复(pong),那么Sentinel会认为(主观)该实例已经下线,修改状态为SRI_S_DOWN。如果多个Sentinel监视一个服务,有可能存在多个Sentinel的down-after-mullseconds配置不同。

3.2.4、客观下线

当主观下线的节点是主节点时,此时该哨兵节点会通过指令Sentinel is-master-down-by-addr寻求其他Sentinel节点对主节点的判断,如果其他Sentinel节点也认为主节点客观下线,且认为主观下线的票数超过了quorum(选举个数),此时哨兵节点则认为该主节点确实有问题,认为其事客观下线。
image.png

4、哨兵的三个定时任务监控

4.1、任务1

每个哨兵每10秒会向主节点和从节点发送info命令获取最新的拓扑结构图,哨兵配置时,只需要配置对主节点的监控即可,通过向主节点发送info命令,获取从节点的信息,并当有新的从节点假如时,可以马上感知到。
image.png

4.2、任务2

每个哨兵节点每隔2秒会向Redis数据节点的指定频道发送该哨兵节点对于主节点的判断,以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其他哨兵节点的信息及对主节点的判断,其实就是通过消息的publishsubscribe来完成的。
image.png

4.3、任务3

每隔1秒,每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据。
image.png

5、Sentinel的leader选举流程

如果主节点被认为是客观下线之后就会选取一个哨兵节点来完成后面的故障转移工作,选举出一个leader的过程如下:

  1. 每个在线的哨兵节点都可以成为leader,当它确认(比如上图的哨兵3)主节点下线时,会向其他哨兵发送is-master-down-by-addr命令,征求其他哨兵的判断,并且将自己设置为leader,由leader来处理故障转移。
  2. 当其他哨兵收到此消息时,可以同意或者拒绝它成为领导者。
  3. 如果哨兵3发现自己在选举中的票数大于num(Sentinel)/2+1时,将成为领导者,如果没有超过,则继续选举。

image.png

6、自动故障转移机制

在从节点中选择新的主节点。
Sentinel状态数据结构中保存了主服务的所有从服务信息。Sentinel中的leader按照如下规则在从服务中选择一个作为新的主服务。

  1. 过滤掉主观下线的节点
  2. 选择slave-priority最高的节点,如果有则返回,没有就继续选择。
  3. 选择复制偏移量最大的节点,因为复制偏移量越大,说明数据越完整,如果有则返回,没有继续选择。
  4. 选择run_id最小的节点

image.png
通过slaveof no one,让选出来的从节点成为主节点;并通过slaveof命令让其他从节点复制新的主节点。将下线的主节点设置成新主节点的从节点,当其回复正常时,复制新的主节点,变成新主节点的从节点。

7、Sentinel工作原理总结

  • 每个Sentinel以每秒一次的频率向他所知master、slave以及其他Sentinel发送一次ping命令。
  • 如果一个实例距离最后一次回复ping命令的时间超过down-after-millseconds指定的值,则这个实例会被Sentinel标记为主观下线。
  • 如果一个master被标记为主观下线,则正在监控这个master的其他Sentinel要以每秒一次的频率确认master是否进入主观下线
  • 如果有足够数量的Sentinel(大于等于quorum指定的值)认为master确实处于主观下线状态,那么master会被标记为客观下线
  • 在一般情况下,每个Sentinel要以每10秒一次的频率向已知的master、slave发送info命令。
  • 当master被标记为客观下线后,Sentinel向下线的master的所有slave发送info命令的频率会从10秒一次改为每秒一次。

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

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

相关文章

i春秋-GetFlag

题目 考点 sql注入,md5加密,代码审计,利用eval函数 解题 参考wp https://www.cnblogs.com/qiaowukong/p/13630130.html找md5值 看见验证码中的提示,就是去找一个md5值前六位是指定值的数(严格来说不一定是数&…

基于python的旅游爬虫可视化与实现

摘要 本项目为基于python的旅游爬虫可视化的设计与实现,项目以Web系统形式展示,利用Xpath爬虫爬取去哪儿网针对旅游业的需求,对国内热门旅游景点数据可视化系统,将爬取好的数据保存为CSV文件,再通过ORM框架导入MySQL数…

出现Duplicate key

解决: 第一种情况: 添加一个字段prjId ,和数据库表映射时,映射的字段存在映射关系了。 将第二个 TableField中的prj_num改成prj_id 即可。 第二种情况: 转成map的形式时:key重复了,不知道把值赋…

QuickBooks 2024 for Mac 激活版:智慧管理,财务无忧

想要轻松掌控财务,实现高效管理吗?QuickBooks 2024 for Mac,您的智慧财务管理专家,为您带来前所未有的便利和体验。无论是账务、工资还是销售和库存,它都能一手搞定。直观易用的界面,让您轻松上手&#xff…

(二)Jetpack Compose 布局模型

前文回顾 (一)Jetpack Compose 从入门到会写-CSDN博客 首先让我们回顾一下上一篇文章中里提到过几个问题: ComposeView的层级关系,互相嵌套存在的问题? 为什么Compose可以实现只测量一次? ComposeView和…

加密与CA证书

文章目录 加密与CA证书http协议是不安全的使用对称秘钥进行数据加密非对称秘钥加密CA证书应用补充 加密与CA证书 CA 证书是什么,证书的目的是什么 首先明确一点,CA证书是数字时代中确保身份和数据安全的重要工具,为用户提供了安心、便捷和可…

vlock工具:锁定Linux终端的安全智能方法

虚拟控制台是 Linux 非常重要的功能,它们为系统用户提供 shell 提示,以非图形设置方式使用系统,该设置只能在物理机上使用,而不能远程使用。 用户只需从一个虚拟控制台切换到另一个虚拟控制台即可同时使用多个虚拟控制台会话。 …

[机器学习-05] Scikit-Learn机器学习工具包进阶指南:协方差估计和交叉分解功能实战【2024最新】

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

QT自适应界面 处理高DPI 缩放比界面乱问题

1.pro文件添加 必须添加要不找不到 QT版本需要 5。4 以上才支持 QT widgets 2.main界面提前处理 // 1. 全局缩放使能QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);// 2. 适配非整数倍缩放QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::High…

EPAI手绘建模APP工程图顶部工具栏

7、工程图 图 302 工程图 工程图包括顶部常用工具栏、右侧工程图工具栏、左侧模型列表栏、中间的工程图。 (1) 常用工具栏 ① 删除,选中场景中工程图元素后,删除。可以选择多个工程图元素同时删除。 ② 设置,打开工程图设置页面&#xff0…

科林Linux_4 信号

#include <signal.h> 信号signal&#xff1a;Linux或Unix系统支持的经典的消息机制&#xff0c;用于处置进程&#xff0c;挂起进程或杀死进程 kill -l #查看系统支持的信号 1~31 Unix经典信号&#xff08;软件开发工程师&#xff09; 34~64 自定义信号/实时信号&am…

pycharm 将项目连同库一起打包及虚拟环境的使用

目录 一、创建虚拟环境 1、用 anaconda 创建 2、Pycharm 直接创建 二、虚拟环境安装第三方库 1、创建项目后&#xff0c;启动终端(Alt F12)&#xff0c;或者点击下方标记处。 2、使用 pip 或者 conda 来进行三方库的安装或卸载 3、将项目中的库放入文档&#xff0c;便于…

Python深度学习基于Tensorflow(1)Numpy基础

文章目录 数据转换和数据生成存取数据数据变形和合并算数计算广播机制使用Numpy实现回归实例 numpy的重要性不言而喻&#xff0c;一般不涉及到GPU/TPU计算&#xff0c;都是用numpy&#xff0c;常见的np就是这个玩意。其特点就是快&#xff01;其实如果不涉及到深度学习&#xf…

【挑战30天首通《谷粒商城》】-【第一天】01、简介-项目介绍

文章目录 课程介绍一、 项目介绍1、项目背景A、电商模式1、B2B 模式2、B2C 模式3、C2B 模式4、C2C 模式5、O2O 模式 1.2、项目架构图1.3、项目技术 & 特色1.4、项目前置要求二、分布式基础概念(略)三、环境撘建(略) one more thing 课程介绍 1.分布式基础(全栈开发篇)2.分…

音视频开发6 音视频录制原理和播放原理

音视频录制原理 音视频播放原理

6818Linux内核--Bootloader应用分析

Bootloader应用分析 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次&#xff1a; 引导加载程序。包括固化在固件( firmware )中的 boot 代码(可选)&#xff0c;和 Boot Loader 两大部分。 Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件系统…

手把手教你用 spacy3 训练中文NER

文章目录 模型文件下载训练模型准备数据转化成 doc_bin 格式模型训练配置生成初始配置补全完整配置 开始训练 测试模型参考文献 模型文件下载 https://github.com/explosion/spacy-models/releases?qzh&expandedtrue 简单测试一下ner效果&#xff0c;发现根本不能用 训…

shell进阶之计算编译前后时间(十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Ubuntu 下使用 Scons 交叉编译嘉楠堪智 CanMV K230 大小核 Coremark 程序

在 Ubuntu 下使用 SCons 进行交叉编译嘉楠堪智 CanMV K230 大小核&#xff08;不同的玄铁 C908 核心&#xff09;的 C 程序&#xff0c;以 Coremark 程序为例&#xff0c;顺便测试一下大小核和编译器的性能。 2024年3月14日&#xff0c;嘉楠科技宣布推出了全球首款支持 RISC-V…

掌握未来搜索的钥匙:深入解析 Milvus 向量搜索引擎的终极指南!

在大数据时代&#xff0c;向量搜索技术愈发重要。作为一个开源的向量相似性搜索引擎&#xff0c;Milvus 提供了基于向量的相似性搜索功能&#xff0c;广泛应用于机器学习、人工智能等领域。本文将深入介绍 Milvus 的基本概念&#xff0c;包括其介绍、主要作用、使用方法及注意事…