Redis 哨兵机制的工作原理——Java全栈知识(22)

Redis 哨兵机制的工作原理

在之前的文章我们讲到了 Redis 的三种集群架构:跳转文章:Redis集群模式
接下来我们详细讲哨兵机制的作用以及实现原理

以下是 Redis 哨兵的结构图
image-20210725154528072

1、Redis 哨兵的作用

哨兵的作用如下:

1、监控,2、自动故障恢复,3、通知

  • 监控:Sentinel 会不断检查您的 master 和 slave 是否按预期工作
  • 自动故障恢复:如果 master 故障,Sentinel 会将一个 slave 提升为 master。当故障实例恢复后也以新的 master 为主
  • 通知:Sentinel 充当 Redis 客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给 Redis 的客户端

注意:Redis 客户端是通过哨兵获取主节点地址变更的通知,而不是客户端的每一次请求都会发向哨兵,哨兵再通过主节点处理请求

2、Redis 集群的监控原理

Sentinel 基于心跳机制监测服务状态,每隔 1 秒向集群的每个实例发送 ping 命令:

•主观下线:如果某 sentinel 节点发现某实例未在规定时间响应,则认为该实例主观下线
•客观下线:若超过指定数量(quorum)的 sentinel 都认为该实例主观下线,则该实例客观下线

[!info] quorum 值最好超过 Sentinel 实例数量的一半。

image-20210725154632354

3、 集群故障恢复原理

一旦发现 master 故障,sentinel 需要在 salve 中选择一个作为新的 master,选择依据是这样的(选举规则):

  • 首先会判断 slave 节点与 master 节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该 slave 节点
  • 然后判断 slave 节点的 slave-priority 值,越小优先级越高,如果是 0 则永不参与选举
  • 如果 slave-prority 一样,则判断 slave 节点的 offset 值,越大说明数据越新,优先级越高
  • 最后是判断 slave 节点的运行 id 大小,越小优先级越高。

1、断开时间。2、优先级。3、偏移值。4、节点 ID

当选出一个新的 master 后,该如何实现切换呢?

流程如下:

  • sentinel 给备选的 slave 1 节点发送 slaveof no one 命令,让该节点成为 master
  • sentinel 给所有其它 slave 发送 slaveof 192.168.150.101 7002 命令,让这些 slave 成为新 master 的从节点,开始从新的 master 上同步数据。
  • 最后,sentinel 将故障节点标记为 slave,当故障节点恢复后会自动成为新的 master 的 slave 节点

1、通知备选节点,2、通知所有节点,3、标记故障节点(slave)

image-20210725154816841

4. 小结

Sentinel 的三个作用是什么?

  • 监控
  • 故障转移
  • 通知

Sentinel 如何判断一个 redis 实例是否健康?

  • 每隔 1 秒发送一次 ping 命令,如果超过一定时间没有相向则认为是主观下线
  • 如果大多数 sentinel 都认为实例主观下线,则判定服务下线

故障转移步骤有哪些?

  • 首先选定一个 slave 作为新的 master,执行 slaveof no one
  • 然后让所有节点都执行 slaveof 新 master
  • 修改故障节点配置,添加 slaveof 新 master

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

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

相关文章

如何使用Python中的生成器

如何使用Python中的生成器 在Python中,生成器是一种特殊的迭代器,它允许你逐个地生成值,而不是一次性地计算并存储所有的值。这对于处理大量数据或者无限序列特别有用,因为它能够节省内存并提高效率。 生成器通常是通过以下两种…

Java API使用避坑合集

Java API使用避坑合集 总结常见的容易踩坑点记录下来以供参考 相当于避坑大杂烩、会涉及各种坑,持续更新… 1、数组转集合 Arrays.asList() 方法 Arrays.asList() 方法 返回的集合不支持修改操作,否则会抛异常 java.lang.UnsupportedOperationExcept…

5月25日,每日信息差

第一、博通推出 P1400GD 高速网卡:支持 400Gbps 网络、5nm 工艺,搭载 BCM57608 芯片,符合 IEEE P802.3bs 标准。这款网卡采用 5nm 制程技术,为 AI/ML、云、高性能计算提供支持,配备第六代增强型 NIC 架构、第四代 RoCE…

【晚风摇叶之其他】抖音直播弹幕解析,连接websocket解析弹幕内容

目录 一.生成websocket的url 1.查看网络面板拿到url,分析url 2.分析url 1.获取room_id,user_unique_id 2.获取signature 3.拼接url 二.连接websocket解析弹幕内容 1.查找消息体序列化方式 2.编写proto对象信息 3.python连接websocket 问题1:cookie问题

【ArcGIS微课1000例】0111:谷歌地球Google Earth下载安装与使用教程

一、谷歌地球安装 双击安装包,默认点击完成即可。 二、谷歌地球使用 打开快捷方式,开始使用谷歌地球。欢迎界面: 软件主界面: 三、谷歌地球下载 软件安装包位于《ArcGIS微课实验1000例(附数据)专栏配套完数据包中的0111.rar中…

