Redis: Sentinel工作原理和故障迁移流程
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 命令来完成
- 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点执行 PING 操作(监控)
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,发送 PING 命令
- 一开始,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秒, 三分钟
相关文章:

Redis: Sentinel工作原理和故障迁移流程
Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的,是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的,它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…...

通信工程学习:什么是IGMP因特网组管理协议
IGMP:因特网组管理协议 IGMP(Internet Group Management Protocol,因特网组管理协议)是TCP/IP协议簇中负责组播成员管理的协议。它主要用于在用户主机和与其直接相连的组播路由器之间建立和维护组播组成员关系。以下是关于IGMP协议…...
高效批量导入多个SQL文件至SQL Server数据库的实用方法
当需要批量导入多个SQL文件到SQL Server数据库时,可以通过以下几种方法来实现: 方法一:使用SQLCMD命令行工具(亲测可用) 准备SQL文件:确保所有的SQL文件都位于同一个文件夹内,并且文件扩展名为…...

【树莓派系列】树莓派wiringPi库详解,官方外设开发
树莓派wiringPi库详解,官方外设开发 文章目录 树莓派wiringPi库详解,官方外设开发一、安装wiringPi库二、wiringPi库API大全1.硬件初始化函数2.通用GPIO控制函数3.时间控制函数4.串口通信串口API串口通信配置多串口通信配置串口自发自收测试串口间通信测…...
前端模块化CommonJs、ESM、AMD总结
前端开发模式进化史 前端工程化正是为了应对这些演化中出现的挑战和需求而发展起来的: 前后端混合:服务端渲染,javascript仅实现交互前后端分离:借助 ajax 实现前后端分离、单页应用(SPA)等新模式模块化开发:npm 管理…...

JavaWeb - 8 - 请求响应 分层解耦
请求响应 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程…...
1G,2G,3G,4G,5G各代通信技术的关键技术,联系和区别
目录 1G2G3G4G5G各代通信技术的联系和区别联系区别 1G 1G的主要特点是无线移动化。关键技术为蜂窝组网,支持频率复用和移动切换,可以实现个人和个人移动状态下不间断的语音通信。 1G通信系统现已关闭,其主要缺点是串好和盗号。 2G 数字化…...

【宽搜】2. leetcode 102 二叉树的层序遍历
题目描述 题目链接:二叉树的层序遍历 根据上一篇文章的模板可以直接写代码,需要改变的就是将N叉树的child改为二叉树的left和right。 代码 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector&…...
Go语言实现长连接并发框架 - 请求分发器
文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了任务管理器的功能,接下来这篇博客我们将要实现请求分发模块的开发 接口 trait/dispatcher.go type Dispatcher interface {Start()Dispatch(conn…...

Redis: 集群测试和集群原理
集群测试 1 ) SET/GET 命令 测试 set 和 get 因为其他命令也基本相似,我们在 101 节点上尝试连接 103 $ /usr/local/redis/bin/redis-cli -c -a 123456 -h 192.168.10.103 -p 6376我们在插入或读取一个 key的时候,会对这个key做一个hash运算,…...

问题解决实录 | bash 中 tmux 颜色显示不全
点我进入博客 如下图,tmux 中颜色显示不全: echo $TERM输出的是 screen 但在 bash 里面输出的是 xterm-256 color 在 bash 里面输入: touch ~/.tmux.conf vim ~/.tmux.conf set -g default-terminal "xterm-256color"使之生效 source …...
古典舞在线交流平台:SpringBoot设计与实现详解
摘 要 随着互联网技术的发展,各类网站应运而生,网站具有新颖、展现全面的特点。因此,为了满足用户古典舞在线交流的需求,特开发了本古典舞在线交流平台。 本古典舞在线交流平台应用Java技术,MYSQL数据库存储数据&#…...

五子棋双人对战项目(6)——对战模块(解读代码)
目录 一、约定前后端交互接口的参数 1、房间准备就绪 (1)配置 websocket 连接路径 (2)构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 (1)“落子” 请求对象 (2)“落子…...

查缺补漏----I/O中断处理过程
中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。下面来看他们如何运用在中断处理过程中: 中断控制器位于CPU和外设之…...
Java API接口开发规范
文章目录 一、命名规范1.1 接口命名1.2 变量命名 二、接收参数规范2.1 请求体(Body)2.2 查询参数(Query Parameters) 三、参数检验四、接收方式规范五、异常类处理六、统一返回格式的定义七、API接口的幂等性(Idempote…...
Go语言实现长连接并发框架 - 任务管理器
文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了路由分组的功能,接下来这篇博客我们将要实现任务管理模块 接口 trait/task_mgr.go type TaskMgr interface {RouterGroupStart()StartWorker(tas…...
【大数据】深入解析分布式数据库:架构、技术与未来
目录 1. 分布式数据库的定义2. 架构类型2.1 主从架构2.2 同步与异步复制2.3 分片架构 3. 技术实现3.1 一致性模型3.2 CAP理论3.3 数据存储引擎 4. 应用场景5. 选择分布式数据库的因素5.1 数据一致性需求5.2 读写负载5.3 成本5.4 技术栈兼容性 6. 未来发展趋势总结 分布式数据库…...

uniapp框架中实现文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
前言 uni-file-picker是uniapp中的一个文件选择器组件,用于选择本地文件并返回选择的文件路径或文件信息。该组件支持选择单个文件或多个文件,可以设置文件的类型、大小限制,并且可以进行文件预览。 提示:以下是本篇文章正文内容,下面案例可供参考 uni-file-picker组件具…...
GEE教程:NASA/GRACE/MASS_GRIDS/LAND数据的查看不同时期液态水数据的变化情况
目录 简介 NASA/GRACE/MASS_GRIDS/LAND 函数 first() Arguments: Returns: Image 代码 结果 简介 利用NASA/GRACE/MASS_GRIDS/LAND数据的查看不同时期液态水数据的变化情况。 NASA/GRACE/MASS_GRIDS/LAND NASA/GRACE/MASS_GRIDS/LAND数据是由NASA的重力恒星MASS数据…...

世邦通信股份有限公司IP网络对讲广播系统RCE
漏洞描述 SPON世邦IP网络广播系统采用的IPAudio™技术, 将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输的双向音频扩声系统。传统广播系统存在的音质不佳,传输距离有限,缺乏互动等问题。该系统设备使用简便,…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...