Redis:哨兵机制

在上文主从复制的基础上,如果主节点出现故障该怎么办呢? 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的问题。

哨兵机制(Redis Sentinel)

Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。

 

哨兵实现了什么功能呢?下面是Redis官方文档的描述:

  • 监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  • 配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
  • 通知(Notification):哨兵可以将故障转移的结果发送给客户端。

其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移;而配置提供者和通知功能,则需要在与客户端的交互中才能体现。

哨兵集群的组建

上图中哨兵集群是如何组件的呢?哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。

在主从集群中,主库上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的。在下图中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)发布到__sentinel__:hello频道上,哨兵 2 和 3 订阅了该频道。那么此时,哨兵 2 和 3 就可以从这个频道直接获取哨兵 1 的 IP 地址和端口号。然后,哨兵 2、3 可以和哨兵 1 建立网络连接。

通过这个方式,哨兵 2 和 3 也可以建立网络连接,这样一来,哨兵集群就形成了。它们相互间可以通过网络连接进行通信,比如说对主库有没有下线这件事儿进行判断和协商。

哨兵监控Redis库

哨兵监控什么呢?怎么监控呢?

这是由哨兵向主库发送 INFO 命令来完成的。就像下图所示,哨兵 2 给主库发送 INFO 命令,主库接受到这个命令后,就会把从库列表返回给哨兵。接着,哨兵就可以根据从库列表中的连接信息,和每个从库建立连接,并在这个连接上持续地对从库进行监控。哨兵 1 和 3 可以通过相同的方法和从库建立连接。

主库下线的判定

哨兵如何判断主库已经下线了呢?

首先要理解两个概念:主观下线客观下线

  • 主观下线:任何一个哨兵都是可以监控探测,并作出Redis节点下线的判断;
  • 客观下线:有哨兵集群共同决定Redis节点是否下线;

当某个哨兵(如下图中的哨兵2)判断主库“主观下线”后,就会给其他哨兵发送 is-master-down-by-addr 命令。接着,其他哨兵会根据自己和主库的连接情况,做出 Y 或 N 的响应,Y 相当于赞成票,N 相当于反对票。如果赞成票数(这里是2)是大于等于哨兵配置文件中的 quorum 配置项(比如这里如果是quorum=2), 则可以判定主库客观下线了。


哨兵集群的选举

判断完主库下线后,由哪个哨兵节点来执行主从切换呢?这里就需要哨兵集群的选举机制了。

  • 为什么必然会出现选举/共识机制

为了避免哨兵的单点情况发生,所以需要一个哨兵的分布式集群。作为分布式集群,必然涉及共识问题(即选举问题);同时故障的转移和通知都只需要一个主的哨兵节点就可以了。

  • 哨兵的选举机制是什么样的

哨兵的选举机制其实很简单,就是一个Raft选举算法: 选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举

  • 任何一个想成为 Leader 的哨兵,要满足两个条件
    • 第一,拿到半数以上的赞成票;
    • 第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。

以 3 个哨兵为例,假设此时的 quorum 设置为 2,那么,任何一个想成为 Leader 的哨兵只要拿到 2 张赞成票,就可以了。


新主库的选出

主库既然判定客观下线了,那么如何从剩余的从库中选择一个新的主库呢?

  • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点
  • 选择salve-priority从节点优先级最高(redis.conf)的
  • 选择复制偏移量最大,只复制最完整的从节点

故障的转移

新的主库选择出来后,就可以开始进行故障的转移了。

假设根据我们一开始的图:(我们假设:判断主库客观下线了,同时选出sentinel 3是哨兵leader)故障转移流程如下

  • 将slave-1脱离原从节点(PS: 5.0 中应该是replicaof no one),升级主节点,
  • 将从节点slave-2指向新的主节点
  • 通知客户端主节点已更换
  • 将原主节点(oldMaster)变成从节点,指向新的主节点

转移之后

 

l

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

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

相关文章

Linux系统下载各大模型的方法

1. 下载Civitai模型 wget -O xxxx.safetensors "https://civitai.com/api/download/models/xxxx?&tokenxxxxxxxxxx" --content-disposition2. 下载huggingface模型 点击这3个点 选择Clone repository 如果是想下载当前仓库下所有文件,包括好多个GB的…

今年双11哪些东西值得买?分享五款实用耐用的好物,不再乱花钱!

随着一年一度的1111购物节脚步渐近,是否还在为挑选商品而犹豫不决?别担心,我们贴心整理了一份双十一必买好物推荐,专为追求品质生活的您量身打造。跟随这份清单,让您的数字生活更加丰富多彩,无需多虑&#…

自助服务智能终端界面设计,要遵循的7个原则。

自助服务智能终端在银行、医院、政务、公共服务大厅等场景下,为用户提供了诸多方面,因为面对的群体层次不一,所以在设计过程要遵循诸多原则,本文为大家总结了7点。 1. 界面简洁明了: 避免过多的文字和图标&#xff0…

ELK-02-skywalking-v10.0.1安装

文章目录 前言一、下载skywalking二、上传到服务器并解压三、安装jdk21四、修改配置五、启动总结 前言 skywalking-v10.0.1安装。 运用es持久化数据,所以需先完成ELK-01步骤。 一、下载skywalking 下载地址:https://skywalking.apache.org/downloads/ …

