Redis的主从结构与哨兵机制详解

 更新时间:2026年05月11日 09:32:11   作者:期待のcode  
文章介绍了Redis的主从复制机制,通过一主多从的部署模式解决单点故障和读写压力问题,它详细解释了主从复制的过程,探讨了Redis哨兵机制的工作原理、部署与配置,以及故障转移的过程,感兴趣的朋友跟随小编一起看看吧

redis 主从结构

前面的博客介绍了 Redis的持久化方式,,Redis 的持久化机制能够保障服务重启后数据不丢失,Redis 重启时会自动加载硬盘上的持久化文件,将数据恢复到内存中。但持久化只能规避服务重启的数据丢失问题,无法应对服务器硬盘损坏、机器宕机等硬件故障,单节点 Redis 存在严重单点故障风险,一旦节点故障会直接造成数据丢失、服务不可用。
同时,Redis 本身具备高性能高并发的特性,单台 Redis 服务器可以承载大量并发请求。但在电商、社交等超高并发业务场景下,海量的读写请求会集中施压单节点,即便 Redis 读写性能优异,也会出现请求阻塞、服务器 CPU 和内存负载过高、性能瓶颈凸显的问题。

为了解决单点数据故障和单节点读写压力过大两大问题,Redis 提供了主从复制(主从架构) 机制。主从架构采用一主多从的部署模式:主节点(Master) 同时支持读、写操作,负责处理业务新增、修改、删除等写请求;从节点(Slave) 仅提供只读服务,不参与写业务。所有从节点会自动异步同步主节点的数据,保持与主节点数据最终一致性。
借助主从结构,一方面实现了读写分离,海量读请求分流到从节点,极大分担主节点压力,提升整体并发承载能力;另一方面从节点作为主节点的数据副本,实现了数据异地备份,主节点硬件故障或宕机时,可快速依托从节点恢复服务,彻底解决单节点的单点故障问题。
需要注意的是主从复制过程默认非阻塞,主节点在进行数据同步时,仍可正常处理客户端请求,不影响业务可用性。

如下图:

主从复制的原理
Redis 主从复制分为建立连接、全量同步、增量同步三个核心阶段,整体采用异步复制机制:
5. 从节点启动后,主动与主节点建立网络通信连接,成功握手后,向主节点发起数据同步请求。
6. 主节点接收到从节点的同步请求后,触发bgsave后台持久化,生成 RDB 快照文件;同时将生成 RDB 期间新产生的写命令暂存到缓冲区。随后主节点把完整的 RDB 文件传输给从节点。
7. 从节点接收 RDB 文件后,清空自身原有数据,加载 RDB 文件完成全量数据同步,复刻主节点当前全量数据。
8. 全量同步完成后进入增量同步阶段:主节点每执行一次写操作(增、删、改),都会将对应的命令异步复制发送给所有从节点;从节点持续执行同步过来的命令,始终保持与主节点数据一致。

补充:Redis 2.8 及以上版本采用PSync替代旧版SYNC,支持部分重同步,网络短暂断开重连后无需重新全量同步,仅同步断开期间缺失的数据,效率更高。

主从复制的核心作用

  1. 数据冗余备份
    主从复制实现了跨节点热数据备份,属于持久化之外的另一种数据冗余方案。持久化仅做本地磁盘数据保存,无法应对服务器硬盘损坏、整机宕机;而主从节点分布在不同服务器,可有效规避单节点硬件故障导致的数据丢失。
  2. 故障快速
    恢复当主节点发生宕机、硬件故障等异常时,从节点具备完整数据,可临时接管对外提供服务,快速恢复业务访问,实现服务级别的容灾恢复,降低业务停机时长。
  3. 读写分离,负载均衡
    基于主从架构天然支持读写分离:主节点负责处理所有写请求,从节点专门承载读请求。在互联网多读少写的业务场景下,可部署多个从节点分摊读压力,有效降低单节点负载,大幅提升系统整体并发访问能力。
  4. 高可用架构的基石
    主从复制是 Redis哨兵机制和Redis 集群的底层基础。哨兵实现自动故障转移、集群实现数据分片与横向扩容,都依赖主从复制的数据同步能力,无主从复制则无法搭建高可用、分布式架构。

主从配置

主节点默认无需特殊配置,从节点修改配置文件,如下:

指定主节点地址和端口,Redis5.0+用replicaof,5.0前用slaveof

启动各节点
需要注意的是先启动主节点生效再启动从节点生效

演示:主节点写,从节点同步主节点数据

演示:从节点只能读不能写

redis 哨兵机制

Redis 哨兵是 Redis 官方提供的高可用监控与自动故障转移组件,专门解决主从架构中主节点故障后需手动切换的问题。它本质是一个独立的 Redis 进程(非主从节点),通常以集群形式部署,实现主节点故障的自动化恢复。

哨兵的核心工作原理

  • 阶段 1:故障监测
    所有哨兵节点会持续向 Redis 主从节点发送 PING 心跳检测。若某个主节点在配置时间内未正常响应,当前哨兵会先将其标记为主观下线(SDOWN),即单个哨兵的局部判断,用于避免网络抖动造成的误判。
  • 阶段 2:集群共识
    当前哨兵发现主节点主观下线后,会向其他哨兵节点发送 “是否认为该主节点故障” 的询问请求。当判定故障的哨兵数量达到配置的法定票数(quorum)时,哨兵集群会将该主节点标记为客观下线(ODOWN),这是集群层面的全局共识,标志着主节点真正失效。
  • 阶段 3:领导者选举
    主节点客观下线后,哨兵集群会通过选举算法选出一个领导者哨兵,由其统一执行后续故障转移,避免多个哨兵同时操作引发冲突。领导者会按照节点优先级、数据同步进度、运行 ID 的策略,在健康的从节点中选出数据最完整、最合适的节点作为新主节点。
  • 阶段 5:故障转移
    领导者哨兵将选中的从节点升级为新主节点,并让其他从节点重新复制新主节点的数据,同时更新整个集群的拓扑信息。若旧主节点后续重新上线,会被自动配置为新主节点的从节点,保证架构最终一致。

