【Redis】聊一下Redis的哨兵机制

news2024/11/21 0:14:49

在上一篇文章中,我们学习了数据库的Redis的主从集群复制模式,如果从库出现问题,那么其他主从库还可以处理读写请求,但是如果主库宕机,写请求从库处理不了,整个系统就不可用了,虽然只处理只读请求,显然是不符合业务需求。
在这里插入图片描述
如上图中所示当主库出现异常的,如何处理,一般的处理方式是通过选择一个新的主库进行处理请求。

  • 主库是否真的挂了?
  • 如何选择一个主库?
  • 如何将新的主库信息同步给从库?

而上面这个流程就是哨兵所解决的,哨兵机制是实现主从库自动切换的关键机制,有效解决了主从复制模式下故障转移的三个问题。

哨兵机制的核心流程

类比一下在现实生活中,哨兵的作用是什么,主要是负责周边安全,也就是会时不时的看一看周边有什么异常的情况没,有敌军没有。而Redis哨兵机制也是同样的原理,有一个单独的进程进行监听主从库运行实例,主要就是监控、选主、和通知。
在这里插入图片描述

监控

监控主要是判断主从库是否出现服务实例异常,如网络连接、服务宕机、关闭等情况。如果只是针对的从库下线其实影响还好,并且其他的主从库也可以继续提供服务,但是如果主库出现下线,就需要选择一个新的主库来进行提供写服务,而选举的这个主库需要和集群内的从库进行数据的复制,以及选择主库的这个过程都是比较耗费资源的。具体的流程就是哨兵进程会定时发送PING到主从库。

选主

一旦确定主库宕机后,就需要从已有的集群中选择一个从库作为一个主库实例,以提供服务。

通知

当选择一个新的主库实例后,需要主库发送自己的info信息到集群内的从库实例,然后让从库实例进行同步,以及通过客户端与主库建立连接。
在通知中,只需要一次网络的交互通知就可以,但是监控和选主过程中,需要判断好主库到底有没有宕机,以及如何选择一个新的主库。需要涉及到决策逻辑。

主观和客观下线

主观下线其实比较简单,就是当哨兵机制发送给主从库实例的PING超时相应,就会判断为主观下线,对于从库实例其实没有什么影响,但是对于主库如果误判了主库的下线,就会出现不必要的选主和主从复制过程,其中涉及到计算和通信开销。
而误判的判断标准就是哨兵以为A主库宕机了,但是实际上是由于A主库负载过高没有处理过来,那么后续的选择和主从复制就是消耗。
如何减少误判?
如果在现实生活中,帮派之间选择帮主,那么简单的逻辑就是主要过了半数以上的结果就是大家都认同的,同样的道理,也就是利用哨兵集群,比如哨兵1,2认为主库下线,那么就可以认为主库下线。
客观下线:只要大多数的哨兵实例,都判断主库已经主观下线,主库会被标记为客观下线
在这里插入图片描述

如何选定主库

选择主库的过程中,先会筛选不符合条件的从库实例,然后从符合的实例中进行按照优先级、复制进度、ID号打分,得分最高者就是从库。

筛选

在这里插入图片描述
筛选的过程比较简单,必须是在线的从库实例以及网络比较稳定的实例。
网络稳定通常是查看之前的网络连接状态,当超过一定的阈值,其实就可以判断不符合条件,而在Redis中有down-after-milliseconds 是主从库断连的最大连接超时时间,如果在给定时间内都没有连接上,并且超过10次,那么就不符合选择主库的条件。
上图中就是将已经下线的从库2 以及网络不稳定的从库5 pass。

评分

评分的过程只要有3个过程,只要评选出分数高者,就选定为主库。具体就是1.优先级最高 2.数据复制进度快的高 3.id实例小的高
优先级评分可以通过在设置redis实例的时候通过slave-priority配置项,比如针对硬件配置比较高的,设置较大的优先级。如果选择出即退出。
而复制进度快的,我们知道在数据复制的时候,主从库都分别通过master-repl-offset和slave-repl-offset在repl_backlog_buffer中记录自己的复制的位移,主要通过一个函数计算出那个从库的复制位移更接近已经宕机的主库位移就可以选择出。
在这里插入图片描述

