Redis原理篇——哨兵机制
Redis原理篇——哨兵机制
- 1.Redis哨兵
- 2.哨兵工作原理
- 2.1.哨兵作用
- 2.2.状态监控
- 2.3.选举leader
- 2.4.failover
1.Redis哨兵
主从结构中master节点的作用非常重要,一旦故障就会导致集群不可用。那么有什么办法能保证主从集群的高可用性呢?
2.哨兵工作原理
Redis提供了哨兵(Sentinel)机制来监控主从集群监控状态,确保集群的高可用性。
2.1.哨兵作用
哨兵集群作用原理图:

哨兵的作用如下:
- 状态监控:
Sentinel会不断检查你的master和slave是否按预期工作 - 故障恢复(failover):如果
master故障,Sentinel会将一个slave提升为master。当故障实例恢复后会成为slave - 状态通知:
Sentinel充当Redis客户端的服务发现来源,当集群发生failover时,会将最新集群信息推送给Redis的客户端
那么问题来了, Sentinel 怎么知道一个 Redis 节点是否宕机呢?
2.2.状态监控
官方文档:
High availability with Redis Sentinel
Sentinel 基于心跳机制监测服务状态,每隔1秒向集群的每个节点发送ping命令,并通过实例的响应结果来做出判断:
- 主观下线(sdown):如果某sentinel节点发现某Redis节点未在规定时间响应,则认为该节点主观下线。
- 客观下线(odown):若超过指定数量(通过
quorum设置)的sentinel都认为该节点主观下线,则该节点客观下线。quorum值最好超过Sentinel节点数量的一半,Sentinel节点数量至少3台。
如图:

一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:
- 首先会判断
slave节点与master节点断开时间长短,如果超过down-after-milliseconds * 10则会排除该slave节点 - 然后判断
slave节点的slave-priority值,越小优先级越高,如果是 0 则永不参与选举(默认都是1)。 - 如果
slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高 - 最后是判断
slave节点的run_id大小,越小优先级越高(通过info server可以查看run_id)。
问题来了,当选出一个新的master后,该如何实现身份切换呢?
大概分为两步:
- 在多个
sentinel中选举一个leader - 由
leader执行failover
2.3.选举leader
首先,Sentinel 集群要选出一个执行 failover 的 Sentinel 节点,可以成为 leader 。要成为 leader 要满足两个条件:
- 最先获得超过半数的投票
- 获得的投票数不小于
quorum值
而sentinel投票的原则有两条: - 优先投票给目前得票最多的
- 如果目前没有任何节点的票,就投给自己
比如有3个sentinel节点,s1、s2、s3,假如s2先投票: - 此时发现没有任何人在投票,那就投给自己。
s2得 1 票 - 接着
s1和s3开始投票,发现目前s2票最多,于是也投给s2,s2得 3 票 s2称为leader,开始故障转移
不难看出,谁先投票,谁就会称为leader,那什么时候会触发投票呢?
答案是 第一个确认master客观下线的人会立刻发起投票,一定会成为leader。
OK,sentinel找到 leader 以后,该如何完成 failover 呢?
2.4.failover
我们举个例子,有一个集群,初始状态下 7001 为 master ,7002 和 7003 为 slave:

假如 master 发生故障,slave1 当选。则故障转移的流程如下:
sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master

sentinel给所有其它slave发送slaveof 192.168.150.101 7002命令,让这些节点成为新master,也就是7002的slave节点,开始从新的master上同步数据。

- 最后,当故障节点恢复后会接收到哨兵信号,执行
slaveof 192.168.150.101 7002命令,成为slave:

