深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式

Redis 高可用之 Sentinel 在 redis3.0 以前的版本要实现集群一般是借助哨兵 sentinel 工具来监控 master 节点的状态,如果 master 节点异常,则会做主从切换,将某一台 slave 作为 master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。 Sentinel 初始化 Sentinel(哨兵)是 R 阅读详情

2793baf6550fe78d6a05b3cf8355e854.png

背景

38f752085d188a5b3b56832d049ff58c.png

现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。

sentinel是独立进程,有对应的脚本来执行。

基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。

哨兵模式的架构图如下:

8249d8c3f143448cf4a1a75bf7c9f02d.png

启动哨兵们

  • sentinel6379.conf

protected-mode no
port 26379


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

5c5edba30197294e8c1eecd471601d6b.png

  • sentinel6380.conf

protected-mode no
port 26380


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

2654812ec3c426c8780573125c0097e2.png

  • sentinel6381.conf

protected-mode no
port 26381


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

19f0d3b5cf980e0706717ec5d009c9f8.png

故障转移测试

redis日志

  • 我们kill掉原Master进程,即6379的redis-server,看日志

9c8b7008e346a41cade58b948d4d7bc6.png

  • 看下6380的redis-server日志

68026fa532dc77886189561ed394c94e.png

3ee3f5ca5654118bd925ebc3edcc02ab.png

06 Sep 2024 15:49:18.869:开始断开和Master进程的连接,接着持续报错说复制失败,不断地重试

(中间有30s的重试)

06 Sep 2024 15:49:49.205 * MASTER MODE enabled,即6380实例被sentinel选举为Master节点

  • 看下6381的redis-server日志

a6a05372ede5602dbc62dcb372ecbec4.png

70da5e7091476c12e979b4c22afaa105.png

06 Sep 2024 15:49:18.870 # Error condition on socket for SYNC: Connection refused开始断开和Master进程的连接,接着持续报错说复制失败,不断地重试

(中间有30s的重试)

06 Sep 2024 15:49:49.262 * REPLICAOF 127.0.0.1:6380 enabled ,即6380实例被sentinel选举为Master节点后,6381实例也接受现实,开始从6380实例进行数据同步

redis-sentinel日志

让我们进入到之前配置好的文件夹

82c7365dd3fe08e101b4582c47a8c76e.png

  • redis-sentinel_26379进程日志

6b96a8dbdc043e52839d4b8169c267b5.png

  • redis-sentinel_26380进程日志

37fb0ec4578a214135ed9b784c840428.png

  • redis-sentinel_26381进程日志

b6b631f10f8e74cba327f55ef315e87b.png

故障恢复

  • 重新启动6379实例

  • 通过26379-sentinel,虽然原Master重启了,但目前Master还是6380

bf6b40852b1998f9d2b33227d687ab9e.png

其他文章

Kafka消息堆积问题排查

基于SpringMVC的API灰度方案

理解到位:灾备和只读数据库

SQL治理经验谈:索引覆盖

Mybatis链路分析:JDK动态代理和责任链模式的应用

大模型安装部署、测试、接入SpringCloud应用体系

Mybatis插件-租户ID的注入&拦截应用

Redis高可用架构与哨兵机制实战解析 分布式缓存系统的高可用性是保障业务连续性的关键技术,其核心在于数据冗余与故障自动恢复机制。Redis通过主从复制实现数据冗余,基于Raft变种协议实现故障转移,最终形成完整的哨兵高可用方案。在电商秒杀、金融交易等场景中,完善的Redis高可用架构能在秒级完成故障切换,有效避免数据丢失和服务中断。本文结合repl-backlog-size配置优化与哨兵选举机制等实战经验,深入解析如何构建可靠的Redis高可用体系。 阅读详情

相关推荐

Redisson实战:从分布式锁到高级数据结构,Java操作Redis的工业级方案

在分布式系统架构中,Redis作为高性能的内存数据存储,是解决缓存、会话管理和分布式协调等问题的核心组件。其基于内存的键值存储原理,提供了极高的读写速度,技术价值在于支撑高并发场景下的数据一致性与系统性能。在实际应用场景中,开发者常需处理分布式锁、原子操作和数据结构同步等复杂问题。本文聚焦于Redisson这一Java客户端框架,它通过封装Redis的分布式特性,提供了如RLock分布式锁和RMap等高级功能,显著降低了分布式编程的复杂度。结合Spring Boot集成与连接池调优,Redisson能有效管

weixin_34184561的博客 314

