掌握Redis的Sentinel哨兵原理,助你拿到25k的offer

news2024/11/16 5:30:40

±—+ ±—+

| M1 |---------| R1 |

| S1 | | S2 |

±—+ ±—+

Configuration: quorum = 1

master宕机,s1和s2中只要有1个哨兵认为master宕机就可以进行切换,同时会在s1和s2中选举出一个执行故障转移.

但此时,需要majority,也就是大多数哨兵都是运行的,2个哨兵的majority就是2

2个哨兵的majority=2

3个哨兵的majority=2

4个哨兵的majority=2

5个哨兵的majority=3

2个哨兵都运行着,就可以允许执行故障转移

若整个M1和S1运行的机器宕机了,那么哨兵仅剩1个,此时就无majority来允许执行故障转移,虽然另外一台机器还有一个R1,但故障转移不会执行

3节点哨兵集群

======================================================================

±—+

| M1 |

| S1 |

±—+

|

±—+ | ±—+

| R2 |----±—| R3 |

| S2 | | S3 |

±—+ ±—+

Configuration: quorum = 2,majority

若M1节点宕机了,还剩下2个哨兵,S2和S3可以一致认为master宕机了,然后选举出一个来执行故障转移

同时3个哨兵的majority是2,所以余存的2个哨兵运行着,就可执行故障转移

2 Redis Sentinel 架构

==================================================================================

10/article/details/115868896)Redis Sentinel故障转移


  1. 多个sentinel发现并确认master有问题。

  2. 选举出一个sentinel作为领导。

  3. 选出一个slave作为master.

  4. 通知其余slave成为新的master的slave.

  5. 通知客户端主从变化

  6. 等待老的master复活成为新master的slave

  • 可监控多套

3 安装与配置

======================================================================

  1. 配置开启主从节点

  2. 配置开启sentinel监控主节点。(sentinel是特殊的redis)

  3. 实际应该多机器

  4. 详细配置节点

Redis 主节点

[启动]

redis-server redis- 7000.conf

[配置]

port 7000

daemonize yes

pidfile /var/run/redis-7000.pid

logfile “7000.log”

dir “/opt/soft/redis/data/”

Redis 从节点

[启动]

redis-server redis-7001.conf

redis-server redis-7002.conf

slave-1[配置]

port 7001

daemonize yes

pidfile /var/run/redis-7001.pid

logfile “7001.log”

dir “/opt/soft/redis/data/”

slaveof 127.0.0.1 7000

slave-2[配置]

port 7002

daemonize yes

pidfile /var/run/redis-7002.pid

logfile “7002.log”

dir “/opt/soft/redis/data/”

slaveof 127.0.0.1 7000

Sentinel 主要配置

port $(port)

dir “/opt/soft/redis/data/”

logfile " $(port).log"

sentinel monitor mymaster 127.0.0.1 7000 2

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

演示


  • 主节点配置

  • 重定向

  • 打印检查配置文件

  • 启动

4 客户端

====================================================================

  • 客户端实现基本原理-1

  • 客户端实现基本原理-2

  • 客户端实现基本原理-3 验证

  • 客户端实现基本原理-4 通知(发布订阅))

客户端接入流程


  1. Sentinel地址集合

  2. masterName

  3. 不是代理模式

JedisSentinelPool sentinelPool = new JedisSentinelPool(masterName, sentinelSet, poolConfig, timeout);

Jedis jedis = null;

try {

jedis = redisSentinelPool.getResource();

//jedis command

} catch (Exception e) {

logger.error(e.getMessage(), e);

} finally {

if (jedis != null)

jedis.close();

}

5 定时任务

=====================================================================

  1. 每10s 每个 sentinel 对 master 和 replica 执行 INFO 命令
  • 发现 replica 节点

  • 确认主从关系

  1. 每 2s 每个 sentinel 通过 master 节点的channel交换信息(pub/sub)
  • 通过 sentinel :java频道交互

  • 交互对节点的"看法”和自身信息

  1. 每 1s 每个 sentinel 对其他 sentinel 和 redis 执行ping
  • 心跳检测,失败判定依据

