Redis: Sentinel工作原理和故障迁移流程

news2024/12/24 8:08:01

Sentinel 哨兵几个核心概念


1 ) 定时任务

  • Sentinel 它是如何工作的,是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的
  • 就是通过它的一系列定时任务来做到的,它内部有三个定时任务
    • 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点执行 PING 操作(监控)
      • 这是一个心跳检测是失败判定的一个依据
      • 我给你一个 PING, 你必须在有效时间内给我一个 PONG, 否则我认为你出问题了
    • 第二个就是每2秒每个 Sentinel 通过 Master 节点的 channel 交换信息 (Publish/Subscribe)
      • Redis 它实际上也有发布订阅的这种模式
      • Master主节点会开启这个功能, 通过信道拿到我们节点的交换信息
    • 第三个定时任务就是每 10 秒每个 Sentinel 会对 Master 和 Slave 执行 INFO 命令
      • info命令,下边有CPU的使用率,内存使用情况
      • 包括它服务节点的信息,主从信息集群信息等等
      • info replication 只是 info 下面的一个子集
      • 所以说 info 命令是可以拿到一个完整的REDIS当前环境及节点的一个状态信息的
      • 主要的目的就是要确认主从关系,然后就是及时的发现可用的 Slave 节点
      • 比如现在并发很高,一主两从已经支撑不了了,再添加一个从节点又可以分散一部分流量
      • 并发上来了,我们只需要不停的添加从节点就可以了
      • 我添加了从节点 Sentinel 也要感知到这个从节点
      • 相当于把它添加的这个监控环境里边,它通过 info 命令来完成

2 )主观下线 (Subjectively Down, 简称 SDOWN)

  • Sentinel 的作用就是监控主从环境,发生故障的时候,能及时的做故障转移
  • 重新选取主节点顶上来继续提供服务,这个时候就会有一个问题,怎么识别你就故障了
  • 现在有3个 Sentinel,难道说其中一个认为它故障了就要发起故障转移重新选举吗?
  • 当然不是,它是有一个过程的,先经过主观下线,再到客观下线,客观下线是依据仲裁的参数,满足之后才会标记为客观下线
  • 主观下线,指的是单个 Sentinel 实例对服务器做出的下线判断,即单个 Sentinel 认为某个服务下线,有可能是接收不到订阅,之间的网络不通等等原因
  • 就是说我现在认为你连不上了,我把你标记为主观下线,这个连不上是怎么认定的?
    • 其实就是刚才我们说的那个定时任务,我现在给你 PING, 你给我返回 PONG
    • 之前,我们配置了一个 down-after-milliseconds
    • 如果在这个时间内,你都没有做有效的返回, 我就认为你故障了
    • 我就会把你标记为主观下线
  • 当我把你标记为主观下限之后,我会去找其他的 Sentinel 来确认你是是不是主观下线
  • 也就是说一个 Sentinel 把一个主节点标记为主观下限了
  • 它就会让环境里边其他的 Sentinel 去对它做出判断,确认它是不是真下线
  • 其他的 Sentinel 就开始去跟这个 Master 主节点进行通行,仍然基于 PING, PONG 的机制来检测
  • 当超过其一半数量都认定下线,则满足仲裁的条件,这样就会被标记为客观下线

3 ) 客观下线 (Objectively Down, 简称 ODOWN)

  • 客观下线,是指多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,互相交流之后,得出的服务器下线判断,然后开启 failover,就是故障迁移

4 ) 仲裁

  • 这个仲裁其实非常简单,就是少数服从多数,只要有一半以上都认为Master下线了,则就认定其下线
  • 当配置文件中的 quorum 选项的值一般设定为 q = s / 2 + 1,s 是服务器总数的意思
  • 只要有一半以上认定主观下线,则就是客观下线,仲裁成功,开启 failover 进行故障迁移

Sentinel 哨兵工作原理

1 )每秒 PING

  • 每个 Sentinel 以每秒一次的频率会向它所知的 Master / Slave 以及其他的 Sentinel 节点
  • 发送一个 PING 命令来判断它是不是可通性的, 还有没有存活

2 ) 有效回复 PING 命令的时间超过配置文件 down-after-milliseconds 选项所指定的值会被定为主观下线

  • 当我 PING 过去,你回复 PONG 的时间是超过的这个时间
  • 或者说在这个有效时间内没有返回,或者说你给我返回的错误
  • 我都认为你是主观下线了