Redis:哨兵

Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要手动将从节点晋升为主节点,同时还要通知客户端更新主节点地址,这种故障处理方式从一定程度上是无法接受的。Redis2.8以后提供了RedisSentinel哨兵机制来解决这个问题。写在开头本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正。.........

CRUD工程师 4759

Java开发者进阶架构师:从核心基础到分布式系统实战

Java作为企业级应用开发的核心语言,其技术体系的构建始于对语言本质和计算机原理的深刻理解。深入掌握面向对象编程思想、集合框架源码及并发编程模型,是理解现代高并发应用的基础。在此基础上,JVM的内存模型与垃圾回收机制构成了应用性能与稳定性的底层支柱。这些核心技术原理共同支撑起分布式系统架构,为解决数据一致性、高并发访问和系统可用性等工程挑战提供了理论依据。在实际开发中,诸如缓存穿透、雪崩等典型问题,以及线程池配置不当引发的OOM故障,都是检验开发者对原理掌握程度的试金石。本文聚焦于Java开发者如何通过夯实

weixin_34267123的博客 346

Redis哨兵

在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。 这时如果要恢复服务的话,需要人工介入,选择一个「从节点」切换为「主节点」,然后让其他从节点指向新的主节点,同时还需要通知上游那些连接 Redis 主节点的客户端,将其配置中的主节点 IP 地址更新为「新主节点」的 IP 地址。这样也不太“智能”了,要是有一个节点能监控「主节点」的状态,当发现主节点挂了 ,它自动将一个「从节点」切

mz474920631的博客 6888

k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。应用示例包括:- 均匀和非均匀介质中的传播- 模拟各种类型的传感器- 模拟多普勒效应- 衍射、折射和反射- 光声、超声成像- 波束合成、成像重建- 模拟弹性波。

weixin_38452364的博客 6326

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1883

Redis中的哨兵(Sentinel)

​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-优快云博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。

weixin_67596609的博客 5105

Python爬虫实战:手把手教你用Selenium绕过药监局网站的反爬机制(附完整代码)

本文详细介绍了如何使用Selenium绕过药监局网站的反爬机制,提供了一套完整的Python爬虫实战方案。通过浏览器指纹伪装、动态等待策略、会话维持技巧以及分布式采集设计,帮助开发者高效爬取药监局数据,解决政府类网站常见的反爬挑战。

weixin_42620255的博客 737

Redis(10)哨兵

本文将介绍redis哨兵的配置步骤。Redis哨兵是一种用于监控Redis主从复制和自动故障转移的系统Redis哨兵是Redis的核心特性,可以提供自动故障转移和节点监控等功能。在Redis主从复制架构中,如果主节点宕机,需要手动将从节点提升为主节点,这个过程需要人工干预,可能会导致系统的中断。而使用Redis哨兵可以自动检测主节点的状态,一旦主节点宕机,哨兵会自动将其中的一个从节点提升为主节点,确保系统的高可用性。

个人笔记总结 3811

ROST_CM6软件之词频分析、社会网络和语义网络分析、情感分析

简介 ROST CM 6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。 社会网络和语义网络分析(S) 数据 注意,保存时编码要为ANSI 所以这里需要转换一下 准备自定义表与停词表 例如 同时,点击快速分析后,将会弹出网络图 对网络图进行设置 对布局进行设置 对节点、边进行设置 最终效果图 修改 情感分析

积一时之步,臻千里之遥程 9万+

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

Redis哨兵机制:高可用架构与生产实践指南

Redis哨兵(Sentinel)是分布式缓存系统中实现高可用的核心组件,通过监控、自动故障转移和配置更新等机制保障服务连续性。其工作原理基于Raft共识算法,当主节点故障时,哨兵集群通过投票选举新主节点,确保数据一致性。在电商、社交等互联网场景中,哨兵机制能有效应对服务器宕机、网络分区等故障,提供99.9%以上的可用性保障。本文结合脑裂处理、客户端重试等热词,详细解析哨兵集群的部署调优技巧,包括关键参数配置、跨机房方案设计等生产级经验,帮助开发者构建稳定的Redis高可用架构。

weixin_30216561的博客 430

yolov26改进 | 融合改进篇 | 基于 MobileNetV4 和双向特征金字塔网络BiFPN的融合改进(全网独家首发)

