Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解

news2024/11/26 11:58:34

文章目录

  • 0.前言
  • 1. 原理详解
    • 1.1. 哨兵机制的组建
      • 1.1. 哨兵是如何知道从库的信息
    • 1.2. 主库下线的判定
    • 1.3. 哨兵集群选举
    • 1.4. 故障的转移
  • 2. 总结
  • 3. Redis从入门到精通系列文章
  • 4. Redis哨兵模式面试题
    • 4. 1. 什么是Redis的哨兵模式?
    • 4. 2. 哨兵模式的优点是什么?
    • 4. 3. 哨兵模式的工作原理是什么?
    • 4. 4. 如何配置Redis的哨兵模式?
    • 4. 5. 哨兵模式中的故障转移是如何实现的?

在这里插入图片描述

摘要:详细介绍Redis进阶中的高可用性方面,特别是哨兵机制(Redis Sentinel)。我们将探讨哨兵机制的组建过程、监控Redis库主库下线的判定方式、选举新主库的选出方法以及故障的转移过程。同时,还提供了一些参考文章供读者进一步了解。

本文参考蒋德钧 老师的《Redis 核心技术与实战-08 | 哨兵集群:哨兵挂了,主从库还能切换吗》

本章我们带着这些疑问来学习一下Redis高可用

  1. 什么是Redis的哨兵模式?
  2. 哨兵模式的优点是什么?
  3. 哨兵模式的工作原理是什么?
  4. 如何配置Redis的哨兵模式?
  5. 哨兵模式中的故障转移是如何实现的?

0.前言

我们先来了解一下哨兵机制实现了以下主要功能,进一步了解这些功能的实现原理。
在这里插入图片描述

  1. 监控:哨兵节点定期检查Redis主节点和从节点的健康状态。它们发送命令并等待响应,以确保Redis实例正常运行。如果一个节点没有响应,哨兵节点会将其标记为下线。

  2. 故障检测和转移:当一个哨兵节点检测到主节点下线时,它会将这个信息广播给其他哨兵节点。当大多数哨兵节点都确认主节点下线后,它们会开始选举出一个新的主节点。这个过程称为故障转移,它可以确保Redis集群在主节点故障时仍然能够正常运行。

  3. 自动故障转移:一旦新的主节点选出,哨兵节点会更新Redis从节点的配置,使它们切换到新的主节点。这个过程是自动进行的,无需人工干预。

  4. 配置提供和更新:哨兵节点会监控Redis集群的配置,并在需要时提供给客户端。当主节点发生故障转移时,哨兵节点会更新从节点的配置,使它们正确地连接到新的主节点。

  5. 提供集群信息:哨兵节点可以提供有关Redis集群的信息,如主节点、从节点和哨兵节点的地址和状态。

通过这些功能,哨兵机制可以提供高可用性和故障转移能力,确保Redis集群在主节点故障时仍然可用。

1. 原理详解

1.1. 哨兵机制的组建

哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。哨兵只要和主库建立起了连接,就可以在主库上发布消息了,比如说发布它自己的连接信息(IP 和端口)。同时,它也可以从主库上订阅消息,获得其他哨兵发布的连接信息。当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的 IP 地址和端口。除了哨兵实例,我们自己编写的应用程序也可以通过 Redis 进行消息的发布和订阅。所以,为了区分不同应用的消息,Redis 会以频道的形式,对这些消息进行分门别类的管理。所谓的频道,实际上就是消息的类别。当消息类别相同时,它们就属于同一个频道。反之,就属于不同的频道。只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换。

举个蒋德钧 老师在《Redis 核心技术与实战》中的例子
在主从集群中,主库上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的。我来举个例子,具体说明一下。在下图中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)发布到__sentinel__:hello频道上,哨兵 2 和 3 订阅了该频道。那么此时,哨兵 2 和 3 就可以从这个频道直接获取哨兵 1 的 IP 地址和端口号。然后,哨兵 2、3 可以和哨兵 1 建立网络连接。通过这个方式,哨兵 2 和 3 也可以建立网络连接,这样一来,哨兵集群就形成了。它们相互间可以通过网络连接进行通信,比如说对主库有没有下线这件事儿进行判断和协商。
在这里插入图片描述
通过上面的讲解我们可以总结出来如下几点

  1. 哨兵集群的组建步骤
  • 步骤1:启动哨兵节点。
  • 步骤2:配置哨兵节点的监控对象。
  • 步骤3:哨兵节点之间的通信和协调。
  1. 哨兵节点的角色和作用
  • Master节点:负责处理读写请求的主节点。
  • Slave节点:通过复制Master节点的数据实现数据备份和读取。
  • Sentinel节点:监控Redis集群的状态,负责主库下线判定和故障转移。

