首页 > 数据库 >Java面试八股之Redis哨兵机制

Java面试八股之Redis哨兵机制

时间:2024-07-15 13:25:38浏览次数:14  
标签:转移 八股 Java Redis 哨兵 故障 节点 客户端

  1. Redis哨兵机制

Redis Sentinel(哨兵)模式是一种高可用解决方案,用于监控和自动故障转移Redis主从集群。以下是对哨兵模式详细过程的描述:

1. 初始化与配置

部署哨兵节点:在不同的服务器上部署一个或多个Redis Sentinel节点,它们作为独立进程运行,负责监控Redis主从集群的状态。

配置监控:为每个哨兵节点配置要监控的主节点(以及其从节点),包括主节点的IP地址、端口、密码(如有)以及监控间隔等参数。

配置哨兵间通信:哨兵节点之间需要通过发布与订阅机制相互通信,以便共享状态信息、进行协商和达成共识。配置哨兵间的心跳检测间隔、通信频道等参数。

配置故障转移参数:设定故障转移所需的条件,如主观下线(SDOWN)和客观下线(ODOWN)的判定条件(如连续多少次心跳检测失败)、故障转移的最小投票数(quorum)、故障转移超时时间、从节点选择策略等。

2. 哨兵监控与心跳检测

周期性监控:每个哨兵节点定期向主节点和从节点发送INFO和PING命令,获取它们的状态信息(如角色、连接数、复制进度等)和确认节点存活。

主观下线(SDOWN):当哨兵节点连续多次无法与某个节点(通常是主节点)建立连接或收到响应时,它会将该节点标记为“主观下线”。此时,该哨兵认为主节点有问题,但尚未与其他哨兵达成一致意见。

3. 故障通知与协商

发送哨兵间消息:标记为主观下线的哨兵节点会向其他哨兵节点发送消息,告知其对主节点的判断。其他哨兵接收到消息后,也会独立地对主节点进行检测。

客观下线(ODOWN):当足够数量(超过配置的quorum)的哨兵都将主节点标记为SDOWN时,主节点被认定为“客观下线”。这意味着大部分哨兵都观察到了主节点的问题,形成了共识。

4. 主节点故障转移

选举领导者(Leader Sentinel):在确认主节点ODOWN后,哨兵节点间启动选举流程,通过Raft或其他类似共识算法选出一个领导者哨兵负责执行故障转移操作。领导者哨兵可能是最先标记主节点ODOWN的哨兵,也可能是在选举过程中获得多数投票的哨兵。

选择新主节点:领导者哨兵根据配置的从节点选择策略(如优先选择复制偏移量最大的从节点,表示数据最完整)从健康的从节点中选择一个作为新的主节点。

执行故障转移:领导者哨兵向选定的从节点发送SLAVEOF NO ONE命令,使其晋升为主节点。同时,通知其他从节点重新配置复制关系,开始从新主节点复制数据。

更新客户端配置:领导者哨兵更新配置,将原主节点的客户端重定向到新主节点,并通过发布哨兵配置变更消息,让其他哨兵和客户端知晓新的主从关系。

原主节点恢复(可选):当原主节点恢复在线时,哨兵会将其自动配置为新主节点的从节点,等待后续可能的手动或自动故障恢复。

5. 健康监测与自动修复

持续监控:哨兵节点持续监控整个Redis集群的状态,包括新主节点和从节点的健康状况。

故障自动修复:如果新的主从关系出现问题(如新主节点故障),哨兵会再次触发故障转移流程,选举新的主节点,确保集群的高可用性。

6. 客户端接入与通知

客户端连接:客户端(应用程序)可以通过哨兵提供的服务发现接口(如SENTINEL get-master-addr-by-name <master-name>)动态获取当前主节点的地址,实现自动连接到正确的主节点。

事件通知:哨兵支持向客户端发送故障转移等重要事件的通知,客户端可以根据这些通知进行相应的处理,如更新本地缓存、重连等。