本文介绍BiFPN与MobileNetV4融合改进的YOLOv26。许多模块单独使用能够涨点,但直接叠加后可能因功能重复、通道不匹配、尺度冲突而掉点,因此融合前必须理解各模块作用。MobileNetV4利用UIB与Mobile MQA构建轻量主干,提升特征提取能力;BiFPN通过可学习权重完成双向多尺度融合,强化大、中、小目标的信息交互。两者优化Backbone与Neck,功能互补、结构冲突较少。本文提供代码、配置、消融对比及Codex修改思路,MobileNetV4也可替换其他主干,便于组合实验与二次创新

Snu77的博客 241

1.4 java面试题 ,Redis 必问三大块,哨兵,集群

从 Java 面试之王的角度,Redis 必问三大块:数据结构与使用场景、缓存三大问题及解决方案、分布式锁与高可用。我会把这些拆成能直接背的干货,配上代码和血泪教训。面试官最爱问“你用 Redis 做过什么”,你必须把数据结构和业务场景对应起来。血泪教训:别用 HGETALL 扫描大 Hash,拆成小 Hash 或改用 String + JSON 分页。现象:恶意请求 直接打到 DB。 方案: 缓存空值:null 也缓存,过期时间设短(如 60s)。 2. 缓存击穿(热点 key 过期) 现象:某热门

你是人间四月天 237

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

【DaVinci Developer专题】-36-创建一个“既读又写”的Sender Receiver Port(SR PR-Port)

有时会遇到SWC需要对一个Port进行“既可以读,也可以写”的操作。以下图为例,Test_A_SWC中Test_A_Port是P-Port;Test_B_SWC中Test_A_Port是R-Port。Test_C_SWC需要对Test_A_Port同时进行“读”和“写”。 该篇将详细介绍PR-Port的创建方法。 目录 1 创建一个S/R Port Interface 2 将一个PR-Port端口添加至Application Component 3 PR-Port端口初始化 4 Run.

「汽车电子助手」的博客 3013

知乎Redis的演进之路:从单机到2000万QPS的挑战

导读:知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供很多强大的功能。本文作者是是该系统的负责人,文章深入介绍了该系统的方方面面,作为后端程序员值得仔细研究。 作者简介:陈鹏,现知乎存储平台组 Redis 平台技术负责人,2014 年加入知乎技术平台组从事基础架构相关系统的开发与运维,从无到有建立了知...

作一个独立连续的思考者 4459

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【优质推荐】RedisCluster集群模式深入分析

Redis集群的做法是 将数据划分为 16384(2的14次方)个哈希槽(slots),如果你有多个实例节点,那么每个实例节点将管理其中一部分的槽位,槽位的信息会存储在各自所归属的节点中。Redis 集群的节点采用 Gossip 协议来广播信息,每个节点都会定期向其他节点发送ping命令,如果接受ping消息的节点在指定时间内没有回复pong,则会认为该节点失联了(PFail),则发送ping的节点就把接受ping的节点标记为主观下线。另外,单台服务机硬件扩容也是有限制的,不可能无限操作。

优秀技术文章收录 658

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Redis集群搭建与架构设计避坑全攻略:从持久化策略到负载均衡算法详解

本文深入解析Redis集群的生产级搭建与架构设计,涵盖数据分片、一致性哈希、内存淘汰、RDB/AOF持久化策略以及高可用方案。重点探讨了在哨兵与集群模式下如何实现故障转移,并提供了应对缓存雪崩、穿透、击穿及热点Key等经典难题的实战解决方案,旨在帮助中高级开发者构建高性能、高可用的分布式缓存系统。

weixin_29290863的博客 316

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Redis 集群高可用架构解密:数据分片与主从复制的精妙设计

本文深入剖析了Redis高可用架构的演进历程与核心技术,重点解析了主从复制和Redis Cluster的设计原理。文章首先阐述了单机Redis的局限性,引出数据分片与主从复制的必要性;详细讲解了主从复制的同步机制(全量/部分复制)、Sentinel的故障检测与转移流程;深入分析了Redis Cluster的哈希槽分片算法、Gossip协议通信、自动故障转移等核心机制;最后提供了集群部署、性能优化和运维监控的实践建议。全文系统性地呈现了Redis如何通过分布式架构实现高性能、高可用的技术方案,为构建健壮的Re

油墨香^-^的博客 355

Redis面试核心知识点与实战技巧解析