3 )确认主观下线状态

  • 主观下线之后,正在监视这个 Master 的其他 Sentinel
  • 就会每秒一次的去确认这个 Master 是不是真的进入主观下线了

4 ) 满足条件,客观下线

  • 如果足够数量的 Sentinel,在指定的时间范围内确认了 Master确实是进入了主观下线
  • 它会标记为客观下线,被标记为客观下线之后,就会进入投票环节

5 )投票选举主节点,从节点复制数据

  • 这个时候 Master 处于 ODOWN 客观下限状态,就会投票自动选取新的主节点
  • 这个地方选举的时候,它还会去做一些过滤,有一个相关的配置是决定
  • 从节点晋升为主节点的优先级,那个配置项,如果你把它改为零,这个从节点永远不会变为主节点
  • 如果你把它调的很大,它被选为主节点的几率就很大,优先级就很高
  • 它就先去看那个配置项,谁的优先级高,先选谁,优先级相同
  • 继续看下一个判定,下一个判定是 偏移量,哪个偏移量最大则选举哪一个为主节点
  • 如果偏移量相同,再去看 run_id 小的会被晋升为主节点
  • 这里边还会有一系列的操作,把它选定主节点之后
  • 其他的从节点会指向这个新的主节点继续进行数据的复制同步

6 )主节点被标为客观下线时, INFO 的命令触发由10s一次改为1s一次

  • 原来我们的环境复稳定的,我十秒执行一次 info 目的很简单
  • 就是看看有没有新加进来的从节点或者 Sentinel,要把新成员添加到我的监控环境里边
  • 而现在都已经故障了, 发起了故障转移,重新选举了
  • 我需要在最短的时间内把环境稳定下来最好,所以有这个时间的调整
  • 我要快速的把可用的从节点全部都给它收集过来,把这个主从的关系确认下来稳定下来

7 )冲裁失败后的状态恢复

  • 若没有足够数量的 Sentinel 同意 Master进行下线,客观下线的状态会被移除
  • 如果 Master 重新向 Sentinel 的PING命令返回有效回复,Master的主观下限也会被移除

故障转移演示

  • 首先,启动好3台Redis 和 3个 Sentinel
  • 在主节点Master机器上执行 $ SHUTDOWN 命令关机
  • 这时候就会触发Sentinel的仲裁和投票,可以通过查看各个服务器 sentinel.log 日志来看到整个过程
  • 同时,因为主从被修改了,相关机器上的配置文件也会被同步修改为服务当前主从关系的配置
  • 要注意,被修改过的配置文件中,会有ACL安全策略,这个是Redis@6之后的新特性
  • 这个是权限管理相关功能,为了安全来设置的,为不同用户授予不同的数据和操作权限
  • 这个可以自行进行操作来对日志,配置文件的分析