如果基于复制进度都没有办法选择出,那么只能通过ID最小的号选择为主库。
总结一下,其实选择主库的过程就是两个过程一个筛选数据以及通过优先级、数据复制进度、ID编号依次选择主库。

总结

本篇主要循序渐进介绍了在数据同步的过程中,如果主库实例宕机的情况下,如果选择一个主库。相应的引出了怎么判断主库下线(主观和客户下线)、以及如何选择主库、哨兵机制的核心流程。那么对于能解决选择主库的哨兵集群,又是什么样的原理,我们下一篇介绍。
通过使用哨兵实例可以减少误判率,但是哨兵集群中如果出现实例宕机,,是否会影响主库判断和选择?

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

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

相关文章

Windows提权:利用MSSQL数据库,Oracle数据库

目录 MSSQL提权:使用xp_cmdshell进行提权 MSSQL:使用sp_OACreate进行提权 MSSQL:使用沙盒提权 Oracle提权:工具一把梭哈 总结 MSSQL在Windows server类的操作系统上,默认具有system权限。 MSSQL提权:使…

三、浅谈机器人的底盘设计

两电机差速底盘 方式1:驱动轮在后,万向轮在前(支撑轮也可以换成全向轮,目的只是撑地),在一般的巡线比赛中较常用。 该底盘的优点:运动灵活,组装简单 该底盘的缺点:车体…

如何增加音频音量,给大家分享两个免费方法!

相信许多音频剪辑新手在刚开始的阶段需要探索学习各种操作方法。其中,许多用户发现自己的音频文件音量太小,想要增加音量,但却不知道使用哪种工具更好,如何操作更为方便。为此,我为您整理了两种方法,并向新…

docker的基本相关知识和操作

镜像相关操作命令: 访问DockerHub搜索镜像,https://hub.docker.com/ 查看本地镜像:docker images 搜索镜像 docker search redis (搜索redis) 拉取镜像:docker pull redis (默认版本&#x…

Slow-Fast使用教程2023.5.30

项目地址 https://github.com/facebookresearch/SlowFast 安装教程 首先参考官方安装必须的包并下载项目文件:https://github.com/facebookresearch/SlowFast/blob/main/INSTALL.md 安装注意: 最好使用Linux系统,如果是windows系统&#xf…

3. JVM对象创建与内存分配机制深度剖析

JVM性能调优 1. 对象的创建1.1 类加载检查1.2 分配内存1.3 初始化1.4 设置对象头1.HotSpot虚拟机的对象头包括三部分信息&#xff1a;Mark Word、Klass Pointer类型指针、数组长度 1.5 执行<init>方法 2. 对象大小与指针压缩2.1 什么是java对象的指针压缩&#xff1f;2.2…

数据结构——链式二叉树

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

【云原生|探索 Kubernetes 系列 7】探究 Pod 有什么用,为什么需要它

前言 大家好&#xff0c;我是秋意零。 前一篇&#xff0c;我们介绍了如何从 0 到 1 搭建 Kubernetes 集群。现在我们可以正式了解&#xff0c;Kubernetes 核心特征了。 今天我们来探究 Pod&#xff0c;为什么需要 Pod&#xff1f; &#x1f47f; 简介 &#x1f3e0; 个人主页…

编程示例:求排列的逆,反序表,以及从反序表计算排列

编程示例&#xff1a;求排列的逆&#xff0c;反序表&#xff0c;以及从反序表计算排列 计算机程序设计艺术的第三卷 第五章排序中&#xff0c;第5.1.1节中 提到了排列的反序&#xff0c;反序表&#xff0c;逆的概念。 首先&#xff0c;简单地介绍一下这两个概念。例如一个排列…

RK3566 ALC5616录音调试