参考:
https://www.bilibili.com/video/BV1S142197x7?p=145&vd_source=f586bbf89de5904ba5a05a8c1d18f1c4
相关文章:
Redis原理篇——哨兵机制
Redis原理篇——哨兵机制 1.Redis哨兵2.哨兵工作原理2.1.哨兵作用2.2.状态监控2.3.选举leader2.4.failover 1.Redis哨兵 主从结构中master节点的作用非常重要,一旦故障就会导致集群不可用。那么有什么办法能保证主从集群的高可用性呢? 2.哨兵工作原理 …...
web前端的MySQL:跨领域之旅的探索与困惑
web前端的MySQL:跨领域之旅的探索与困惑 在数字化浪潮的推动下,web前端与MySQL数据库似乎成为了两个不可或缺的领域。然而,当我们将这两者放在一起,尝试探索web前端与MySQL之间的交互与关联时,却发现这是一次充满困惑…...
Postgresql源码(135)生成执行计划——Var的调整set_plan_references
1 总结 set_plan_references主要有两个功能: 拉平:生成拉平后的RTE列表(add_rtes_to_flat_rtable)。调整:调整前每一层计划中varno的引用都是相对于本层RTE的偏移量。放在一个整体计划后,需要指向一个统一…...
Python魔法之旅专栏(导航)
目录 推荐阅读 1、Python筑基之旅 2、Python函数之旅 3、Python算法之旅 4、博客个人主页 首先,感谢老铁们一直以来对我的支持与厚爱,让我能坚持把Python魔法方法专栏更新完毕! 其次,为了方便大家查阅,我将此专栏…...
Python第二语言(五、Python文件相关操作)
目录 1. 文件编码的概念 2. 文件的读取操作 2.1 什么是文件 2.2 open()打开函数 2.3 mode常用的三种基础访问模式 2.4 文件操作及案例 3. 文件的写入操作及刷新文件:write与flush 4. 文件的追加操作 5. 文件操作的综合案例(文件备份操作&#x…...
Vue3 组合式 API:依赖注入(四)
provide() provide() 函数是用于依赖注入的一个关键部分。这个函数允许你在组件树中提供一个值或对象,使得任何子组件(无论层级多深)都能够通过 inject() 函数来访问这些值。 import { provide, ref } from vue; export default { setup(…...
Vue如何引入ElementUI并使用
Element UI详细介绍 Element UI是一个基于Vue 2.0的桌面端组件库,旨在构建简洁、快速的用户界面。由饿了么前端团队开发,提供丰富的组件和工具,帮助开发者快速构建高质量的Vue应用,并且以开放源代码的形式提供。 1. VueElementU…...
VS2019 QT无法打开 源 文件 “QTcpSocket“
VS2019 QT无法打开 源 文件 "QTcpSocket" QT5.15.2_msvc2019_64 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1696 无法打开 源 文件 "QTcpSocket" auto_pack_line_demo D:\vs_qt_project\auto_pack_line_de…...
【Golang】Map 稳定有序遍历的实现与探索:保序遍历之道
【Golang】Map 稳定有序遍历的实现与探索:保序遍历之道 大家好 我是寸铁👊 总结了一篇【Golang】Map 稳定有序遍历的实现与探索:保序遍历之道✨ 喜欢的小伙伴可以点点关注 💝 前言🍎 在计算机科学中,数据结…...
使用Nextjs学习(学习+项目完整版本)
创建项目 运行如下命令 npx create-next-app next-create创建项目中出现的各种提示直接走默认的就行,一直回车就行了 创建完成后进入到项目运行localhost:3000访问页面,如果和我下面页面一样就是创建项目成功了 整理项目 将app/globals.css里面的样式都删除,只留下最上面三…...
KUKA机器人KRC5控制柜面板LED显示
对于KUKA机器人新系列控制柜KRC5控制柜来说,其控制柜面板LED布局如下图: 其中①②③④分别为: 1、机器人控制柜处于不同状态时,LED显示如下: 2、机器人控制柜正在运行时: 3、机器人控制柜运行时出现的故障…...
为什么选择Python作为AI开发语言
为什么Python适合AI 在当前的科技浪潮中,人工智能(AI)无疑是最热门的话题之一。无论是自动驾驶、智能推荐还是自然语言处理,AI都在不断改变我们的生活。而在这场技术革命中,Python作为主要的编程语言之一,…...
【算法篇】求最长公共前缀JavaScript版本
题目描述 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。 数据范围: 数据范围:0<n<5000,0<len(strsi)< 5000 进阶:空间复杂度 O(1)&a…...
搭建RocketMQ主从异步集群
搭建RocketMQ主从异步集群 1、RocketMQ集群模式 为了追求更好的性能,RocketMQ的最佳实践方式都是在集群模式下完成的。RocketMQ官方提供了三种集群搭建方式: 2主2从异步通信方式:使用异步方式进行主从之间的数据复制。吞吐量大,…...
最大子段和问题
最大子段和问题 分数 15 全屏浏览 切换布局 作者 王东 单位 贵州师范学院 最大子段和问题。给定由n个整数组成的序列,求序列中子段的最大和,若所有整数均为负整数时定义最大子段和为0。 输入格式: 第一行输入整数个数n(1≤n≤1000&…...
Vue3中的常见组件通信之mitt
Vue3中的常见组件通信之mitt 概述 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs…...
MySQL快速入门(极简)
SQL 介绍及 MySQL 安装 一、实验简介 本课程为实验楼提供的 MySQL 实验教程,所有的步骤都在实验楼在线实验环境中完成,学习中请按照实验步骤依次操作。 本课程为 SQL 基本语法及 MySQL 基本操作的实验,理论内容较少,动手实践多…...
CentOS7安装NVIDIA显卡驱动指引【笔记】
CentOS7安装NVIDIA显卡驱动指引【笔记】 实践设备:华硕FX-PRO(NVIDIA GeForce GTX 960M) 环境准备: 1、将系统安装到设备上正常运行; 2、设备网络调试,可以正常访问外网; 3、配置ssh服务(非必要,根据实际情况)。 说明: 本文档所提供的指引和参考主要基于特定实践…...
【RabbitMQ】RabbitMQ配置与交换机学习
【RabbitMQ】RabbitMQ配置与交换机学习 文章目录 【RabbitMQ】RabbitMQ配置与交换机学习简介安装和部署1. 安装RabbitMQ2.创建virtual-host3. 添加依赖4.修改配置文件 WorkQueues模型1.编写消息发送测试类2.编写消息接收(监听)类3. 实现能者多劳 交换机F…...
常见排序算法,快排,希尔,归并,堆排
后面的排序中都要用到的函数 //交换 void Swap(int* p1, int* p2) {int* tmp *p1;*p1 *p2;*p2 tmp; } 包含的头文件 "Sort.h" #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<time.h> #include<s…...
Linux新手必看:Deepin、Mint、Fedora等主流发行版安装镜像获取全攻略
Linux新手必看:Deepin、Mint、Fedora等主流发行版安装镜像获取全攻略 当你第一次踏入Linux世界的大门,面对众多发行版的选择,获取正确的安装镜像往往是第一步。就像选择一把合适的钥匙,镜像的质量和来源直接关系到系统安装的成败。…...
团队知识协作平台:构建高效智能的文档管理系统
团队知识协作平台:构建高效智能的文档管理系统 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本,也可以自己运行或参与开发。源项目地址&…...
从标准到实战:网络变压器在POE应用中的AF/AT/BF/BT详解与电路设计指南
1. 网络变压器在POE系统中的核心作用 第一次接触POE供电系统时,我对着电路板上那个带铁壳的方形元件研究了半天——这就是网络变压器。它看起来平平无奇,却是整个POE系统的"心脏"。简单来说,网络变压器在POE系统中要同时干两件事&a…...
nlp_gte_sentence-embedding_chinese-large实战案例:客服工单自动归类与聚类分析
nlp_gte_sentence-embedding_chinese-large实战案例:客服工单自动归类与聚类分析 1. 引言:客服工单处理的痛点与解决方案 每天处理成千上万的客服工单是什么体验?想象一下这样的场景:客服团队每天收到大量用户反馈,从…...
5个步骤快速搭建医院信息系统:终极医疗数字化解决方案
5个步骤快速搭建医院信息系统:终极医疗数字化解决方案 【免费下载链接】HIS ZainZhao/HIS: HIS 通常代表医疗信息系统(Hospital Information System),但此链接指向的具体项目信息未知,可能是某个开发者设计或维护的医院…...
Windows包管理器Winget一键安装完整指南:告别繁琐手动配置
Windows包管理器Winget一键安装完整指南:告别繁琐手动配置 【免费下载链接】winget-install Install winget tool using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2022. 项目地址: https://gitcode.com/gh_mirrors…...
从PERCLOS到‘三庭五眼’:聊聊疲劳检测算法里那些有趣的工程实现细节
从PERCLOS到‘三庭五眼’:疲劳检测算法的工程实现艺术 当算法工程师第一次看到"三庭五眼"这个美术概念被写入代码注释时,大概都会会心一笑——这正是工程实践中那些有趣的跨界融合时刻。疲劳检测系统看似是标准的计算机视觉任务,但…...
小米音乐Docker化解决方案:打造智能家居音乐中枢实战指南
小米音乐Docker化解决方案:打造智能家居音乐中枢实战指南 【免费下载链接】xiaomusic 使用小爱同学播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 小米音乐Docker项目是一款专为技术爱好者和开发…...
3个高效解决Atlas OS中Xbox登录问题的终极技巧
3个高效解决Atlas OS中Xbox登录问题的终极技巧 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas Atlas…...
零基础玩转通义千问3-Reranker:手把手教你搭建智能搜索排序系统
零基础玩转通义千问3-Reranker:手把手教你搭建智能搜索排序系统 1. 认识通义千问3-Reranker:你的智能搜索助手 想象一下,你在网上搜索"如何给树莓派安装Ubuntu Server",搜索引擎返回了50个结果。前三条可能是广告&…...