哨兵的部署与配置

创建哨兵节点

mkdir -p /usr/local/src/redis/sentinel-demo/data/{26379,26380,26381}

编写各个哨兵的核心配置文件(sentinel.conf)

vi sentinel_26379.conf
cp sentinel_26379.conf sentinel_26380.conf
cp sentinel_26379.conf sentinel_26381.conf

修改各个配置文件中的数据目录和日志文件位置

daemonize yes
port 26379
bind 0.0.0.0
protected-mode no
dir "/usr/local/src/redis/sentinel-demo/data/26379"
logfile "/usr/local/src/redis/sentinel-demo/data/26379/sentinel.log"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel deny-scripts-reconfig yes

daemonize yes:哨兵以守护进程方式运行(后台运行);
port 26379:哨兵进程监听的端口;
bind 0.0.0.0:哨兵绑定所有网卡的 IP,允许任意地址访问;
protected-mode no:关闭保护模式,保护模式下哨兵仅允许本地连接,需要注意的是若哨兵部署在不同服务器必须设为no,否则无法跨机器哨兵通信;
dir “/usr/local/src/redis/sentinel-demo/data/26379” 存储哨兵的状态文件,哨兵本身几不持久化数据,主要用于临时文件;
logfile “/usr/local/src/redis/sentinel-demo/data/26379/sentinel.log”:哨兵的日志文件路径;
sentinel monitor mymaster 127.0.0.1 6380 2:哨兵核心监控规则,其中 mymaster 为监控的主节点名称,127.0.0.1 6380 为主节点的 IP 和端口,2 为 quorum(法定票数);
sentinel deny-scripts-reconfig yes:禁止通过脚本修改哨兵的配置,防止恶意篡改。

启动各个哨兵,需要先启动主哨兵,再启动各个从哨兵

../redis-5.0.4/src/redis-sentinel sentinel_26379.conf

展示哨兵对主节点 mymaster(127.0.0.1:6379)的监控状态

../redis-5.0.4/src/redis-cli -p 26379
127.0.0.1:26379> sentinel masters

演示:主节点关闭后开启降为从节点

到此这篇关于Redis的主从结构与哨兵机制详解的文章就介绍到这了,更多相关Redis主从结构与哨兵机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis 使用跳表实现有序集合的方法

    Redis 使用跳表实现有序集合的方法

    Redis有序集合底层为什么使用跳表而非其他数据结构如平衡树、红黑树或B+树的原因在于其特殊的设计和应用场景,跳表提供了与平衡树类似的效率,同时实现更简单,调试和修改也更加容易,感兴趣的朋友一起看看吧
    2024-09-09
  • Redis的LRU机制介绍

    Redis的LRU机制介绍

    这篇文章主要介绍了Redis的LRU机制介绍,Redis会按LRU算法删除设置了过期时间但还没有过期的key,而对于没有设置过期时间的key,Redis是永远保留的,需要的朋友可以参考下
    2015-06-06
  • Redis修改密码的实现方式

    Redis修改密码的实现方式

    Redis修改密码需注意:命令行设置为临时,配置文件需正确重启,先修改redis.windows.conf中的requirepass,再用redis-server.exe redis.windows.conf启动服务,避免密码失效
    2025-07-07
  • Redis缓存雪崩的物种解决方案

    Redis缓存雪崩的物种解决方案

    在高并发系统中,Redis作为核心缓存组件,通常扮演着重要的"守门员"角色,当大量缓存同时失效时,会导致请求如洪水般直接涌向数据库,造成数据库瞬间压力剧增甚至宕机,这种现象被形象地称为"缓存雪崩",本文给大家介绍了Redis缓存雪崩的5种应对措施,需要的朋友可以参考下
    2025-04-04
  • redis-cli命令行工具的使用小结

    redis-cli命令行工具的使用小结

    redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • 深入理解Redis内存回收和内存淘汰机制

    深入理解Redis内存回收和内存淘汰机制

    Redis使用多种过期策略和内存淘汰机制来管理内存,本文主要介绍了深入理解Redis内存回收和内存淘汰机制, 具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 关于redisson缓存序列化的几枚大坑说明

    关于redisson缓存序列化的几枚大坑说明

    这篇文章主要介绍了redisson缓存序列化几枚大坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 图解Redis主从复制与Redis哨兵机制

    图解Redis主从复制与Redis哨兵机制

    这篇文章主要介绍了图解Redis主从复制与Redis哨兵机制,今天分享一下Redis的持久化、事务、管道相关的知识点,需要的朋友可以参考下
    2023-03-03
  • Redis实现集群搭建+集群读写的示例

    Redis实现集群搭建+集群读写的示例

    本文介绍了Redis集群的搭建和读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 彻底弄懂Redis的LRU淘汰策略

    彻底弄懂Redis的LRU淘汰策略

    本文主要介绍了LRU淘汰策略以及实现一个LRU算法,文章会结合图解循序渐进的讲解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论