6 主观下线、客观下线

==========================================================================

6.1 主观下线(Subjectively Down,SDOWN)


单个 Sentinel 节点对服务器做出的下线判断,即单个 Sentinel 认为某个服务下线(有可能是接收不到订阅,之间的网络不通等一系列原因)。

主观下线是每个sentinel节点对Redis节点失败的偏见

所以还需客观下线机制。

6.2 客观下线(Objectively Down,ODOWN)


多个 Sentinel 实例在对同一服务器做出 SDOWN 判断,并通过命令互相交流后,得出的服务器下线判断,然后开启 failover。

只有在足够数量( 超过quorum个)的 Sentinel 都将一个服务器标记为主观下线后, 服务器才会被标记为客观下线(ODOWN)。

只有当 M 被认定为客观下线时,才会发生故障迁移。

仲裁


仲裁指配置文件中的 quorum 参数。某个 Sentinel 先将 Master 节点标记为主观下线,然后会将这个判定通过 sentinel is-master-down-by-addr 命令询问其他 Sentinel 节点是否也同样认为该 addr 的 Master 节点要做主观下线。

sentinel monitor < port>

sentinel monitor myMaster 127.0.0.1 6379 2

sentinel down-after-milliseconds < masterName> < timeout>

sentinel down-after-milliseconds mymaster 30000

最后当达成这一共识的 Sentinel 个数达到前面说的 quorum 设置的值时,该 Master 节点会被认定为客观下线并进行故障转移。

quorum 值一般设为 Sentinel 个数的二分之一加 1,例如 3 个 Sentinel 就设为 2。

综上可得

哨兵工作原理


  1. 每个 Sentinel 以 1次/s 向它所知的 Master,Slave 以及其他 Sentinel 节点发送一个 PING

  2. 若一个实例距离最后一次有效回复 PING 的时间超过配置文件 down-after-milliseconds,则该实例会被 Sentinel 标记为 主观下线

  3. 若一个 Master 被标记为主观下线,则正在监视该 Master 的所有 Sentinel 会 1次/s 确认 Master 是否真的进入主观下线状态

  4. 当有足够数量 Sentinel(大于等于配置文件指定的值)在指定时间范围内确认 Master 的确进入主观下线状态,则 Master 会被标记为 客观下线

  5. 若 Master 处于 ODOWN 状态,则投票自动选出新Master。将剩余从节点指向新Master继续数据复制

  6. 在正常情况下,每个 Sentinel 会以每 10 秒一次的频率向它已知的所有 Master,Slave 发送 INFO 命令;当 Master 被 Sentinel 标记为客观下线时,Sentinel 向已下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次(因为原来是稳定的,10s 一次info就是为了看看有没有新加入的 sentinel,但现在故障了,所以要尽快将环境稳定好,快速确认完主从关系)

  7. 若没有足够数量 Sentinel 同意 Master 已经下线,Master 的客观下线状态会被移除。若 Master 重新向 Sentinel 的 PING 命令返回有效回复,Master 的主观下线状态就会被移除。

7 领导者选举

======================================================================

原因:只有一个sentinel节点完成故障转移。

选举:通过sentinel is-master-down-by-addr命令都希望成为领导者:

  1. 每个做主观下线的Sentinel节点向其他Sentinel节点发送命令,要求将它设置为领导者

  2. 收到命令的Sentinel节点如果没有同意通过其他Sentinel节点发送的命令,那么将同意该请求,否则拒绝

  3. 如果该Sentinel节点发现自己的票数已经超过Sentinel集合半数且超过quorum,则将成为领导者

  4. 如果此过程有多个Sentinel节点成为了领导者,那么将等待一段时间重新选举

  • 选举实例

8 故障转移

=====================================================================