python-list

Python 列表 原文:https://www.geeksforgeeks.org/python-list/ 列表就像动态大小的数组,用其他语言声明(C中的 vector 和 Java 中的 ArrayList)。列表不必总是相同的,这使得它成为 Python 中最强大的工具。单个列表可能包含整数、字符串和对象等数据类型…

指针 (2)

目录 1.指针变量的⼤⼩ 2 指针的解引⽤ 3指针-整数 1.指针变量的⼤⼩ 指针变量的大小和编译器的位数有关系,例如vs2022的 x64 就是64位, x86 就是 32位 当两个同时运行一个代码的时候就会有差异。 当我在运行x86的时 总结: 在x86…

java面对对象高级

1.类变量和类方法 1.1static变量 (1)类变量: 也叫静态变量/静态属性,所有对象共享并且所有对象访问的值是相同的 static变量是同一个类所有对象共享的 static类变量,在类加载的时候就生成了 (2&#xff09…

MySQL基础篇 - SQL

01 SQL通用语法 02 SQL分类 03 DDL语句 04 DML语句 05 DQL语句(单表查询) 05_01 学习总览 05_02 基本查询 05_03 条件查询 【应用实例】: 05_04 聚合函数 05_05 分组查询 05_06 排序查询 05_07 分页查询 【boss题目】: 05_08 执行顺序 06 DCL语句 【概…

国家标准和团体标准有什么区别?

国家标准和团体标准的区别主要体现在以下几个方面: 1. 制定标准的主体不同:国家标准是由国家机构通过并公开发布的标准;团体标准是由学会、协会、商会、联合会、产业技术联盟等社会团体协调相关市场主体共同制…

Libtorrent 安装、编译与使用(附 Boost 的编译与使用)

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 所用设备系统与软件Part.II 准备工作Chap.I 编译 Boost 库Chap.II 下载必需文件Part.III 编译与使用 LibtorrentChap.I 运行 Example 和 TestChap.II 使用库文件ReferencePart.I Introduction libtorrent 是 BitTorrent 协…

Unity场景内画车道线(根据五阶曲线系数)

之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。 由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。 使用在线图形计算器进行测试构建,公式…

开源鸿蒙OpenHarmony系统修改屏幕旋转方法 深圳触觉智能RK3566开发板

本文提供OpenHarmony4.0系统竖屏修改为旋转时的操作方法,在此为大家介绍了两种方法!第一种方式是将修改过的文件重新编译后烧录至开发板中实现屏幕旋转,第二种方式则是通过覆盖原文件的方式实现屏幕旋转。 1、源码下载 首先进入触觉智能官网…

Prompt输出限制怎么写?用CCoT限制输出长度的推理,大幅提高LLM准确性

图片由修猫创作 一项由意大利比萨的著名高等教育和研究机构圣安娜高等学校Sania Nayab等人进行的研究为这个问题提供了一个创新的解决方案- Constrained Chain-of-Thought (CCoT)提示技术。这项研究不仅提出了控制LLM输出长度的新方法,还开发了一套评估LLM输出简洁…

新闻文本分类识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+TensorFlow+Django网页界面

一、介绍 文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集(“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”),然…

推荐一个免费的学习ROS机器人的大模型

可以帮你快速写推文 聚合古月居资源,帮你推荐古月居学习路径 学习古月居产品?古月知道绝对是你的好帮手! 无聊想唠嗑?和古月知道一起唠嗑吧! 想学点别的,但是古月居没找到对应的文章怎么办? 还有很多很多&…

【MyBatis 源码拆解系列】MyBatis 运行原理 - MyBatis 中的代理模式

欢迎关注公众号 【11来了】 ,持续 MyBatis 源码系列内容! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址:点击查看文章导读! 感谢你的关注&#xff…

图变换器:为图数据增强神经网络架构

人工智能咨询培训老师叶梓 转载标明出处 当面对图数据时,尤其是那些拓扑结构重要的图,传统的 Transformer 架构并未能充分利用图的连接性特征,导致性能受限。为了解决这一问题,新加坡南洋理工大学的研究人员提出了一种新的神经网…

数字私家侦探必备工具

在当今快节奏的数字环境中,技术是法医调查的关键组成部分,因为它将传统技术转化为复杂的数字操作。数字私家侦探的出现给侦查方式带来了显著的变化。这些专家收集、检查和储存数字证据 使用尖端技术,这对于解决涉及电子数据的问题至关重要。用…

Vue.js与Flask/Django全栈开发实战:从零搭建前后端分离的高效Web应用,打造现代化全栈开发体验!

将Vue.js与Flask或Django等后端框架配合使用,可以构建一个全栈的Web应用。以下是一个简要的指南,介绍如何将Vue.js与Flask或Django结合使用。 1. 准备工作 确保你已经安装了Node.js、npm(或yarn)以及Python和相应的包管理工具&am…

JAVA开源项目 学科竞赛管理系统 计算机毕业设计

本文项目编号 T 047 ,文末自助获取源码 \color{red}{T047,文末自助获取源码} T047,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…