【Redis 进阶】哨兵模式
思维导图:
一、哨兵模式概述
(一)传统主从复制模式的局限性
在传统的Redis主从复制架构中,若主节点发生故障,运维人员需手动执行故障转移操作,将一个从节点提升为新主节点,并逐一通知所有客户端更新连接信息。然而,这种手动切换方式不仅效率低下,而且在高并发场景下容易引发数据不一致性问题。此外,随着企业规模的扩大,客户端数量增多,手动切换带来的运维成本和风险也显著增加。因此,Redis引入了哨兵(Sentinel)模式以提升系统的高可用性。
(二)哨兵模式的引入及优势
Redis哨兵模式通过引入哨兵节点,实现了对主从节点的自动监控和故障转移,极大地简化了运维工作并提高了系统的可用性。哨兵模式能够在主节点发生故障时自动选举新的主节点,并通知客户端更新连接信息,从而确保系统的持续稳定运行。此外,哨兵模式还支持配置动态调整和监控告警功能,为运维人员提供了更加便捷和高效的管理手段。
二、哨兵模式基本概念
(一)主节点与从节点
- 主节点:负责处理所有写操作,并将数据同步到从节点。
- 从节点:负责处理读操作,并从主节点同步数据。
(二)哨兵节点及其集合
- 哨兵节点:独立的进程,用于监控Redis主从节点的状态。
- 哨兵节点集合:由多个哨兵节点组成,防止单点故障。
(三)Redis哨兵整体架构
Redis哨兵模式包括主节点、从节点和哨兵节点集合。哨兵节点通过TCP长连接定期发送心跳包来监控主从节点的状态,并在检测到故障时自动执行故障转移操作。
三、哨兵模式工作机制
(一)监控机制
哨兵节点通过TCP长连接定期发送心跳包来监控主从节点的状态。如果某个哨兵节点在一定时间内未收到主节点的心跳响应,则会将其标记为主观下线。当多个哨兵节点同时标记主节点为主观下线时,会触发客观下线判定。
(二)自动故障转移流程
- 主观下线判定:单个哨兵节点单方面认为主节点挂了,但可能也存在网络波动的关系。
- 客观下线判定:多个哨兵节点共同确认主节点挂了,防止误判。
- Leader选举:多个哨兵节点选出Leader,负责执行故障转移操作。
- 新主节点选举:从从节点中选出一个优先级最高、数据同步最多的节点作为新的主节点。
- 配置更新:哨兵节点通知其他从节点和新主节点更新配置。
(三)客户端通知机制
哨兵节点会自动通知客户端程序新的主节点是谁,后续客户端的写入操作就会针对新的主节点进行了。这种机制确保了客户端能够及时感知主节点的变化并进行相应的调整。
四、哨兵节点集合的优势
(一)防止单点故障
哨兵节点集合由多个哨兵实例组成,这种冗余设计旨在防止单点故障。当某个哨兵节点因硬件故障或网络问题不可用时,其余哨兵节点仍能继续履行监控和管理职责,确保系统的稳定运行。
(二)降低误判概率
通过多个哨兵节点的共同确认,可以有效降低误判概率。传输过程中可能会出现丢包或网络抖动,单个哨兵节点的判断可能存在误差,但多个哨兵节点的共同确认可以提高判断的准确性。
五、Docker部署环境搭建
(一)Docker简介及优势
Docker是一种轻量级的容器化技术,通过操作系统级别的虚拟化实现资源的隔离和限制。与传统的虚拟机相比,Docker容器共享宿主操作系统内核,启动速度快,资源占用少,非常适合用于部署和扩展分布式应用。
(二)Docker准备工作
- 安装Docker和Docker Compose。
- 停止运行的Redis进程,防止冲突。
- 使用Docker获取Redis镜像。
(三)容器编排步骤详解
- 创建Redis主从容器:
- 使用Docker Compose定义一个YAML文件,指定主节点和从节点的配置参数。
- 启动容器并验证主从复制是否正常工作。
- 创建哨兵容器:
- 定义另一个YAML文件,指定哨兵节点的配置参数。
- 启动哨兵容器并验证其监控和管理功能。
六、哨兵重新选取主节点过程剖析
(一)主观下线与客观下线判定
- 主观下线:单个哨兵节点单方面认为主节点挂了,但可能也存在网络波动的关系。
- 客观下线:多个哨兵节点共同确认主节点挂了,防止误判。
(二)Leader选举机制
- 第一个发现客观下线的哨兵节点会投给自己一票,并向其他哨兵节点拉票。
- 其他哨兵节点接收到请求后,会投给它。如果出现多个同时拉票,那么谁快投谁,当其中一个哨兵节点的票数超过半数的时候,选举就完成了。
(三)新主节点选择策略
- 优先级:每个从节点在配置文件中,都会有优先级的设置,优先级高的胜出。
- offset:如果不能区分,就看谁同步数据的多,多的胜出。
- run id:每个Redis启动时随机生成一串数字,谁越小,就挑选谁。
七、注意事项及最佳实践
(一)哨兵节点数量规划建议
哨兵节点的数量应根据实际业务需求和系统规模进行合理规划。通常建议部署奇数个哨兵节点,以便在发生故障时能够通过多数投票机制选出新的主节点。
(二)数据一致性与存储容量考量
哨兵+主从复制解决的是"可用性"问题,并不能解决在极端情况下的数据丢失问题。此外,哨兵+主从复制并不能提高数据的存储容量,数据的持久化和备份仍需通过其他手段实现。
(三)系统可用性保障措施
- 定期备份数据,确保在发生故障时能够快速恢复。
- 监控系统性能指标,及时发现和处理潜在问题。
- 进行容灾演练,验证系统的可靠性和稳定性。
相关文章:

【Redis 进阶】哨兵模式
思维导图: 一、哨兵模式概述 (一)传统主从复制模式的局限性 在传统的Redis主从复制架构中,若主节点发生故障,运维人员需手动执行故障转移操作,将一个从节点提升为新主节点,并逐一通知所有客户…...
掌控随心 - 服务网格的流量管理艺术 (Istio 实例)
掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…...
在服务器排查java某个线程导致CPU飙高教程
🧩 第一步:确定是哪个线程占用 CPU 高 1.1 使用 top 或 htop 命令查看高 CPU 的 Java 进程 top -Hp <Java进程PID>-H 表示显示线程级别;-p 后面跟 Java 主进程的 PID;你会看到各个线程的 CPU 使用情况,找出使用…...
电子商城后台管理平台-Flask Vue项目开发
电子商城后台管理系统 电子商城后台管理平台-Flask 项目开发 文章目录 前言网课内容数据库参数用户模块/user/前端LESS 的语法使用LESS 的特点 ui登录页面主页页面头部左边aside 菜单main主体后端main页面设置用户-角色-权限商品分类商品信息图片保存到项目里面订单数据展示 网…...
Lettuce 节点刷新、连接优化与 Spring 升级适配全解析:从环境约束到生产验证
引言 在分布式系统中,Redis 作为高性能缓存中间件被广泛使用。随着 Spring 生态的迭代(尤其是 Spring Boot 2.0 的普及),Lettuce 逐渐取代 Jedis 成为 Redis 客户端的 “默认选择”。但开发者常面临三个核心问题:Let…...

CVE-2025-31258 macOS远程视图服务沙箱逃逸漏洞PoC已公开
苹果公司近日针对macOS系统中新披露的CVE-2025-31258漏洞发布补丁,该漏洞可能允许恶意应用程序突破沙箱限制,获取未授权的系统资源访问权限。在安全研究员Seo Hyun-gyu公开概念验证(PoC)利用代码后,该漏洞已在macOS Se…...
UDP协议详细讲解及C++代码实例
目录 一、UDP协议概述二、UDP通信流程1)数据传输2)无连接 三、关键点解析1) 套接字创建2)无连接特性3)数据传输 四、总结 UDP协议详细讲解及C代码实例 一、UDP协议概述 UDP(User Datagram Protocol,用户数据报协议&a…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集
作者:Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位:武汉大学计算机学院 论文标题:RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【递归、搜索和回溯】二叉树中的深搜
个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 前言1 2331. 计算布尔二叉树的值1.1 分析1.2 代码 2 129. 求根节点到叶节点数字之和2.1 分析2.2 代码 3 814. 二叉树剪枝3.1 分析3.2 代码 4 98. 验证…...

Algolia - Docsearch的申请配置安装【以踩坑解决版】
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...

Linux513 rsync本地传输 跨设备传输 一
ping节点bPing通 仅主机模式不需要设置网关节点a也可以Ping通节点b 同步成功 下载文件夹成功 今日源码 节点a 节点b...

leetcode 383. Ransom Note
题目描述 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> table(26,0);for(char ch : magazine){table[ch-a];}for(char ch : ransomNote){table[ch-a]--;if(table[ch-a] < 0)return false;}return true;} };...

Skyvern:用 AI+视觉驱动浏览器自动化
Skyvern:用 AI视觉驱动浏览器自动化 一、前言二、项目概览2.1 Skyvern 项目简介2.2 代码结构与模块划分 三、环境搭建与快速上手3.1 环境准备3.1.1 系统与依赖3.1.2 克隆项目3.1.3 安装 Python 依赖3.1.4 配置环境变量3.1.5 启动服务 3.2 验证安装 四、核心功能与实…...