综上所述,Redis Sentinel模式通过哨兵节点的监控、协商、故障转移等过程,实现了对Redis主从集群的自动化管理和高可用保障。当主节点出现故障时,哨兵能自动识别并触发故障转移,确保数据服务的连续性,同时降低了运维复杂性和人工干预成本。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

标签:转移,八股,Java,Redis,哨兵,故障,节点,客户端
From: https://blog.csdn.net/u012151345/article/details/140436335

相关文章

  • java操作Oracle 方式三 ( 全局一个连接,当操作时发现连接断开了,则再次连接,单线程 )
    全局一个连接,当操作时发现连接断开了,则再次连接,单线程这种方式好处是,全局一个连接,不会每次都发启连接,适用于某一时刻,频繁操作数据库,如:每晚同步数据OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCdrOneConnect.javapackagecom.Ja......
  • java操作Oracle 方式一 ( 连接-》操作-》断开连接 )
    连接-》操作-》断开连接这种方式的特点是每次都是新的连接,单线程,缺点是网络环境不好时连接oracle比较费时。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/18302732完整代码dbCDR.javapackagecom.JavaRabbitMQToDataBase.dbOracle;importjava......
  • java操作Oracle 方式二 ( 多线程 )
    多线程方式 也是 连接-》操作-》断开连接  这样的操作过程,只是采用了多线程这种方式的特点是每次都是新的连接,多线程,解决了网络环境不好时连接oracle比较费时,影响主程序其它功能的响应。OracleUtil.java基础类代码详见:https://www.cnblogs.com/hailexuexi/p/1830273......
  • Linux中使用Docker安装Redis容器以及布隆过滤器
    前言在项目中,一般普遍都会用到Redis,在准备学习Redis的相关的东西时,其中提到了缓存穿透、缓存击穿、缓存雪崩的问题。其中对于缓存穿透的一个解决方案中就有提到布隆过滤器,而布隆过滤器的也有许多提供方式(Guava、Redisson、RedisBloom),前面都是基于本地的,所以就选择了Redis官方......
  • java连接oracle执行sql语句
    一个简单的示例importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassOracleJdbcExample{publicstaticvoidmain(String[]args){//Oracle数据库的JDBCURL,用户名和密码......
  • Java计算机毕业设计教学资料管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在教育信息化的大潮中,教学资料作为知识传播的重要载体,其管理与利用效率直接影响到教学质量与学生学习效果。传统的教学资料管理方式多依赖于纸质文档......
  • 关于java装饰器模式在ai生成举例不可用的问题
    定义首先描述下定义,然后举例说明。网上定义装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许向对象添加新的功能或职责,同时保持对象类的原始结构。这种模式提供了一种替代继承的机制来扩展功能,因为继承通常是在编译时固定的,而装饰器模式则允许在运行时动态地添加......
  • Java中的静态与动态绑定
    Java中的静态与动态绑定大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!静态与动态绑定的基本概念在面向对象编程中,静态绑定(StaticBinding)和动态绑定(DynamicBinding)是Java中重要的概念。本文将深入探讨这两种绑定方式的特点、使用场景以及在实际开发中......
  • Java毕业设计-基于springboot开发的医院后台管理系统设计与实现-毕业论文(附毕设源代码
    https://download.csdn.net/download/u014740628/88922529医院后台管理系统设计与实现应用技术概述在信息时代背景下,医院后台管理系统的开发成为提升医疗信息处理效率的关键。本文介绍的系统采用B/S架构,结合了MySQL数据库和Java语言进行实现,确保了系统的稳定性和数据的安......
  • Java中的装箱与拆箱详解
    Java中的装箱与拆箱详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!装箱与拆箱的基本概念在Java中,装箱(Boxing)和拆箱(Unboxing)是指将基本数据类型与它们对应的包装类之间进行相互转换的过程。Java为每种基本数据类型提供了对应的包装类,如Integer对应in......