首页 > 其他分享 >动态监控主动上位-哨兵(Sentinel)

动态监控主动上位-哨兵(Sentinel)

时间:2025-01-20 18:56:36浏览次数:3  
标签:故障 Redis 哨兵 上位 实例 Sentinel 节点 客户端

动态监控主动上位

在 Redis Sentinel 的高可用架构中,动态监控主动上位(通常称为 故障转移自动故障转移failover)是 Sentinel 执行的一个关键流程,它确保在主节点出现故障时,自动将某个从节点提升为新的主节点,从而保证 Redis 服务的持续可用性。下面我们将详细介绍 Sentinel 中的 AP(主动上位)流程,即 Sentinel 在监控到主节点不可用时,如何进行故障转移,选举新的主节点。

哨兵(Sentinel)AP流程概述:

  1. 动态监控:Sentinel 实例定期监控 Redis 主节点和从节点的健康状态。
  2. 检测主节点故障:当 Sentinel 发现主节点出现故障(如响应超时、掉线等),会开始故障转移(failover)流程。
  3. 发起选举:多个 Sentinel 实例协同工作,通过投票选举出一个新的主节点。
  4. 提升从节点:一旦选举完成,Sentinel 会将选定的从节点提升为新的主节点。
  5. 更新配置:所有其他 Sentinel 实例和从节点都会得到新的主节点信息,确保系统的一致性。
  6. 通知客户端:客户端通过 Sentinel 获取当前主节点的信息,确保它们连接到新的主节点。

Sentinel AP流程的详细步骤:

1. 动态监控

Sentinel 会定期监控所有的 Redis 实例(包括主节点和从节点)。它使用 PING 命令(或类似的心跳机制)来检测 Redis 实例是否健康。当 Sentinel 检测到主节点响应超时,或者主节点在一定时间内无法正常工作时,它会认为该主节点出现了故障。

  • 心跳检查:Sentinel 每隔一段时间(如 sentinel down-after-milliseconds 参数设置的时间)检查主节点是否响应。如果超过该时间限制,Sentinel 会认为主节点不可用。
2. 主节点故障检测

当 Sentinel 发现主节点失联时,它会开始进入故障转移流程。此时,Sentinel 会进行以下操作:

  • 判断故障:一个 Sentinel 实例可能会先检测到故障,但这并不足够,因为一个 Sentinel 实例的判断可能会因为网络问题或其他原因而不准确。为了避免错误判断,Sentinel 采用 多数投票机制。只有当超过半数的 Sentinel 实例都认为主节点故障时,故障才会被确认。
  • 超时配置:如果主节点的响应超时超过配置的阈值(如 sentinel down-after-milliseconds),Sentinel 会将其标记为不可用(subjectively-down)。此时,其他 Sentinel 实例也会通过通信确认这一点。如果多数 Sentinel 实例一致认为主节点故障,主节点将被标记为 客观故障(objectively-down),然后进入故障转移阶段。
3. 发起故障转移选举

一旦主节点被标记为故障,Sentinel 将启动 选举机制来选出新的主节点。此时,Sentinel 会:

  • 选举机制:多个 Sentinel 实例将基于以下条件进行选举:
    • 选举过程中,参与投票的 Sentinel 实例会投票支持某个从节点成为新的主节点。
    • 该从节点必须满足条件,比如它已经同步了足够的数据、它与主节点的同步延迟较小等。
    • Sentinel 会根据当前从节点的复制状态(如复制延迟)来进行选择,通常选择数据同步较为完整、延迟较小的从节点。
  • 选举规则:选举过程中,投票的规则是,超过半数的 Sentinel 实例同意后,才认为某个从节点成为新的主节点。只有获得多数支持的从节点才会被提升为主节点。
4. 提升从节点为主节点

一旦选举产生新的主节点后,Sentinel 会执行以下操作:

  • 提升从节点:选举成功后,Sentinel 会将选定的从节点提升为主节点,并将它的角色从 slave(从节点)切换为 master(主节点)。
  • 同步其他从节点:新的主节点开始接受客户端请求,同时,原来作为从节点的 Redis 实例也会开始同步新的主节点。其它的从节点会向新的主节点进行同步。
5. 更新配置与同步

故障转移成功后,Sentinel 会通知所有其他节点,包括原先的从节点和新的主节点,确保它们都知道新的主节点信息:

  • 更新从节点配置:所有从节点将被重新配置,以便它们从新的主节点进行同步。
  • 广播通知:Sentinel 会通过广播更新主节点信息,让所有 Sentinel 实例、从节点以及客户端都能快速知晓新的主节点地址。
6. 客户端的重新连接

客户端在访问 Redis 时通常不会直接连接 Redis 实例,而是通过 Redis Sentinel 获取当前主节点的地址。故障转移完成后,客户端会通过 Sentinel 获取到新的主节点地址,并重新连接到新的主节点,保证服务的持续性。

  • 客户端自动切换:在 Redis 客户端中,通常会集成对 Sentinel 的支持。当主节点发生故障转移时,客户端可以通过 Sentinel 获取新的主节点信息,自动切换到新的主节点上进行操作。
7. 恢复监控与后续操作

当故障转移完成后,Sentinel 会继续监控新的主节点和从节点的状态,确保整个系统的稳定性。在原主节点恢复时,它将不会自动恢复为主节点,而是会作为一个从节点重新加入系统,开始向新的主节点同步数据。

Sentinel 故障转移的优点和挑战:

优点:
  • 自动化:Sentinel 提供了自动故障转移的机制,极大降低了人工干预的需求,提高了系统的可靠性。
  • 高可用性:通过自动监控、故障检测和选举机制,Sentinels 可以有效地保证 Redis 的高可用性,即使在发生故障时,Redis 服务也不会中断。
  • 无缝切换:客户端通过 Sentinel 获取当前主节点的地址,当故障转移发生时,客户端可以自动切换到新的主节点,保证业务的连续性。
挑战:
  • 选举延迟:由于 Sentinel 必须通过选举机制来确定新的主节点,这个过程可能会有一定的延迟,尤其是在网络环境较差或 Sentinel 实例较多的情况下。
  • 数据丢失:虽然故障转移会尽量选择同步数据最完整的从节点,但在某些情况下(例如网络延迟或同步状态不同步),可能会有少量数据丢失。
  • 配置同步问题:当主节点发生故障时,虽然 Sentinel 会更新从节点配置,但如果客户端未能及时更新主节点信息,可能会导致部分客户端连接到旧的主节点,从而导致访问失败。

总结

Redis Sentinel 的 AP(主动上位)流程 是确保 Redis 系统高可用性和无缝服务的重要机制。当 Redis 主节点出现故障时,Sentinel 会自动检测并启动故障转移,选举一个新的主节点,确保 Redis 服务继续正常运行。这个过程包括故障检测、选举、从节点提升为主节点、同步配置更新以及客户端切换等步骤,从而保证了 Redis 的高可用性。

标签:故障,Redis,哨兵,上位,实例,Sentinel,节点,客户端
From: https://blog.csdn.net/weixin_47654264/article/details/145267818

相关文章

  • 实例1--C#上位机+后台C应用线程
    实例1C#上位机+后台C应用线程目录实例1C#上位机+后台C应用线程1. 需求1.1 使用场景1.2 关联工具1.3 实例需求概述1.4 实现步骤设计2. C/C++项目2.1 创建项目2.2C/C++代码2.3生成DLL3. C#项目3.1 新建项目3.2窗体UI控件设计3.3C#代码3.4配......
  • 【Java】若依(ruoyi-cloud)——14.Sentinel支持(服务熔断与降级)
    若依微服务版(ruoyi-Cloud)如何实现熔断和降级?知识前提:对Sentinel的使用有了解若依微服务版启动对nacos服务注册和使用有了解若依微服务版(ruoyi-cloud)中使用sentinel,进行服务熔断与降级。环境要求和前提JDK>=1.8(推荐1.8版本)Mysql>=5.7.0(推荐5.7版本)Redis>=......
  • 一文读懂Redis之哨兵(Sentinel)模式搭建
    目录一、环境规划二、Redis服务主从模式搭建步骤一、Master节点创建目录步骤二、Master节点下载Redis安装包步骤三、Master节点解压Redis安装包步骤四、Master节点进行make编译步骤五、Slave01节点、Slave02节点根据步骤一至步骤四安装Redis服务步骤六、Master节点修......
  • Sentinel
    目录1.官网2.概念2.1.核心库(java客户端)2.2.控制台(Dashboard)3.安装控制台3.1.默认端口80803.2.下载jar包3.3.运行jar包4.控制台4.1.菜单说明4.2.规则持久化问题5.微服务如何整合5.1.pom加入依赖5.2.如何让资源(方法)受保护5.3.application.yml添加sentinel控制台......
  • C#上位机通过CAN总线发送bin文件
    让gpt生成一段代码用来把bin文件通过can总线发出去c#代码还是比较强大的,各种功能基本都是一两行代码就实现了,这里记录一下对这个代码的理解和解读主要代码如下,传入bin文件的地址即可将其从指定的can通道发送出去:publicvoidSendBINFile(stringbinFilePath){if(!File.......
  • 上位机操作篇---Linux常用命令
    第二章Linux常用命令(简介)常用命令及其简介第二章Linux常用命令(简介)@[TOC](常用命令及其简介)前言第一部分:基础命令一、pwd二、ls或者ls[选项][目录名]三、cd四、clear或者crtl+l第二部分:文件操作一、touch二、mkdir三、cp四、mv五、rm第三部分:文本操作一、......
  • redis-7.4.2哨兵随记
    ###########################redis.conf7.4.2主从################################http://download.redis.io/releases/redis-7.4.2.tar.gztarxfredis-7.4.2.tar.gzcdredis-7.4.2makemakeinstallPREFIX=/usr/local/ccdt/redis_7.4.2/redis36379makeinsta......
  • Sentinel服务保护 + Seata分布式事务
    服务保护【雪崩问题】微服务调用链路中某个服务,引起整个链路中所有微服务都不可用。【原因】:微服务相互调用,服务提供者出现故障。服务调用这没有做好异常处理,导致自身故障。调用链中所有服务级联失败,导致整个集群故障。【解决方案】:请求限流、线程隔离、服务熔断【服......
  • 【开源】C#上位机必备高效数据转换助手
    一、前言大家好!我是付工。我们在进行上位机开发时,从设备端获取到的数据之后,需要进行一定的数据处理及转换,才能生成我们需要用的数据。这其中就涉及到了各种数据类型之间的相关转换,很多非科班出身的电气工程师,经常会因为弄不清楚各种数据类型之间的转换关系,导致无法获取到自己想......
  • 上位机能不能替代PLC呢?
    一、前言大家好!我是付工。之前有个学员问了这样的一个问题:学会了上位机,是不是就可以不用PLC了呢?今天跟大家分享一下上位机能不能代替PLC?二、网络架构首先我们看下这张网络架构图。从图中可以看到:上位机属于过程监控层,PLC属于现场控制层。PLC作为下位机,上位机与下位机进......