图解自动故障迁移流程

  • 现在的环境是主从的环境,一主两从,然后配了3个 Sentinel 哨兵
  • 经过一次故障迁移之后,102 变成主节点,101 和 103 变成从节点
  • Sentinel哨兵,它内部会有一些定时任务,这个定时任务分为三种
    • 第一种就是每一秒对我们的主从和其他的 Sentinel,发送 PING 命令
      • 这个心跳检测是失败判定的依据
      • 如果对方没有办法在有效的时间内给我返回,我就认为对方出问题了
    • 第二种就是每两秒,每个 Sentinel 会通过 Master Channel 来交换信息
      • 就发布订阅的那个channel信道交换信息
    • 第三种就是每十秒会对 Master/Slave 执行 info 命令
      • 来确认主从关系和及时发现可用的slave节点
  • 一开始,Sentinel 现在监控主节点是由之前在 Sentinel 的配置文件里边的配置
    • 如:sentinel monitor mymaster 192.168.10.102 6379 2
    • 这些什么意思,大家都应该知道
  • 接着往下看,PING 的时候超时,或者返回错误,是哪个配置来决定的呢?
    • 是下面这个 down-after-milliseconds
      # Sentinel认为服务器已经断线所需的毫秒数 默认值是30秒 这里改成10秒 PING PONG 中 返回 PONG 的时间
      sentinel down-after-milliseconds mymaster 10000
      
    • 就是我这个命令令出去之后,你在这个有效时间内返回才是OK的
    • 超出这个时间,我认为你出问题了,要么故障了,要么宕机异常错误了
    • 反正总而言之,我认为你现在不可用了
    • 这里配的是十秒,它是一万毫秒
    • 如果大于十秒,我都没有接收到这个PONG, 没有拿到一个有效的反馈,我认为你出问题了
  • 这个时候只是单个的 Sentinel 认为它出问题了,会把它标记为主观下线
    • 一个Sentinel把它标为主观下线之后,其他的 Sentinel 就要去确定目标是否真的下线
    • 满足 quorum 仲裁值之后,它会被标记为客观下线,之后,目标节点就要开始执行故障迁移
    • 在日志中可以明确看出这个流程,它会发起一个新的选举主节点的流程
  • 但是故障迁移选举主节点这一系列的工作,不是说这三个 Sentinel 都去做
  • 只需要有其中一个来做成这个事情就行了,它是通过 raft 算法来选取一个leader领导者
    • 就是选一个领导者去做故障迁移这件事儿
    • 于是,他们就开始投票,raft算法可以保证在同一时间只会生成一个领导者
    • 也就是说故障迁移,只会在当前环境下存在一个节点去做这件事情
    • 就保证了我们的一致性,不会出乱子
  • 选举出来之后,有一个人他就会去执行故障迁移,执行的过程中
    • 它会先从环境里边找到满足条件的slave
    • 首先看优先级配置,优先级高的会选为主节点
    • 如果出现了多个优先级相同的,再看偏移量
    • 偏移量大的被选为主节点,偏移量相同的,再往下比 run_id 比较小的
    • 最终找到一个合适的slave,然后就要等其他的slave确认完
    • 我们会给他执行一系列的操作
      • 如说 slaveof no one,就是关闭它的复制
      • 修改环境下其他节点的配置,建立新的主存关系
      • 之后,其它的从节点点会把自己的数据都丢掉,然后重新复制它
      • 这个时候,就SYNC发起全量复制新的主节点里边的数据
      • 然后 Sentinel节点 集合在这里做一个更新,又恢复到正常工作,开始监控新的master
  • 后续如果再出现了故障迁移,又是这样的一个流程
    • 就是主观,客观,然后再选举leader
    • 然后再找到合适的 slave 把它改成master
    • 然后确认,然后再去全量复制等等
  • 这就是自动故障迁移的一个流程,关键几点如下
    • 配置文件里 Sentinel monitor 监控的是谁
    • down-after-milliseconds 决定定这个PING和PONG超时的一个时间间隔
    • quorum 就是 仲裁的那个值
    • 还有 fallover-timeout,整个的迁移流程会有个有效时间
      sentinel failover-timeout mymaster 180000
      
    • 在这个有效时间内,迁移还没有完成,直接就把这个工作/进程就终止了
    • 就会重新发起一次迁移,防止卡住和阻塞
    • 这个配置默认是18万毫秒,180秒, 三分钟

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

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

相关文章

浏览器 F12 application 应用程序面板

在大多数现代浏览器中,按下 F12 键会打开开发者工具(Developer Tools),这是一个为开发者设计的强大工具集,用于调试网页和应用。在开发者工具中,“Application”(应用程序)面板提供了…

Hystrix学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

Stable Diffusion绘画 | 来训练属于自己的模型:LoRA模型验收

我们每次训练出来的模型,一般都会生成 20-30 个,至于哪个模型符合要求,较为理想呢? 接下来需要对每个 LoRA模型 进行逐一对比测试。 为了测试模型的泛化性,可选择使用一些较为特殊的提示词,看看各个模型对…

运动耳机哪个牌子的好?5大质量不凡的运动耳机测评力荐!