领导者节点完成

  1. 从slave节点中选出一个“合适的"节点作为新的master节点

  2. 对上面的slave节点执行slaveof no one命令让其成为master节点

  3. 向剩余slave节点发送命令,让它们成为新master节点的slave节点,复制规则和parallel-syncs参数有关

  4. 更新对原来master节点配置为slave,并保持着对其关注,当其恢复后命令它去复制新的master节点。

选择合适的slave节点

  1. 选择slave priority(slave节点优先级)最高的slave节点,如果存在划返同,不存在则继续。

  2. 选择复制偏移量最大的slave节点(复制的最完整),若存在则返回,不存在则

继续。

  1. 选择runId最小的slave节点。

常见开发运维问题

=======================================================================

节点运维


  • 机器下线:例如过保等情况

  • 机器性能不足:例如CPU、内存、硬盘、网络等

  • 节点自身故障:例如服务不稳定等

主节点

sentinel failover <masterName>

节点下线

  • 从节点:临时下线还是永久下线,例如是否做一些清理工作。但是要考虑读写分离的情况。

  • Sentinel节点: 同上。

节点上线

  • 主节点: sentinel failover进行替换

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

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

相关文章

微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)

文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言 大部分微信小程序开发者都会有这样的需求&#xff1a;获取小程序用户的手机号码。但是&#xff0c;因为小程序用户的手机号码属于重要信息&#xff0c;为了安全&#xff0c;所以需要如…

细粒度图像分类论文研读-2022

文章目录TransFG: A Transformer Architecture for Fine-grained RecognitionAbstractintroductionMethodVision transformer as feature extractorImage SequentializationPatch EmbeddingTransFG ArchitecturePart Selection ModuleConstrastive feature learningViT-FOD&…

从理论走向实战,阿里高工熬夜整理出的 Spring 源码速成笔记太香了

不知道大家面试的时候有没有被问到过 Spring 相关问题&#xff08;循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码&#xff09;&#xff1f;反正我这个小学弟前段时间就来私信我说自己面试挂在了 Spring 这一块。&#xff08;原谅我不厚道地笑了&#xff0c;如…

毕设选题推荐基于python的django框架的自媒体社推广平台系统

&#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; Java实战项目专栏 Python实…

安卓APP源码和设计报告——运动健身教学

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 目 录 一、设计背景31. 需求分析32. 课题研究的目的和意义3二、系统需求分析与开发环境31. 系统功能需求32.系统界面需求43.开发环境4三、系统设计4四、系统测试51.脑模拟器测试6五、总结与展望6六、重要…

YoloV7目标检测(Pytorch版)【详解】

文章目录一、网络结构1、总体网络结构&#xff08;backbone&#xff09;2、主干网络介绍&#xff08;backbone&#xff09;2.1 多分支模块堆叠2.2 下采样网络结构2.3 整个backbone代码3、FPN特征金字塔二、预测结果的解码一、网络结构 1、总体网络结构&#xff08;backbone&am…

【组件开发实践】云巧流程组件对接实践

1. 用户需求 假设A系统有如下员工请假审批流场景&#xff1a; 员工请假小于等于3天&#xff0c;只需主管直接审批&#xff1b;大于3天需要主管先审批&#xff0c;审批通过后再由二级主管进行审批。当员工请假审批流节后后&#xff0c;需要通知A系统进行业务处理&#xff08;例…

Tomcat的IO模型

Tomcat支持一下几种IO模型&#xff1a; 支持的IO模型 特点 BIO 同步阻塞式IO&#xff0c;每一个请求都会创建一个线程&#xff0c;对性能开销大&#xff0c;不适合高并发场景。 NIO 同步非阻塞式IO&#xff0c;基于多路复用Selector监测连接状态通知线程处理&#xff0c;…

<C++>多态