数据库原理期末考试速成--最后附带两套题
引言 为什么从3开始呢,毕竟是速成吗,总要放弃一些东西 前两章1.概论 2.关系数据库:这里面都是一些运算符什么的,我感觉都学这个:笛卡尔积之列的都会算 这两章比较重要的我就放在这里了 选择、投影、连接、除、并、交、差,其中选择、投影、并、差、笛卡尔积是5种基本关…...
《探索React Native社交应用中WebRTC实现低延迟音视频通话的奥秘》
WebRTC,全称为Web Real-Time Communication,是一项开创性的开源技术,为Web和移动应用开启了实时通信的大门。它打破了传统通信的束缚,使得应用之间无需依赖繁琐的中间服务器,就能实现直接的点对点通信,这是…...
关于vue 本地代理
接口调用:其中我们可以约定一个拦截的标识, 用来给本地 http://localhost/ 进行代理要请求的测试地址https:abc.com 例子: axios.post(/OwnRateReport/-------------------------------------------------------00001)devServer: {proxy: {/…...
#跟着若城学鸿蒙#HarmonyOS NEXT学习之Blank组件详解
一、组件介绍 Blank(空白)组件是HarmonyOS NEXT中一个简单但非常实用的UI组件,它主要用于在布局中创建空白区域,帮助开发者更灵活地控制界面元素之间的间距和布局结构。虽然Blank组件本身不显示任何内容,但它在界面设…...
PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信
核心知识点:通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信 1. 通俗易懂的解释 想象一下,MAVLink 就像是无人机(飞控)和地面站(QGroundControl)之间约定好的一种“语言”。这种语言有很多标准的“…...

数据结构基础--蓝桥杯备考
1.优缺点总述 STL中各容器对比图 各类线性数据结构优缺点 1.数组 1.优点 1.简单,容易理解 2.访问快捷,只需要用下标就可以 3.有某些应用场景直接对应,例如二维数组对应平面 2.缺点 删除和插入数据非常耗时 2.链表 1.优点 插入和删…...

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析
今天给大家分享几款2.4GHz无线通信芯片方案: 一、集成SOC芯片方案 XL2407P(芯岭技术) 集成射频收发机和微控制器(如九齐NY8A054E) 支持一对多组网和自动重传 发射功率8dBm,接收灵敏度-96.5dBm(…...
安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷
安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷 一、刷机模式对比 1. Fastboot模式 简介:传统安卓底层刷机模式,通过USB连接电脑操作优点:支持大多数安卓设备,操作相对简单缺点:需要设备进入特定…...

Unity_JK框架【5】音效系统实现
在游戏开发中,音频是不可或缺的一部分,它能够极大地增强游戏的沉浸感和趣味性。今天,我们就用JK框架 探讨一下如何在Unity中实现一个强大的音频系统,并且通过实际的测试脚本来验证其功能👏。 一、音频模块类࿱…...

鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件
打开一个新的窗口 我们首先来实现如何在一个应用中打开一个新窗口,使用的模型是 Stage 模型 在项目文件里,新建一个 newWindow.ets 新文件 src/main/ets/pages/newWindow.ets newWindow.ets文件里面随便写点什么都行,这里是第一步创建的文件…...
MySQL数据库——视图
目录 一、视图是什么? 二、特点 三、创建视图 四.查询视图 五.更新视图 六.视图的作用 总结 一、视图是什么? 视图是从一个或多个表中导出的虚拟表,它本身不存储数据,而是基于 SQL 查询的结果集。 二、特点 1.虚拟性࿱…...
redis数据结构-09 (ZADD、ZRANGE、ZRANK)
Redis 排序集简介:ZADD、ZRANGE、ZRANK Redis 有序集合是一种功能强大的数据结构,兼具集合和哈希的特性。它维护一组唯一元素,类似于集合;但每个元素都与一个分数相关联,类似于哈希。分数用于对有序集合中的元素进行排…...
PyTorch API 1 - 概述、数学运算、nn、实用工具、函数、张量
文章目录 torch张量创建操作索引、切片、连接与变异操作 加速器生成器随机采样原地随机采样准随机采样 序列化并行计算局部禁用梯度计算数学运算常量逐点运算归约操作比较运算频谱操作其他操作BLAS 和 LAPACK 运算遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历…...

长短期记忆网络(LSTM)深度解析:理论、技术与应用全景
长短期记忆网络(LSTM)作为循环神经网络(RNN)的重要变体,通过门控机制有效解决了传统RNN的梯度消失问题,成为时序数据处理的核心技术。本文从理论起源、数学建模、网络架构、工程实现到行业应用,…...

c语言第一个小游戏:贪吃蛇小游戏02
接上文继续学习 ncurse的上下左右键获取 想要使用ncurse的功能键,也就是键盘快捷键,不是q、r、t,是 上下左右、F1、F2等等的键,我们叫做功能键要是想用这些功能键需要使用keypad函数 Keypad(stdscr,1); 从stdscr接收标准中&…...
【Python爬虫 !!!!!!政府招投标数据爬虫项目--医疗实例项目文档(提供源码!!!)!!!学会Python爬虫轻松赚外快】
政府招投标数据爬虫项目--医疗实例项目文档 1. 项目概述1.1 项目目标1.2 技术栈 2. 系统架构2.1 模块划分2.2 流程示意图 3. 核心模块设计3.1 反爬处理模块(utils/anti_crawler.py)3.1.1 功能特性3.1.2 关键代码 3.2 爬虫模块(crawler/spider…...

Android架构之自定义native进程
在Android五层架构中,native层基本上全是c的世界,这些c进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c子进程,也是这众多的c进程,构建了整个android世界的native层。 …...