【Redis】聊一下哨兵集群

news2024/11/16 10:17:53

上一篇中,介绍了哨兵机制可以减少主库实例下线的误判率,但是如果只有一个哨兵实例,出现宕机后没有办法保证服务的高可用,所以一般实际的生产环境都是搭建3个哨兵实例构建的集群进行运行。但是具体的运行机制是什么。其实主要就是三个问题。

  • 哨兵集群之间如何进行构建连接的
  • 哨兵集群如何和从库进行建立连接
  • 客户端如何知道主从切换了,也就是客户端如何和哨兵集群建立连接。

pub/sub机制的哨兵集群模式

其实哨兵之间建立连接,要归功于Redis的pub/sub模式,也就是发布/订阅模式。
这个其实就是简易版的生产者消费者模式,哨兵可以在主库上进行发送和订阅具体的频道,将自己的连接信息(ip+port)发布到频道上,其他的哨兵可以通过订阅频道的事件和集群内的哨兵建立连接,具体形式即使以不同的频道进行区分。
主从集群中,有一个"sentinel:hello"的频道,不同的哨兵可以通过它来互相发现和建立连接。
在这里插入图片描述
如上图所示,哨兵1将自己的信息发布到"sentinel_hello"频道,具体就是172.16.19.3 以及对应的端口26579。而哨兵2和哨兵3订阅这个频道就可以获取到哨兵1的连接信息,由此就可以建立连接。这个时候就可以构建起一个哨兵集群。注意在哨兵选举主库的过程中,哨兵还需要和主从库内的从库建立连接。
哨兵集群如何和从库建立连接?
因为本身主库上存储的就有从库的info信息,只需要哨兵发送info信息就可以获取到哨兵从库的列表。哨兵就可以和从库实例构建连接。但是选举的过程中选举出一个新的主库,还需要通知给客户端新的主库实例。
在这里插入图片描述

pub/sub机制的客户端事件通知

哨兵就是一个特殊的服务实例,并不处理服务请求,只是负责监控、选主、和通知的任务。所以每个哨兵也提供pub/sub的机制,客户端可以从哨兵订阅消息。
在这里插入图片描述
主要的哨兵频道就是如下,客户端就可以通过订阅不同的频道,当客户端订阅到有+switch-naster主库地址发生变化时,就会获取到对应的新的主库实例地址。

那个哨兵执行主从切换

但是在具体的哨兵切换主库的过程中,因为哨兵集群中有多个实例,应该哪一个进行做主从切换的过程。其实这个过程有点类似于客户下线的流程,也就是需要由半数以上的实例认为哨兵应该当选leader,才可以成为leader,进行主从切换的过程。
在这里插入图片描述
比如集群中有三个哨兵实例构建的集群,在T1时刻,S1给自己投一篇YES,然后等待S2和S3的投票,而在S2时刻,S3给自己投了一票YES,就不能给S1投票。T3时刻,S3因为给自己投递了一票,所以回复S3为N,但是因为网络问题,S3的请求先到达S2,S2给了S3一票,而在T4时刻,S2已经投递了一票,所以给了S1N。最终的结果就是S1 1票YES,一票N。而S3是2票YES 所以S3就成为Leader。所以一般我们在生产环境中,都是构建奇数哨兵集群,主要是为了好方便选举。

总结

其实在计算机领域中,都是在一个新问题下,引入新的方案,而这个方案又带来新的问题。比如在Redis中,我们使用了复制模式,由此引入了主从模式,但是主从模式的为了实现选主的降低误判率,引入了哨兵模式,单点的哨兵模式会出现单点故障问题,所以引入了哨兵集群。

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

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

相关文章

使用langchain及llama_index实现基于文档(长文本)的相似查询与询问

文章目录 1. 引言2. 简介3. 带关键字的查询方案4. 不带关键字的总结询问5. 实现代码 1. 引言 在调用ChatGPT接口时,我们常常受到4096个字符(token)的限制。这种限制对于处理长文本或者需要对文档进行相似查询和询问的场景来说是一个挑战。然…

如何复制投票链接投票怎样链接到公众号投票链接如何生成

关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。 我们现在要以“妙趣拾光”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票”…

【Python开发】FastAPI 03:请求参数—请求体

除了路径参数和查询参数,还有请求体,其用于传递 JSON、XML 或其他格式的数据,以便服务器能够读取并做出相应的处理,可以说请求体的作用更为强大。试想一下,如果存在七八个参数,路径参数和查询是不是就招架不…

Camera | 10.linux驱动 led架构-基于rk3568

前面文章我们简单给大家介绍了如何移植闪光灯芯片sgm3141,该驱动依赖了led子系统和v4l2子系统。 V4L2可以参考前面camera系列文章,本文主要讲述led子系统。 一、LED子系统框架 Linux内核的 led 子系统主要功能: 为每个设备在/sys/class/le…

《Linux内核源码分析》(2)进程原理及系统调用

《Linux内核源码分析》(2)进程原理及系统调用 一、进程 操作系统的作用:作为硬件的使用层,提供使用硬件资源的能力, 进程的作用:作为操作系统使用层,提供使用操作系统抽象出的资源层的能力 进程、线程和程序的区别&…

