什么是Redis哨兵机制?

大家好,我是锋哥。今天分享关于【什么是Redis哨兵机制?】面试题。希望对大家有帮助;

什么是Redis哨兵机制?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Redis 哨兵(Sentinel)机制是 Redis 提供的一种高可用性(HA)解决方案,用于实现 Redis 的故障检测、自动故障转移(failover)和通知功能。哨兵机制能够在主 Redis 节点发生故障时自动将某个从节点提升为新的主节点,并将客户端指向新的主节点,保证 Redis 集群的持续可用性。

主要功能

Redis 哨兵机制具备以下几个核心功能:

  1. 故障监测(Fault Detection)
    哨兵系统会持续监测 Redis 主节点和从节点的健康状态。通过定期与主节点和从节点进行通信(PING),如果某个节点失去响应或出现其他故障,哨兵将会识别出来。

  2. 自动故障转移(Automatic Failover)
    一旦主节点发生故障,哨兵会自动选择一个健康的从节点提升为新的主节点,并将其它的从节点指向这个新的主节点。这样保证了 Redis 集群的高可用性,避免了单点故障。

  3. 通知功能(Notification)
    当 Redis 集群发生故障或状态变化时,哨兵机制会通过发布订阅系统通知外部系统或管理员。例如,当主节点发生故障并进行故障转移时,哨兵会发送通知。

  4. 配置管理(Configuration Provider)
    哨兵可以充当配置提供者,客户端可以通过哨兵获取当前集群的主节点地址,而不需要依赖固定的主节点地址。这使得客户端能够在主节点变更时自动更新连接目标。

哨兵架构

Redis 哨兵是通过一个或多个哨兵实例来运行的。它们共同工作,以保证高可用性。每个哨兵实例是一个独立的 Redis 进程,通常部署在多个机器上,彼此之间相互通信。以下是一个典型的 Redis 哨兵架构:

  1. 主节点(Master):负责处理所有的写操作和一些读取操作。
  2. 从节点(Slave):从主节点复制数据,通常负责处理读取操作。一个主节点可以有多个从节点。
  3. 哨兵节点(Sentinel):负责监控主节点和从节点的状态,发现故障时执行故障转移。

哨兵工作流程

1. 故障检测

哨兵会定期检查主节点和从节点的健康状态。每个哨兵实例都会向其他节点发送心跳(PING)信号,如果某个节点在设定时间内没有回应,哨兵会认为该节点发生了故障。多个哨兵实例会相互确认,以避免单个哨兵的误判。

2. 选举新的主节点

如果主节点故障,哨兵会选举一个从节点提升为新的主节点。这个过程如下:

  • 哨兵会对所有从节点进行评估,选择一个最合适的从节点来作为新的主节点。通常选择那些与主节点最新同步的从节点。
  • 哨兵会通过发布订阅机制通知其它从节点和客户端,新的主节点已经被选举出来。
3. 更新配置

一旦新的主节点被选举出来,哨兵会通知集群中的从节点将新的主节点作为复制源,并同步它们的数据。客户端也可以通过哨兵获取到最新的主节点信息。

4. 客户端更新

客户端通过向哨兵查询来获取主节点的地址,当主节点发生故障转移后,哨兵会将新的主节点信息告知客户端,确保客户端能够连接到最新的主节点。

哨兵集群配置

在生产环境中,为了确保 Redis 哨兵的高可用性,通常会部署多个哨兵节点。推荐部署至少 3 个哨兵节点,这样可以避免因单点故障导致的集群不可用。

示例配置:

在 Redis 哨兵的配置文件中,我们可以指定哪些主节点和从节点是需要监控的。例如:

# sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster yourpassword
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
  • sentinel monitor:指定哨兵需要监控的主节点(mymaster)。该指令中的 127.0.0.1 和 6379 是主节点的 IP 和端口,2 是表示有多少个哨兵节点需要确认主节点故障才认为主节点真的宕机。
  • sentinel auth-pass:设置访问主节点的认证密码。
  • sentinel down-after-milliseconds:指定在检测到主节点宕机前等待的时间(单位:毫秒)。如果主节点在 30000 毫秒内没有响应,认为它已宕机。
  • sentinel failover-timeout:设置故障转移的超时时间。

使用哨兵的好处

  1. 高可用性:Redis 哨兵机制能够在主节点故障时自动进行故障转移,保证系统的高可用性。
  2. 自动恢复:当主节点恢复正常后,它可以重新成为从节点,继续从新的主节点同步数据,避免人工干预。
  3. 无单点故障:部署多个哨兵节点可以避免单点故障,保证监控和故障转移的高可用性。
  4. 动态配置:通过哨兵机制,客户端能够动态获取当前集群的主节点地址,简化了客户端配置。

限制与挑战