1.1. 哨兵是如何知道从库的信息

哨兵向主库发送INFO命令,主库将从库列表发送给从库,哨兵跟从库列表中的从库建立连接,以便监控从库。
在这里插入图片描述

1.2. 主库下线的判定

在Redis Sentinel中,主从切换的执行由哨兵集群中的多个哨兵节点共同协作完成。当哨兵集群中的某个哨兵节点检测到主节点下线时,它会向其他哨兵节点发送消息,然后所有哨兵节点共同达成一致,选举出一个新的主节点,并将其他从节点指向新的主节点。选举的过程中,哨兵节点会通过投票和心跳机制来确定新的主节点。选举出的新主节点会广播给所有的客户端,以便它们能够与新的主节点进行通信。所以,主从切换的执行是由所有的哨兵节点共同参与的。
在这里插入图片描述

  1. 哨兵节点通过心跳机制监控主库的状态。
  2. 当哨兵节点判定主库下线时,会广播通知其他哨兵节点。
  3. 哨兵节点通过共识算法,确定主库是否真的下线。

1.3. 哨兵集群选举

  1. 当一个哨兵节点检测到主节点下线时,它会向其他哨兵节点发送消息,通知它们主节点已经下线。
  2. 其他哨兵节点接收到消息后,它们也会检查主节点是否下线。如果它们同意主节点已下线,它们会进入选举过程。
  3. 在选举过程中,哨兵节点会相互通信,通过投票和心跳机制来决定新的主节点。
  4. 每个哨兵节点会为自己选举一个优先级最高的候选节点,然后它们会将自己选举的候选节点发送给其他哨兵节点。
  5. 哨兵节点会根据候选节点的优先级来选出一个新的主节点。如果有多个候选节点具有相同的优先级,那么将根据配置文件中的故障转移超时属性来决定。
  6. 选举出的新主节点将会广播给所有的客户端,以便它们能够与新的主节点进行通信。
    需要注意的是,在选举过程中,哨兵节点需要达成多数派的共识才能选出新的主节点。例如,如果哨兵节点的总数为5,那么至少需要3个哨兵节点同意选举结果才能生效。
    这个选举过程确保了在主节点下线的情况下,哨兵集群能够自动选举出一个新的主节点,从而保证了Redis的高可用性。

总结一下

  1. 当主库下线后,哨兵节点会开始选举新的主库。
  2. 哨兵节点通过共识算法选出新的主库。
  3. 新主库被选出后,哨兵节点会通知其他节点进行切换。

大概过程如图
在这里插入图片描述

1.4. 故障的转移

  1. 当新主库选出后,哨兵节点会将从库切换到新主库。
  2. 客户端需要重新连接到新主库进行数据的读写操作。

2. 总结

通过本文的介绍,我们详细了解了Redis进阶中的高可用性方面,特别是哨兵机制(Redis Sentinel)。我们了解了哨兵机制的组建过程、监控Redis库主库下线的判定方式、选举新主库的选出方法以及故障的转移过程。对我们学习和面试都有一定的帮助。

参考文章:

  1. Redis Sentinel Documentation: https://redis.io/topics/sentinel
  2. 蒋德钧 老师的《Redis 核心技术与实战-08 | 哨兵集群:哨兵挂了,主从库还能切换吗》

3. Redis从入门到精通系列文章

《Redis 从入门到精通【进阶篇】之redis主从复制详解》
《Redis 从入门到精通【进阶篇】之Redis事务详解》
《Redis从入门到精通【进阶篇】之对象机制详解》
《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
《Redis从入门到精通【进阶篇】之持久化 AOF详解》
《Redis从入门到精通【进阶篇】之持久化RDB详解》
《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》

4. Redis哨兵模式面试题

根据上面的学习,我们来简答一下常见的Redis高可用相关面试题

4. 1. 什么是Redis的哨兵模式?

Redis的哨兵模式是一种用于实现高可用性的机制。在哨兵模式中,多个Redis实例组成一个哨兵集群,其中一个实例作为主服务器,其他实例作为从服务器。哨兵监控主服务器的状态,并在主服务器宕机时自动将某个从服务器提升为新的主服务器,以保证系统的持续可用性。

4. 2. 哨兵模式的优点是什么?

  • 自动故障转移:当主服务器宕机时,哨兵可以自动选举一个新的主服务器,从而保证系统的高可用性。
  • 实时监控:哨兵可以实时监控Redis实例的状态,并在发现异常时及时采取措施,如自动切换主服务器。
  • 灵活性:哨兵模式可以根据实际需求配置哨兵集群的大小,以适应不同规模的系统。