【计算机视觉】Segment Anything 安装配置及代码测试(含源代码)

文章目录 一、前言二、安装2.1 基本要求2.2 Install Segment Anything 三、代码使用示例3.1 Automatically generating object masks with SAM3.2 Environment Set-up3.3 显示标注3.4 图像示例3.5 Automatic mask generation3.6 Automatic mask generation options 一、前言 目…

客户体验:响应速度是他们的 No.1 Pick么?

服务响应速度在为消费者提供服务时极为重要,那么,在消费者整体体验中,响应速度是否是消费者最在意的呢? 无论是对企业还是消费者来说,时间都至关重要。消费者在寻求客户服务时,不喜欢等待。根据《客户服务受…

【Python asyncio】零基础也能轻松掌握的学习路线与参考资料

Python asyncio是一个强大而易于使用的库,让Python程序员能够编写高效的异步IO应用程序。它为程序员提供了一种简单而优雅的方法来避免使用 Python GIL(全局解释器锁),同时允许他们轻松地处理高并发的网络通信和并发任务执行。下面…

蓝桥杯数论总结:快速幂和矩阵快速幂

本文先是给出快速幂的原理,又由一道例题明确快速幂的Python代码模版;而后给出矩阵快速幂的原理(介绍了矩阵相乘,对没学过线代者友好),和矩阵快速幂的模版。再给出快速幂和矩阵快速幂相关的题单。 目录 快…

Linux高级---k8s存储

文章目录 一、数据卷的概述二、关系图三、数据卷的类型1、emptydira、描述b、适用场景c、emptydir应用 2、hostpatha、描述b、适用场景c、hostpath应用 3、nfsa、描述b、适用场景c、nfs应用 4、PV和PVCa、描述b、存储卷和存储卷声明的关系c、存储卷声明的管理过程 5、PVa、资源…

10个可以快速用Python进行数据分析的小技巧

一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可以节省时间,还可能挽救“生命”。 一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器。所以,这里…

基于Spring Boot+Vue的课堂管理系统

介绍 基于Spring BootVue的课堂管理系统。前后端分离。包含教师授课管理、学生选退课、聊天室、签到、笔记管理模块等。 技术架构 spring BootMyBatisRedisWebSocketVueCLIAxiosElement UI 项目特点: - 后台使用MyBatis连接数据库,编写后台服务器的…

【教程】2步白嫖使用DeepL Pro会员版 [附插件]

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 【教程】5步白嫖使用Grammarly Premium高级版 [附脚本] 适用说明 Edge、Chrome等,使用了Chrome内核的浏览器应该都可以吧。 开始白嫖 1、下载并解压插件,下载链接:https://x…

第2章:数据结构【AcWing】

文章目录 单链表定义初始化头插在下标为pos位置后插入删除下标为pos后的结点遍历 双链表定义初始化在下标为pos后插入删除下标为pos的位置 栈和队列栈定义示例代码 队列定义示例代码循环队列定义示例代码 单调栈和单调队列单调栈朴素方法 O ( n 2 ) O(n^2) O(n2)优化 O ( n ) …

Web的基本漏洞--逻辑漏洞

目录 一、逻辑漏洞介绍 1.逻辑漏洞的原理 2.逻辑漏洞的分类 3.常见的逻辑漏洞 4.挖掘逻辑漏洞 一、逻辑漏洞介绍 1.逻辑漏洞的原理 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误,从而进行攻击。一般出现任…

英国皇家植物园采用机器学习预测植物抗疟性,将准确率从 0.46 提升至 0.67

内容一览:疟疾是严重危害人类生命健康的重大传染病,研究人员一直在致力于寻找新的植物源性抗疟疾化合物,以研发相关药物。近期英国皇家植物园利用机器学习 算法 有效预测了植物抗疟性,该研究成果目前已发表在《Frontiers in Plant…

路径规划算法:基于风驱动优化的路径规划算法- 附代码

路径规划算法:基于风驱动优化的路径规划算法- 附代码 文章目录 路径规划算法:基于风驱动优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法…

游戏场景的转换——状态模式

状态模式 游戏比较复杂时,通常会设计成多个场景。 切换场景的好处 1、重复使用场景 跳转切换场景的代码有两种一种是旧版的方法 Application.LoadLevel(“SampleScene”);另一种是新版的方法 SceneManager.LoadScene(“SampleScene”); 例子1:通过场景…

通过IEDA连接Linux上的MYSQL

一、打开idea新建项目 idea与数据库的连接是与项目强相关的 在项目A中配置的数据库连接a,那么只能在项目A中能看到和使用数据库连接a 二、配置新的数据库连接 1.点击界面左侧栏中的Database,唤出数据库连接界面 2. 新建数据库(mysql&#x…

Linux:apache配置与应用

Linux:apache配置与应用 一、虚拟 Web 主机1.1 虚拟Web主机1.2 httpd服务支持的虚拟主机类型 二、基于域名的虚拟主机2.1 为虚拟主机提供域名解析2.2 为虚拟主机准备网页文档2.3 添加虚拟主机配置2.4 设置访问控制2.5 加载独立的配置文件2.6 在客户机中访问虚拟 Web…