在快节奏的生活中,无论是晨跑、健身还是户外探险,音乐都成了许多人不可或缺的陪伴。运动耳机,作为一种专为运动场景设计的音频设备,旨在提供高质量音频体验的同时,保证佩戴的舒适度和运动的安全性。 (上图为…

hystrix微服务部署

目录 一.启动nacos和redis 1.查看是否有nacos和redis 二.开始项目 1.hystrix1工程(修改一下工程的注册名字) 2.运行登录nacos网站查看运行效果(默认密码nacos,nacos) 3.开启第二个项目 hystrix2工程 4.关闭第二个项目 hyst…

硬件-示波器测开关电源-炸机经验-隔离变压器

一:常见疑问术语 1.1 示波器被烧了,测试的电源板炸了 1.2 把示波器的电源三脚的地那端拔掉? 1.3 隔离变压器是什么? 1.4 上述操作可以用差探头实现,差分探头是什么? 二:实际案例失误操作 2.1 炸…

MySQL基础篇 - 事务

01 事务的简介 【1】什么是事务:事务是一组操作集合,要么同时操作成功,要么同时操作失败。 【2】对于MySQL数据库来说默认一条SQL语句就是一个事务,且事务是默认自动提交的。 我们可以把多条SQL语句设置成一个事务,使…

pod管理及优化

一、k8s中的资源 1、资源介绍 [rootk8s-master ~]# kubectl --namespace timinglee get po No resources found in timinglee namespace. [rootk8s-master ~]# kubectl run testpod --image timinglee/nginx [rootk8s-master ~]# kubectl get pods -w NAME READY STATU…

AI大师工坊丨国庆节去哪玩?让旅游规划大师助你一臂之力

文章目录 零、写在前面一、旅游规划大师二、如何创造自己的智能体三、写在后面 零、写在前面 听说由百度文心智能体平台主办,万众瞩目的 AI大师工坊招募令 启动啦! 在本期大师工坊中,博主开发了一款超级实用的智能体:旅游规划大…

MySQL 启动失败 (code=exited, status=1/FAILURE) 异常解决方案

目录 前言1. 问题描述2. 查看错误日志文件2.1 确认日志文件路径2.2 查看日志文件内容 3. 定位问题3.1 问题分析 4. 解决问题4.1 注释掉错误配置4.2 重启 MySQL 服务 5. 总结结语 前言 在日常运维和开发过程中,MySQL数据库的稳定运行至关重要。然而,MySQ…

Framebuffer学习

目录 1. Framebuffer概念2. LCD操作原理3. 源码分析3.1 打开设备3.2 获取LCD参数3.3 映射Framebuffer3.4 描点实现 基于韦东山IMX6ULL开发板学习 参考教程: 韦东山老师教程 1. Framebuffer概念 Framebuffer,可以译作“帧缓冲”,有时简称为fb…

“衣依”服装销售平台:Spring Boot技术实践与创新

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】 一、上篇回顾二、项目准备2.1 准备模板项目2.2 支持计时功能2.3 配置UART4引脚2.4 支持printf重定向到UART42.5 支持printf输出浮点数2.6 支持printf不带\r的换行2.7 支持ccache编译缓存 三、TFLM集成3.1 添加tfli…

记录win11 蓝屏修复

1原因: win11 edge 的浏览器异常 打开新窗口的广告 打不开显示网络未连接下载驱动精灵 下载驱动要开会员 果断卸载 然后发现没有卸载干净 任务管理器 搜驱动 不小心干掉了win自带的文件win提示更新 更新重启就蓝屏随便点击一个新闻页面 解决办法: 在…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.5-2.6

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.5 网络中的网络以及 11 卷积(Network in Network and 11 convoluti…

利用Spring Boot开发“衣依”服装销售系统

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

如何从 PC 中检索已删除的文件?从 PC 恢复已删除的照片技巧

按 Shift Delete 以后后悔?想要恢复已删除的照片吗?好吧,如果是这样的话,那么您来对地方了。在本文中,我们将讨论如何从 PC 中检索已删除的文件。 自从摄影的概念被提出以来,人们就对它着迷。早期的照片保…

YOLO11改进|上采样篇|引入DySample轻量级动态上采样器

目录 一、DySample轻量级动态上采样器1.1DySample上采样模块介绍1.2DySample核心代码 五、添加DySample上采样器5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、DySample轻量级动态上采样器 1.1DySample上采样模块介绍 DySample是一种基…

Koa2+Vue2的简书后台管理系统

文章目录 项目实战:前(vue)后(koa)端分离1、创建简书项目2、创建数据库2.1 创建数据库2.2 连接数据库3、模型对象3.1 设计用户模块的Schema3.2 实现用户增删改查3.2.1 增加用户3.2.2 修改用户3.2.3 删除用户3.2.4 查询用户4、封装业务逻辑层5、封装CRUD6、创建Vue项目7、配…

“衣依”服装销售平台:Spring Boot技术架构剖析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…