redis sentinel和redis cluster的主从切换选举过程
引言
redis sentinel和redis cluster的主从切换选举过程不同,本文将从选举机制、核心差异对比两者的不同。
一、Redis Sentinel的选举机制
-
监控与故障判定
Sentinel集群通过心跳检测(每秒一次PING)监控主节点状态:- 主观下线:单个Sentinel节点检测到主节点无响应
- 客观下线:超过半数Sentinel确认主节点失效(如3节点集群需2个确认)
-
候选从节点筛选
满足以下条件的从节点进入候选池:- 网络连接正常(排除频繁断连的节点)
- 数据同步延迟在阈值内(
cluster-node-timeout * slave-validity-factor
)
-
三轮选举规则
Sentinel采用多维度优先级排序:- 第一轮:优先级最高(
slave-priority
配置值最小) - 第二轮:复制偏移量最大(数据最新)
- 第三轮:节点ID最小(最终裁决条件)
- 第一轮:优先级最高(
-
领导者选举
采用Raft算法选举Sentinel Leader:- 每个Sentinel节点自荐并收集选票
- 得票过半者成为Leader,负责执行主从切换
-
切换执行
Sentinel Leader向从节点发送SLAVEOF
命令,并通知客户端新主节点信息
二、Redis Cluster的选举机制
-
故障检测
基于Gossip协议实现去中心化检测:- 节点间定期交换状态信息(PING/PONG消息)
- 主节点失联超过
cluster-node-timeout
视为PFail - 多数主节点确认后升级为Fail状态
-
从节点资格验证
满足以下条件才可参选:- 与原主节点断连时间未超过
cluster-node-timeout * 2
- 数据复制偏移量最大(优先保留最新数据)
- 与原主节点断连时间未超过
-
选举投票机制
采用分布式投票协议:- 从节点广播
CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST
- 主节点根据配置纪元(epoch)投票,每个主节点每纪元仅投一票
- 获得
N/2 +1
票数(N为有效主节点数)即当选
- 从节点广播
-
新主节点接管
选举成功后执行关键操作:- 撤销原主节点的哈希槽分配
- 通过Gossip协议广播新主节点信息
- 触发其他从节点同步新主数据
# 伪代码示例:Cluster选举核心逻辑
def handle_failover():if current_node.is_slave:if master.failed and self.offset_max:request_votes()elif current_node.is_master:if received_vote_request and epoch_valid:send_vote()
三、核心差异对比
特性 | Redis Sentinel | Redis Cluster |
---|---|---|
架构定位 | 外部监控系统 | 内置集群协议 |
选举触发者 | Sentinel Leader | 从节点自主发起 |
投票机制 | 需多数Sentinel同意 | 需半数以上主节点投票 |
数据一致性保障 | 切换期间短暂不可写 | 槽迁移完成前阻塞写入 |
网络要求 | 低带宽消耗 | 高带宽(Gossip协议通信) |
适用场景 | 中小规模集群 | 大规模分布式部署 |
四、最佳实践建议
-
Sentinel部署要点
- 至少部署3个Sentinel节点防止脑裂
- 设置合理的
down-after-milliseconds
(建议≥30s)
-
Cluster优化策略
- 控制节点规模(建议≤1000节点)
- 调整
cluster-node-timeout
(推荐10-15秒) - 使用
redis-cli --cluster check
定期检测槽分配
-
通用注意事项
- 避免跨数据中心部署(网络延迟影响选举)
- 监控
master_link_status
和connected_slaves
指标 - 测试故障切换时间(通常Sentinel 10-30秒,Cluster 1-15秒)
五、延伸思考
-
脑裂问题处理
两种架构都可能出现网络分区导致的双主现象:- Sentinel通过
min-slaves-to-write
防止数据丢失 - Cluster通过
require-full-coverage
配置控制分区容忍度
- Sentinel通过
-
数据一致性挑战
- 异步复制丢失:切换期间未同步的写入可能丢失
- 解决方案:启用
WAIT
命令强制同步复制(性能折损)
-
混合云场景适配
在多云环境中需特别注意:- 调整
cluster-announce-ip
避免私有IP暴露 - 使用TLS加密Gossip通信(Redis 6.0+支持)
- 调整
通过深入理解这两种机制,开发者可以根据业务规模、数据量级和可用性要求,选择最适合的Redis高可用方案。实际生产环境中,Sentinel更适用于读写分离场景,而Cluster则是大数据量、高并发场景的首选。
相关文章:
redis sentinel和redis cluster的主从切换选举过程
引言 redis sentinel和redis cluster的主从切换选举过程不同,本文将从选举机制、核心差异对比两者的不同。 一、Redis Sentinel的选举机制 监控与故障判定 Sentinel集群通过心跳检测(每秒一次PING)监控主节点状态: 主观下线&…...
C++自学笔记 makefile
本博客参考南科大于仕琪教授的讲解视频和这位同学的学习笔记: 参考博客 感谢两位的分享。 makefile 的作用 用于组织大型项目的编译,是一个一键编译项目的脚本文件。 本博客通过四个版本的makefile逐步说明makefile的使用 使用说明 四个演示文件 …...
前端密码加密:保护用户数据的第一道防线
引言 在当今互联网时代,用户数据安全至关重要,而密码作为用户身份验证的核心凭证,其安全性更是重中之重。传统的前端开发中,密码常常以明文形式传输到服务器,这带来了严重的安全隐患。本文将深入探讨前端密码加密的必…...

HTML12:文本框和单选框
表单元素格式 属性说明type指定元素的类型。text、password、 checkbox、 radio、submit、reset、file、hidden、image 和button,默认为textname指定表单元素的名称value元素的初始值。type为radio时必须指定一个值size指定表单元素的初始宽度。当type为text 或pas…...

机器人厨师上岗!AI在餐饮界掀起新风潮!
想要了解人工智能在其他各个领域的应用,可以查看下面一篇文章 《AI在各领域的应用》 餐饮业是与我们日常生活息息相关的行业,而人工智能(AI)正在迅速改变这个传统行业的面貌。从智能点餐到食材管理,再到个性化推荐&a…...

MySQL开篇
文章目录 一、前置知识1. MySQL的安装2. 前置一些概念知识 二、MySQL数据库操作2.1 概念2.2 数据库的操作2.2.1创建数据库命令2.2.2 查看数据库2.2.3 选中数据库2.2.4 删除数据库 三、MySQL数据表操作3.1 概念3.2 数据表的操作3.2.1 创建表 一、前置知识 1. MySQL的安装 MySQ…...

Linux电脑本机使用小皮面板集成环境开发调试WEB项目
开发调试WEB项目,有时开发环境配置繁琐,可以使用小皮面板集成环境。 小皮面板官网: https://www.xp.cn/1.可以使用小皮面板安装脚本一键安装。登陆小皮面板管理后台 2.在“软件商店”使用LNMP一键部署集成环境。 3.添加网站,本…...

问题及解决01-面板无法随着窗口的放大而放大
在MATLAB的App Designer中,默认情况下,组件的位置是固定的,不会随着父容器的大小变化而改变。问题图如下图所示。 解决: 为了让Panel面板能够随着UIFigure父容器一起缩放,需要使用布局管理器,我利用 MATLA…...

操作系统原理实验报告
操作系统原理课程的实验报告汇总 实验三:线程的创建与撤销 实验环境:计算机一台,内装有VC、office等软件 实验日期:2024.4.11 实验要求: 1.理解:Windows系统调用的基本概念,进程与线程的基…...

《Linux命令行大全(第2版)》PDF下载
内容简介 本书对Linux命令行进行详细的介绍,全书内容包括4个部分,第一部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与必备工具&…...

Java高频面试之并发编程-15
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:as-if-serial 是什么?单线程的程序一定是顺序执行的吗? as-if-serial 规则 定义: …...
Python-86:奇妙货币交易问题
问题描述 小R住在一个名为 X 国的国家,这里的货币非常特殊,面值为 V0,V1,V2,...,VnV0,V1,V2,...,Vn,并且 nn 可以无限大。该国的交易规则也很特别:在一次交易中,双方只能对每种面值的货币使用不超过两次。 例如&…...
Selenium的driver.get_url 和 手动输入网址, 并点击的操作,有什么不同?
我在搞爬取的时候,发现有些网站直接用driver.get(url) 跳转到目标特定的网址的时候,会被强制跳转到其他的网址上,但是如果是自己手动,在网址栏那里输入网址,并点回车,却能完成跳转。 这是在使用 Selenium …...
kotlin @JvmStatic注解的作用和使用场景
1. JvmStatic 的作用 JvmStatic 是 Kotlin 提供的一个注解,用于在 JVM 上将伴生对象(companion object)中的方法或属性暴露为 Java 静态方法或字段。 作用对象:只能用在 companion object 中的函数或属性。效果: 在 …...
GitHub中多个PR时,如何协同合并和管理
在 GitHub 中,当多个开发者同时提交多个 Pull Request(PR)时,合理的管理流程与协作策略能够确保代码库稳定、审查高效,并减少冲突与重工。总体而言,你需要: 1)统一分支与命名策略&a…...