海外投放面试手册

海外投放面试手册 岗位职责: 负责Google 、Facebook、TikTok、Twitter等海外主流广告平台的自主投放操作及合作渠道沟通;负责海外合作渠道媒体的广告投放管理、媒体数据监测、效果分析、优化调整等工作; 3.了解海外各渠道&…

开发一个游戏为什么需要3-4个月时间?

开发一款游戏通常需要3-4个月的时间,这是因为游戏开发是一个复杂且多步骤的过程,涉及多个专业领域的合作。以下是对这一过程的详细解析: 游戏开发的第一步是概念和设计阶段。在这一阶段,开发团队需要确定游戏的核心理念、主题和玩…

企业如何防止数据泄密?大型企业必备的文件加密软件

随着信息化建设的大步推进,越来越多的企业资料以电子文件的形式保存,企业内部和企业之间的信息交流也主要依靠电子文件。近年来的泄密事件层出不穷,比如东软泄密案、HTC窃密案、力拓案等,给企业带来灾难性的经济损失及信誉重创。如…

java-数组求最值 1

在 Java 中,数组是一种基本的数据结构,用于存储一系列相同类型的数据。数组的最值问题是指在一个数组中找到最大值和最小值的问题。这个问题在计算机科学和编程中是非常常见的,无论是在算法设计、数据分析还是实际应用中,都可能会…

出题123

题目时限空间说明 无特殊均默认 1 s , 256 M B 1s,256MB 1s,256MB Problem a 最大化 在最大化目标值的基础上选择的操作越多越好,且输出操作应当按照顺序执行,即你的输出顺序就是你的执行顺序,当有多个执行顺序可以最大化目标值时&#xff0…

python中的条件语句

python中语句的执行顺序 默认情况下,python代码的执行顺序,是从上到下依次执行的,这个顺序是不会变的, python中的条件语句 电脑的CPU芯片是能够进行算术运算也能进行逻辑判断的。 条件语句能够表达“如果...否则...” 这样的语…

基于51单片机的数字频率计(电路图+pcb+论文+仿真+源码)

于51单片机的数字频率计 设计的频率计范围能够达到1HZ-1MHZ(实际上51单片机达不到这个范围,不要在实验环境下进行),这个是课设来着,用Proteus仿真实现的,给有需要的同学参考一下 仿真原理图如下(proteus仿真工程文件可…

面试八股之JVM篇3.6——垃圾回收——强引用、弱引用、虚引用、软引用

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…

Javascript特效之鼠标悬停特效【css】

先看一看效果&#xff0c;是不是很炫酷啊&#xff1f;&#xff1f; HTML代码&#xff1a; <!DOCTYPE html> <html><head><meta charset""UTF-8"" /><title>CSS特效&#xff1a;鼠标悬停效果</title><link rel&q…

Pair和Triple的最佳实践

在软件开发中&#xff0c;数据结构是至关重要的概念。它们帮助我们以高效和有组织的方式存储和处理数据。在Java语言中&#xff0c;Pair&#xff08;对&#xff09;和Triple&#xff08;三元组&#xff09;是两个常见的数据结构&#xff0c;它们在不同的场景中都有广泛的应用。…

SQL分类——DDL(数据定义语言)

一、DDL&#xff08;数据定义语言&#xff09; &#xff08;1&#xff09;DDL——数据库——操作的相关语法&#xff1a; 查询 可以一次性查询当前数据库服务器中所有的数据库&#xff1a; SHOW DATABASES; 查询当前所处的数据库&#xff1a; SELECT DATABASE(); 创建 一般最简…

HTML语义化标签:为何它们如此重要?

HTML语义化标签&#xff1a;为何它们如此重要&#xff1f; 引言1. HTML语义化标签的基本概念2. HTML语义化标签的作用2.1 提升网页可读性2.2 增强可访问性2.3 优化搜索引擎排名2.4 提高性能 3. 代码示例结尾讨论 引言 在前端开发的世界里&#xff0c;HTML作为构建网页的基础语…

如何在软考机考中使用双拼双拼输入法

如何在软考机考中使用双拼双拼输入法 测试环境 2024/05/25 2024年度上半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;计算机化考试 如何在软考机考中使用双拼双拼输入法 Ctrl Shift 或者 Win Space 切换到谷歌拼音 然后右键控件&#xff0c;打开首选项&a…

Python | Leetcode Python题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution:# 在【100. 相同的树】的基础上稍加改动def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if p is None or q is None:return p is qreturn p.val q.val and self.isSameTree(p.left, q.ri…

热加载之再也不用喝杯茶等配置生效了

I. 背景介绍 Spring Boot作为一款基于Spring框架的快速应用开发平台&#xff0c;自发布以来就以其简化的配置、快速的启动和部署能力获得了广泛的关注和应用。它遵循“约定优于配置”的原则&#xff0c;通过自动配置机制减少了开发者的工作量&#xff0c;使得创建独立运行的、…