1.硬件原理图 MIC_P&#xff0c;MIC_N&#xff1a;mic输入。 I2S&#xff1a;总共有5根线&#xff08;这里不是指 i2s 标准接口&#xff09;&#xff1a;两根音频数据线&#xff08;输入/输出&#xff09;、三根时钟线 其中&#xff1a; I2S_LRCK 是指示当前数据线传输的是左声…

【网络】UDP的应用场景

文章目录 翻译功能命令行解析网络聊天室UDP之Windows与Linux 翻译功能 我们写的UDP服务端并不是只接收到数据就完了&#xff0c;还需要进行处理任务。 我们可以在服务端udpServer.hpp中设置一个回调函数 _callback&#xff0c;具体的逻辑通过udpServer.cc中由外部进行传入 代…

Windows系统安全基线

文章目录 前言一、安全基线概述1.操作系统安全基线 二、系统账户安全1.控制密码安全2.密码策略3.账户锁定策略例&#xff1a;密码策略应用例&#xff1a;账户锁定策略应用 三、本地策略1.审核策略2.用户权限分配3.安全选项配置例&#xff1a;审核策略应用例&#xff1a;用户权限…

软件测试理论----软件测试六大测试类型

1、功能测试&#xff1a;关注功能是否正确 常见的关注点 1&#xff09;是否有不正确或者遗漏的功能 2&#xff09;是否满足用户的需求和系统隐藏的需求 3&#xff09;输入能否正确接收&#xff0c;能否输出正确结果 2、可用性测试&#xff1a;关注产品是否好用 常见的关注点…

03灰度变换与空间滤波

文章目录 3灰度变换与空间滤波3.1背景知识3.1.1灰度变换和空间滤波基础 3.2一些基本的灰度变换函数3.2.1图像反转3.2.2对数变换3.2.3幂律&#xff08;伽马&#xff09;变换3.2.4分段线性变换函数 3.3直方图处理3.3.1直方图均衡3.3.2直方图匹配&#xff08;规定化&#xff09;3.…

webpack配置排除打包

webpack配置排除打包 思路 打包时&#xff0c;不要把类似于element-ui第三方的这些包打进来 从网络上&#xff0c;通过url地址直接引入这些包 操作 &#xff08;1&#xff09;先找到 vue.config.js&#xff0c; 添加 externals 项&#xff0c;具体如下&#xff1a; config…

【JavaSE】异常 (异常抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 自定义异常)

文章目录 异常概念异常结构 异常处理异常抛出异常的捕获异常声明throwstry-catch捕获并处理finally 自定义异常 异常 概念 在程序运行过程中&#xff0c;可能会存在一些奇怪问题&#xff0c;例如&#xff1a;网络不畅&#xff0c;内存报警等等。所以在java中&#xff0c;将程…

NLP:文本预处理总览

1 用n-gram语言模型过滤低质量内容 使用n-gram语言模型对文本进行评估&#xff0c;从而过滤掉低质量的内容。具体来说&#xff0c;可以通过以下步骤进行&#xff1a; 1 将文本分成n-gram序列&#xff0c;其中n是一个整数。 2 使用已经训练好的n-gram语言模型对每个n-gram序列…

面试4年经验的测试员,开口就要25k,却连基础都不会,还不如招应届生!

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试…

冒泡排序实现(c++)

目录 冒泡排序简介&#xff1a; 冒泡排序原理&#xff1a; 动图演示&#xff1a; 代码实现&#xff1a; 冒泡排序简介&#xff1a; 冒泡排序&#xff0c;最优时间复杂度O(N)&#xff0c;平均时间复杂度O(N^2)&#xff0c;最差空间复杂度O(N)&#xff0c;平均时间复杂度O(1)…

基于ISIC数据集的皮肤病黑色素瘤分类研究与实现

摘要&#xff1a; 本项目利用残差网络结构对皮肤病图像进行分类&#xff0c;提高了皮肤病诊断的准确度。并结合Flask框架实现一个简单的Web应用&#xff0c;用户可以上传图像文件&#xff0c;经过预处理最后将预测结果显示在界面上。通过该系统&#xff0c;医生和研究人员可以快…