无人甘蔗小车履带式底盘行走系统的研究
1.1 研究背景与意义 1.1.1 研究背景 甘蔗作为全球最重要的糖料作物之一,在农业经济领域占据着举足轻重的地位。我国是甘蔗的主要种植国家,尤其是广西、广东、云南等地,甘蔗种植面积广泛,是当地农业经济的重要支柱产业。甘蔗不仅…...

通俗易懂版知识点:Keepalived + LVS + Web + NFS 高可用集群到底是干什么的?
实验开始前,先搞懂为什么要部署该集群? 这个方案的目标是让网站 永不宕机,即使某台服务器挂了,用户也感觉不到。它主要涉及 负载均衡(LVS) 高可用(Keepalived) 共享存储ÿ…...
各类有关NBA数据统计数据集大合集
这些数据我已上传大家在CSDN上直接搜索就可以! 一、【2022-2023 NBA球员统计】数据集 关键词: 篮球 描述: 语境 该数据集每场比赛包含2022-2023常规赛NBA球员统计数据。 请注意,由团队更改产生了重复的球员名称。 * [2021-2022 NBA播放器统计]&#…...
《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》
React Native和Flutter作为当下热门的跨平台开发框架,在社交应用开发领域各显神通。今天,我们深入探索它们在高可用架构中的部署与容灾策略。 React Native凭借其独特优势,在社交应用开发中拥有一席之地。它基于JavaScript和React࿰…...