Redis作为高性能的内存数据库,其核心价值在于提供亚毫秒级的数据访问能力。通过精心设计的数据结构如SDS动态字符串、跳表和压缩列表,Redis在内存操作效率上达到极致。在分布式系统中,Redis常被用作缓存、消息队列和分布式锁等关键组件。理解其持久化机制(RDB/AOF)和高可用架构(主从复制、哨兵、集群)是保障数据可靠性的基础。针对面试场景,需要重点掌握数据结构底层实现、性能优化策略以及典型应用场景设计,例如使用ZSET实现排行榜或通过Lua脚本保证分布式锁的原子性。本文结合Redis 6/7新特性,系

weixin_30791095的博客 399

Redis缓存三大难题:穿透、雪崩、击穿的实战解决方案与架构设计

缓存是提升系统性能的核心技术,其核心原理是将高频访问的数据存储在高速介质中,以减少对慢速数据库的直接访问,从而显著降低响应延迟并提升系统吞吐量。在分布式高并发场景下,缓存系统面临缓存穿透、缓存雪崩和缓存击穿三大经典挑战,直接影响服务的稳定性和数据一致性。为了解决这些问题,需要结合布隆过滤器、分布式锁、差异化过期策略以及多级缓存架构等工程实践。例如,布隆过滤器能高效拦截不存在数据的请求,防止缓存穿透;分布式锁则用于保障热点数据重建时的并发安全,避免缓存击穿。这些技术的合理应用,使得缓存系统能够支撑电商秒杀、社

weixin_34384557的博客 322

Java工程师进阶:从CRUD到数据架构,掌握MySQL与Redis深度应用

最近和几位做后端的朋友聊天,发现一个挺有意思的现象:大家聚在一起,话题从技术栈聊到职业发展,最后总会绕回一个共同的焦虑——“Java是不是不行了?” 这种声音,在技术社区、社交媒体上似乎也越来越多。有人觉得是市场饱和,有人归咎于新技术冲击,还有不少人开始怀疑自己是不是技术不行了。 但如果你仔细观察,会发现一个更值得玩味的细节:那些喊着“Java已死”的人,和那些拿着高薪Offer、在核心业务线里稳扎稳打的Java工程师,他们之间的差距,往往不是体现在对某个框架的熟练度,或者能背出多少道八股文。真正的分水岭,

weixin_30562507的博客 314

从GitHub案例到工程实践:如何将缓存命中率提升至94%以上

缓存作为提升系统性能、降低基础设施成本的核心技术,其原理是利用存储介质的访问速度差异与数据局部性,将高频访问数据置于内存等快速存储中。通过合理的淘汰策略(如LRU、TTL)与写入策略(如Cache-Aside),缓存能有效减少对数据库等慢速数据源的直接访问,从而显著降低延迟与资源消耗。在大型互联网架构中,高缓存命中率直接转化为巨大的性能增益与成本节约,例如GitHub通过优化缓存策略,将命中率提升至94%,节省了数百万美元成本。本文以Spring Boot与Redis为例,详解如何构建可观测、可优化的缓存系

weixin_34005042的博客 417

1.8.迄今为止你遇到最大的困难是什么?并且是如何解决的。

通过这次重构,我们把一个资金风险高、状态不可控的流程,变成了一个资源可冻结、步骤可重试、状态可查询的强一致性流程。这让我深刻理解了,在金融核心业务中,TCC 并不是单纯的技术炫技,而是为了保证资金安全这个底线,必须做出的业务设计和系统工程。我的收获是,技术选型永远是业务特性驱动的,没有最好的技术,只有最匹配业务安全要求的技术。好的,完全理解你的需求。下面我给你一个可直接运行、精简但完整的 TCC 分布式事务案例。代码模拟了银行放款场景,包含三个 TCC 资源(额度、账户、支付)和一个协调器。同时展示了。

你是人间四月天 69

后端开发进阶指南:从编程语言到高可用架构的硬核技能栈

在软件工程领域,后端开发是构建稳定、可扩展应用的核心。其核心原理在于通过合理的架构设计和技术选型,处理业务逻辑、数据存储与系统间的通信。掌握后端技术栈能显著提升系统性能、可靠性和开发效率,尤其在应对高并发、大数据量等复杂场景时价值凸显。从基础的编程语言(如Java、Go、Python)和开发范式(OOP、异步编程)切入,到深入数据库优化、缓存策略(如应对缓存穿透、雪崩),再到服务治理、容器化部署,最终服务于构建高可用、易维护的分布式系统。本文聚焦后端工程师的核心成长路径,系统梳理了从编程基础到架构设计所需的

weixin_30756499的博客 347
上一篇: 源码分析:@SchedulerLock分布式锁
下一篇: 深刻理解Redis集群(中):Redis主从数据同步模式
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值