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,一经查实,立即删除!

相关文章

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

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

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

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

出题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…

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

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

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…

Transformer详解(1)-结构解读

Transormer块主要由四个部分组成&#xff0c;注意力层、位置感知前馈神经网络、残差连接和层归一化。 1、注意力层(Multi-Head Attention) 使用多头注意力机制整合上下文语义&#xff0c;它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构&#…

基于.net开发的博客系统

基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统&#xff0c;采用.net core微服务技术搭建&#xff0c;采用传统的MVC模式&#xff0c;使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…

clion读取文件设置为读取当前目录下的文件

1.问题 使用vs读取文件时一切正常 但是同样的代码在clion中无法正常执行 原因 原因&#xff1a;clion的源文件找不到input.txt文件的位置 需要设置工作目录&#xff0c;例如此时input.txt在当前目录下&#xff0c;那么就设置 设置当前文件的工作目录为$FileDir$即可&am…

Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装

目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装&#xff0c;只安装 nvidia 驱动&#xff08;亲测可用&#xff01;&#xff09; 2. 通过 software & Updates 安装&#xff0c;安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…

C++—— set、map、multiset、multimap的介绍及使用

目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库&#xff08;STL&#xff09;中的关联…

AI必然趋势下,产品经理未来何在?路怎么走?

AI已经普遍运用到产品经理的日常工作中了。让它写个需求分析、做个PRD不在话下… 因为AI&#xff0c;也能经常听到有人在谈论&#xff1a;产品经理未来是否会被取代&#xff1f; 未来&#xff0c;产品经理的路该往哪走、怎么走&#xff1f; 未来&#xff0c;产品经理职业规划…

瑞芯微RV1126——ffmpeg环境搭建

本篇文章来介绍一下&#xff0c;在ubuntu上搭建一个比较完整的ffmpeg环境需要的步骤以及流程。为后期将我们开发的应用程序移植到RV1126开发板上做准备。 在安装ffmpeg之前&#xff0c;为了方便后续的操作&#xff0c;我们可以先搭建好samba服务器。所以本节将分为两个部分&am…

AI多模态「六边形战士」,原创音乐、1分钟百页PPT、抖音爆款……

2024年AI行业最大的看点是什么&#xff1f; 那一定是多模态AI应用。 大模型发展到今天这个阶段&#xff0c;文本处理已经是各家大模型的必备技能了&#xff0c;对音频、视觉等多模态的理解和应用才是下一个阶段大模型比拼的赛道。 3.5研究测试&#xff1a;hujiaoai.cn 4研究测…

Golang单元测试

文章目录 传统测试方法基本介绍主要缺点 单元测试基本介绍测试函数基准测试示例函数 传统测试方法 基本介绍 基本介绍 代码测试是软件开发中的一项重要实践&#xff0c;用于验证代码的正确性、可靠性和预期行为。通过代码测试&#xff0c;开发者可以发现和修复潜在的错误、确保…

Python实现数据可视化效果图总结

一、JSON格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。 JSON本质上是一个带有特定格式的字符串 Json格式 JSON数据格式在Python中可以是字典、又可以是列表中嵌套着字典的格式。 Pyhton数据和Json数据相互转化 二、pyecharts模块 如果想…

二叉排序树的创建

二叉排序树就是节点经过排序构建起的二叉树&#xff0c;其有以下性质&#xff1a; 1. 若它的左子树不为空&#xff0c;则左子树上所有节点的值均小于它的根节点的值。 2. 若它的右子树不为空&#xff0c;则右子树上所有节点的值均大于它的根节点的值。 3. 它的左、右子树也分…