尽管 Redis 哨兵机制提供了高可用性和故障转移功能,但也有一些限制:

  1. 数据丢失风险:在故障转移过程中,可能会丢失部分写操作,因为 Redis 哨兵并不保证事务性的数据一致性。
  2. 需要多个哨兵实例:为了避免因单点故障导致监控失败,至少需要部署 3 个哨兵节点,这增加了部署和维护的复杂性。
  3. 网络分区问题:在网络分区或多个故障的情况下,哨兵可能无法正确地判断哪个节点是主节点,从而导致集群的不一致或分裂。

总结

Redis 哨兵机制通过自动化的故障检测和故障转移,确保 Redis 集群的高可用性。它可以自动监控 Redis 节点的状态,在主节点宕机时自动选举一个从节点作为新的主节点,并更新客户端和从节点的配置,从而保证 Redis 服务的持续可用性。虽然 Redis 哨兵提供了强大的高可用性支持,但它也存在一些挑战,特别是在数据一致性和网络分区等方面。

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

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

相关文章

全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享

全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享 这是“和鲸杯”辽宁省普通高等学校本科大学生计算机设计竞赛启动会汇报—大数据主题赛的文档总结。想要参加2025年此比赛的可以借鉴。 一、关于我 人工智能专业 计赛相关奖项: 2022年计…

STM32 + 移远EC800 4G通信模块数传

一、4G模块简述 EC800M-CN 是移远通信(Quectel)推出的一款高性能、超小尺寸的 LTE Cat 1 无线通信模块,专为 M2M(机器对机器)和 IoT(物联网)应用设计。它具有以下主要特点: 通信速率…

标准库以及HAL库——按键控制LED灯代码

按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…

springboot525基于MVC框架自习室管理和预约系统设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装自习室管理和预约系统软件来发挥其高效地信息处理的作用&am…

Unity Canvas中显示粒子特效

首先在场景中新建一个粒子特效 修改一下参数 1.改变粒子特效的渲染层级,层级修改为UI层,由UI相机渲染 使用粒子特效的Sorting Layer ID和Order In Layer,Sorting Layer ID设置为UI(如果没有UI层则新建就好了),对UI进行排序 对于要显示在前的UI组件添加Canvas组件,设置O…

Linux下部署Redis集群 - 一主二从三哨兵模式

三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署,使用一主二从三哨兵集群部署redis,将自己部署的过程中的使用心得分享给大家,希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 ,确定主redis和从red…

服务器端请求伪造之基本介绍

一.服务器端请求伪造漏洞基础 1.客户端请求 客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输…

akamai3.0反爬教程逆向分析9个视频汇总

目录 一、akamai2.0文章二、akamai3.0每月疑似改版点二、9个视频汇总如下 一、akamai2.0文章 文章1cookie反爬之akamai_2.0-上文章2cookie反爬之akamai_2.0-上文章3cookie反爬之akamai_2.0-上文章中akamai2.0对应调试html与js文件 二、akamai3.0每月疑似改版点 详细文字与2.…

2024年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. C.

【74LS160+74LS273DW锁存器8位的使用频率计】2022-7-12

缘由 想知道这个数字频率计仿真哪里出现错误了,一直无法运行哎,如何解决?-运维-CSDN问答

系统思考—信任

《基业长青》作者指出:“在人生的重要十字路口,选择信任是一场赌注。信任带来的好处可能巨大,而失去信任的代价却相对有限。但如果选择不信任,最优秀的人才可能因失望而离开。” 在企业管理中,信任不仅是人际关系的纽…

推理加速:投机采样经典方法

一 SpecInfer 基于模型 SpecInfer([2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification) SpecInfer 投机采样利用多个小型模型(SSM)快速生…

深入理解Java中的Set集合:特性、用法与常见操作指南

一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①:add(Object o):向Set集合中添加元素,不允许添加重复数据。 ②:size():返回Set集合中的元素个数 ③.remove(Object o): 删除Set集合中的obj对…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

开源架构的容器化部署优化版

上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…

Datawhale AI冬令营(第二期)动手学AI Agent--Task3:学Agent工作流搭建,创作进阶Agent

目录 一、工作流:制作复杂Agent的福音! 二、支付宝百宝箱中工作流介绍 三、设计工作流 3.1 准备功能模块 3.2组合工作流 3.3 模块测试需要注意什么 3.4迭代优化 四、高中学习小助手工作流设计 4.1 选题调研 4.2 功能模块设计 4.3 组合完整工作…

Postman[8] 断言

1.常见的断言类型 status code: code is 200 //检查返回的状态码是否为200 Response body: contain string //检查响应中包含指定字符串包含指定的值 response body:json value check/ /检查响应中其中json的值 Response body: is equal to string …

python openyxl 用法 教程

Python自动化办公:openpyxl教程(基础)-CSDN博客 https://zhuanlan.zhihu.com/p/342422919 https://openpyxl-chinese-docs.readthedocs.io/zh-cn/latest/tutorial.html 列标题,是这一列 对应的单元格的格式,默认是常规,设置之后…