https,http1,http2,http3的一些知识
温故知新,突然有人问我项目中🤔有使用http3么,一下不知从何说起,就有了这篇文章的出现。 https加密传输,ssltls https 验证身份 提供加密,混合加密 : 对称加密 非对称加密 原理:…...

go 通过汇编学习atomic原子操作原理
文章目录 概要一、原理1.1、案例1.2、关键汇编 二、LOCK汇编指令2.1、 LOCK2.2、 原理2.2.1、 缓存行2.2.2、 缓存一致性之MESI协议2.2.3、lock原理 三、x86缓存发展四、x86 DMA发展参考 概要 在并发操作下,对一个简单的aa2的操作都会出错,这是因为这样…...

WebRTC 源码原生端Demo入门-1
1、概述 我的代码是比较新的,基于webrtc源码仓库的main分支的,在windows下把源码仓库下载好了后,用visual stdio 2022打开进行编译调试src/examples/peerconnection_client测试项目,主要是跑通这个demo来入手和调试,纯看代码很难…...
Nipype 简单使用教程
Nipype 简单使用教程 基础教程**一、Nipype 核心概念与工作流构建****1. 基本组件****2. 工作流构建步骤** **二、常用接口命令速查表****1. FSL 接口****2. FreeSurfer 接口****3. ANTS 接口****4. 数据处理接口** **三、高级特性与最佳实践****1. 条件执行(基于输…...
股票回购、股票减持和股票解禁对股票价格影响的综合分析
以下是关于股票回购、股票减持和股票解禁对股票价格影响的综合分析,结合了市场机制、财务指标及投资者行为等多维度因素: 一、股票回购对股价的影响 1. 正面影响 • 提升财务指标:回购减少流通股数量,在净利润不变的情况下&#…...
linux 三剑客命令学习
grep Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix…...

【MySQL】第二弹——MySQL表的增删改查(CRUD)
文章目录 🎓一. CRUD🎓二. 新增(Create)🎓三. 查询(Rertieve)📖1. 全列查询📖2. 指定列查询📖3. 查询带有表达式📖4. 起别名查询(as )📖 5. 去重查询(distinct)📖6. 排序…...
Springboot中如何自定义配置类
在 Spring Boot 中,自定义配置类是通过 Configuration 注解定义的类,用于替代传统的 XML 配置,管理 Bean 的创建和应用程序的设置。 1. 创建自定义配置类 (1) 基本配置类 使用 Configuration 注解标记类,并在其中定义 Bean 方法…...

基于zernike 拟合生成包裹训练数据-可自定义拟合的项数
可以看到拟合误差其实还是有很多的,但是这个主要是包裹噪声产生的,用到了github 上的zernike 库,直接pip install 一下安装就可以了 import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import matpl…...

大模型赋能:2D 写实数字人开启实时交互新时代
在数字化浪潮席卷全球的当下,人工智能技术不断突破创新,其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星,引领着行业变革,为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…...

5G-A来了!5G信号多个A带来哪些改变?
5G-A来了!5G信号多个A带来哪些改变? 随着科技不断进步,通信网络的迭代升级也在加速。自4G、5G的推出以来,我们见证了通信技术的飞跃式发展。最近,越来越多的用户发现自己手机屏幕右上角的5G标识已经变成了“5G-A”。那…...