文章目录1. 概念2. 多态的定义和实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 虚函数重写的两个例外&#xff1a;2.5 C11 override和final2.6 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类3.1 概念3.2 接口继承和实现继承3. 多态的原理3.1 虚函数表3.2 多态的原理3…

S2SH小区物业管理系统计算机专业毕业论文java毕业设计网站

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《S2SH小区物业管理系统》该项目采用技术&#xff1a;jsp struts2springhibernatecssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件…

java EE初阶 — wait 和 notify

文章目录1.wait 和 notify1.1 wait()方法1.2 notify()方法1.3 notifyAll()方法1.wait 和 notify 线程最大的问题是抢占式指向&#xff0c;随机调度。而写代码的时候&#xff0c;确定的东西会比较好。 于是就有程序猿发明了一些办法&#xff0c;来控制线程之间的执行顺序。 虽…

火山引擎 RTC 助力抖音百万并发“云侃球”

动手点关注干货不迷路1. 背景及技术挑战从电视看直播到手机电脑看直播&#xff0c;直播技术的发展让观众可以随时、随地观看自己喜欢的比赛&#xff0c;并且在看比赛时通过发送表情、发文字进行互动。但表情、文字承载的信息量较小、沟通效率低&#xff0c;我们无法像线下一起看…

一大波节日来袭,App Store节日营销请注意!

11 月已经过去&#xff0c;在过去的 11 月里&#xff0c;我们经历了万圣节、双 11、世界杯、感恩节、黑色星期五等非常重要的营销节点。 在新的 12 月&#xff0c;我们将迎来世界杯闭幕、双12、平安夜、圣诞节等重要营销机遇。在未来&#xff0c;我们还会迎来新春营销的重要机…

图形API学习工程(29):解决在shader文件中使用include的问题

工程GIT地址&#xff1a;https://gitee.com/yaksue/yaksue-graphics 无用的前言 看了下提交记录&#xff0c;这个工程上次更新已经是一年以前了。最近想想&#xff0c;还是应该回来再继续学学&#xff0c;暂且不论是否对工作有帮助&#xff0c;我在这个工程上获得的愉悦感相比…

Excel 是您最容易被忽视的设计工具 设计师对世界排名第一的电子表格工具的看法——如何构建信息图表、仪表板、演示文稿等

人们对 Excel 有很多误解。许多人认为它不过是处理临时预算的电子表格工具。或者它非常适合处理数据,但您需要像 PowerPoint 这样的单独工具才能很好地显示它。 这些误解限制了我们使用 Excel 的方式。 但 Excel 的功能远不止于此,它所需要的只是了解一些鲜为人知的功能。我…

JAVA SCRIPT设计模式--创建型设计模式之工厂方法(3)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

机器学习笔记之配分函数(三)对比散度

机器学习笔记之配分函数——对比散度引言回顾&#xff1a;随机最大似然求解模型参数的过程随机最大似然的缺陷吉布斯采样的缺陷与对比散度思想对比散度名称的由来从KL\mathcal K\mathcal LKL散度的角度描述极大似然估计对比散度的本质引言 上一节介绍了随机最大似然(Stochasti…

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器

第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 目录 第十四届蓝桥杯集训——JavaC组第四篇——ASCII码表与Scanner扫描器 ASCII码表 Scanner扫描器 1、Scanner含义 2、使用方法&#xff1a; next和nextLine的区别 next&#xff1a; nextLine&#…

微服务框架 SpringCloud微服务架构 23 搜索结果处理 23.2 分页

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构23 搜索结果处理23.2 分页23.2.1 分页23.2.2 深度分页问题23.2.3 深度分页…

Zookeeper常用命令大全之四字监控命令

文章目录四字监控命令0. 官方文档1. conf命令2. cons命令3. crst命令4. dump命令5. envi命令6. ruok命令7. stat命令8. srst命令9. wchs命令10. wchc命令(一般不用)11. wchp命令(一般不用)12. mntr命令四字监控命令 zookeeper支持某些特定的四字命令与其的交互。它们大多是查询…