4. 3. 哨兵模式的工作原理是什么?

  • 哨兵集群中的哨兵不断地监控Redis实例的状态。
  • 每个哨兵通过发送PING命令来检测Redis实例的存活状态。
  • 如果一个哨兵发现主服务器宕机,它会通过选举算法选出一个新的主服务器,并将这一信息广播给其他哨兵。
  • 其他哨兵收到广播后,也会更新自己的配置,以适应新的主服务器。
  • 客户端可以通过连接任意一个哨兵来获取当前的主服务器地址,并与主服务器建立连接。

4. 4. 如何配置Redis的哨兵模式?

  • 在每个Redis实例的配置文件中设置sentinel参数,指定哨兵模式的相关配置。
  • 启动每个Redis实例,并指定相应的配置文件。
  • 在哨兵集群中的任意一个哨兵上运行redis-sentinel命令,启动哨兵进程。
  • 哨兵进程会自动发现其他哨兵和Redis实例,并开始监控它们的状态。

4. 5. 哨兵模式中的故障转移是如何实现的?

  • 当一个哨兵发现主服务器宕机时,它会向其他哨兵发送选举请求。
  • 哨兵集群中的所有哨兵会进行选举,选出一个新的主服务器。
  • 选举规则通常是根据优先级、最近一次复制偏移量等因素进行评估。
  • 选举完成后,新的主服务器地址会被广播给其他哨兵和客户端。
  • 客户端可以通过连接任意一个哨兵来获取新的主服务器地址,并与其建立连接。

在这里插入图片描述大家好,我是冰点,今天的高可用哨兵机制(Redis Sentinel)详解,全部内容就是这些。如果你有疑问或见解可以在评论区留言。

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

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

相关文章

云原生TDengine-v3.0部署手册

云原生TDengine-v3.0部署手册 一、管理namespace1.1 创建namespace1.2 namespaces列表 二、配置3份yaml文件2.1 tdengine3-storage-class.yaml2.2 taosd-service.yaml2.3 taosd-tdengine.yaml 三、服务部署3.1 部署StorageClass3.2 部署Service3.3 部署StatefulSet3.4 查看启动…

Linux--环境变量

指令分为两种: ①路径指令 比如我们都知道输入ls的作用是显示当前文件及目录,并且ls的路径是/usr/bin/ls。那么我输入ls与/usr/bin/ls的作用是等价的。之所以带路径,是因为不带路径找不到命令 ②系统指令 ls就是嵌入了环境变量后&#xff0c…

C语言程序设计——指针

一、字符指针 字符指针char*两种使用方法: //用法一:指向一个字符变量 char ch a; char* pc &ch; //用法二:指向一个字符串首地址 const char* p "abcde"; //注意p存储的是字符串的首地址,也就是字符a的地址。 …

基于node.js和Vue3的医院信息管理挂号系统

随着时代的发展,无线互联网技术的应用和普及给人们的生活带来了极大的改变,现在信息技术不仅可以提高我们的工作效率,还能有效的规避一些错误风险,节约人力成本。我国国民一方面对健康的要求越来越重视了,另一方面现代人的健康问题日益严重,所以医院信息…

【imarkdown】一个轻量级markdown图片链接转换器

imarkdown imarkdown是一个轻量级markdown图片链接转换器,你可以轻松地对图片链接进行本地到图片服务器、图片服务器到本地、图片服务器到图片服务器的转换。 因为语雀转markdown的时候图片存在防外链行为,如果想要把转出的markdown发表在其他平台&…

电子电路基础知识--电阻

视频教程 薄膜电阻 (包括碳膜电阻、合成碳膜电阻、金属氧化膜电阻、玻璃釉膜电阻)… 碳膜电阻 气态碳氢化合物在高温和真空中分解,碳沉积在蜜挂或者瓷管上,形成一层结晶碳膜。改变碳膜厚度和用刻槽的方法变更碳膜的长度&#…

驱动 day10 作业

要求&#xff1a;platform驱动实现 现象&#xff1a; test.c应用程序 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #in…

Edge浏览器和Google浏览器占用内存情况

最近发现适用edge浏览器看视频时&#xff0c;或者打开多个网页&#xff0c;电脑就会变得非常卡顿&#xff0c;打开任务管理器发现内存占用较多&#xff0c;网上也有人说edge浏览器确实占用内存较多。但是给出的解决方案是更新windows系统&#xff0c;这个方法显然不能接受&…

Modbus tcp转ETHERCAT网关modbus tcp功能码

远创智控YC-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中&#xff0c;实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益&#xff0c;让生产变得更加智能化。远创智控YC-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主…

渗透专题丨Vulnhub-Tr0ll2靶机打靶

确认目标机IP&#xff1a;192.168.38.140 进行端口扫描&#xff1a; 查看一下版本&#xff1a; 没有查到关键信息&#xff0c;以80端口作为突破&#xff1a; 拿到提示信息&#xff1a; 接下来尝试ftp登录&#xff0c;根据提示信息&#xff1a; 登录之后&#xff0c;拿到lmao.z…

线性电源,开关电源

稳压器是如何工作的&#xff1f; 稳压器是这样一种电路&#xff1a;无论输入电压或负载条件如何变化&#xff0c;它都能产生并保持固定的输出电压。 稳压器&#xff08;VR&#xff09;将来自电源的电压保持在其他电气组件相容的范围之内。它最常用于DC / DC电源转换&#xff…

基于亚博K210开发板——串口中断以及开启双核任务

文章目录 开发板实验目的实验准备硬件原理图软件对应SDK对应的头文件 uart.huart.h接口函数高速通用异步收发传输器(UARTHS)对应的头文件 uarths.huarths.h接口函数板级对应的头文件 bsp.hbsp.h接口函数 实验代码实验结果效果 开发板 亚博K210开发板 实验目的 本实验配置串…

vue3中的excel表导出功能(选中导出或导出所有,也可支持vue2)

1.安装模块 npm install xlsx file-saver -S 2.文件导入 import * as XLSX from "xlsx"; import FileSaver from "file-saver" 3.整体代码(可选中导出或导出所有) <template><div><el-button type"warning" click"down&quo…

apt-get install命令

在Linux系统中&#xff0c;apt-get命令默认安装包的位置是在/usr目录下。具体来说&#xff0c;安装的可执行文件会存储在/usr/bin目录下&#xff0c;而库文件会存储在/usr/lib目录下。同时&#xff0c;相应的配置文件和文档等也会存储在/usr/share目录下。 举例&#xff0c;ap…

【计算机系统概论Yale.patt】第三章

文章目录 3.数字逻辑3.1 MOS管3.1.1 p型MOS晶体管3.1.2 n型MOS晶体管 3.2 逻辑门3.2.1 非门——反相器3.2.2 或非门、或门或非门或门 3.2.3 与非门、与门3.2.4 逻辑门符号表示逻辑门的数电表达式摩根定律 3.3 逻辑结构3.3.1 组合逻辑译码器多路复用器全加器可编程逻辑阵列 3.3.…

20230713-------通过platform实现阻塞IO来驱动按键控制LED灯的亮灭

需添加的设备树节点 myplatform{ compatible "hqyj,myplatform"; reg<0X12345678 0X400>; interrupt-parent<&gpiof>; interrupts<9 0>; //9表示引用中断父节点时的索引信息 0表示默认设置 led1<&gpioe 10 0>;pdev.c #include …

linux 安装pytorch3d的坑

事实上&#xff0c;只要按照官方文档的说明就可以完美安装。其中坑的地方在于conda的管理可能会导致下载的版本不符合你的要求&#xff08;例如下载成了cpu版本、下载的cuda版本&#xff09;而同样尝试使用源码编译以及其他方式下载库都会导致同样的问题&#xff0c;这里主要的…

【动手学深度学习】层和块

层和块 简单介绍 块&#xff1a;描述单个层&#xff0c;由多个层组成的组件或整个模型本身。使用块进行抽象的一个好处是可以将一些块组合成更大的组件&#xff0c;这一过程通常是递归的 简单入门 import torch from torch import nn from torch.nn import functional as F# …

【分布式系统案例课】计数服务之需求收集和总架构设计

面试题 对B站视频观看量进行实时的计数 技术问题是一个比较普遍的问题&#xff0c;比如对头条作者的粉丝或者是对获赞进行计数。或者是对企业的业务指标进行计数&#xff0c;例如注册登录下单数这些等。 需求澄清 问题一&#xff1a;用户点击观察视频之后&#xff0c;这个数量…

Gateway网关组件(在Spring Cloud整合Gateway(idea19版本))

Spring Cloud Gateway官网:Spring Cloud Gateway 局域网中就有网关这个概念&#xff0c;局域网接收数据或发送数据都要通过网关&#xff0c;比如使用VMware虚拟机软件搭建虚拟机集群的时候&#xff0c;往往我们需要选择IP段中的⼀个IP作为网关地址,网关可以对请求进行控制,提升…