Redis高可用实现方案解析:主从复制与哨兵监控
创作时间:
作者:
@小白创作中心
Redis高可用实现方案解析:主从复制与哨兵监控
引用
CSDN
1.
https://blog.csdn.net/yangshangwei/article/details/145959238
在高并发实时数据访问场景中,Redis作为主流的缓存数据库,其高可用性是系统稳定运行的关键。本文将深入解析Redis的高可用实现方案,包括主从复制和哨兵监控机制,并提供生产环境实践建议,帮助读者构建更可靠的Redis集群。
概述
为了提升对高并发实时数据访问的性能,数据缓存组件应运而生,其中比较常见的就是Memcache和Redis。
Memcache是经典的内存缓存技术,对相关领域的支持比较丰富,各种框架都支持使用该技术。应用系统中经常用到的会话信息可以非常方便地保存到Memcache中,每个键保存的数据量最大为1 MB,支持的数据类型比较单一,仅支持字符串类型(string),不支持持久化操作。
Redis支持比较多的数据类型(string、list、set、sortset、hash),也支持集合计算(set类型),每个键的最大数据量为1 GB,支持持久化操作。Redis一般配合后端数据库使用,其存放的一般是用户当前频繁使用的数据。
组件 | 优点 | 缺点 |
---|---|---|
Memcache | 1. 支持客户端式分布式集群 2. 一致性哈希多核结构 3. 多线程读写性能高 4. 内存分配效率高 | 1. 不支持持久化 2. 仅支持字符串类型 3. 节点故障可能引发缓存穿透 4. 分布式需客户端实现 5. 单键最大1MB 6. 扩容复杂度高 |
Redis | 1. 支持5种数据类型(String/List/Set/ZSet/Hash) 2. 支持持久化(RDB/AOF) 3. 高可用架构(主从+哨兵) 4. 支持分布式分片集群 5. 单线程无锁高性能 6. 单键最大1GB | 1. 多线程并发读写性能低于Memcache 2. 内存碎片问题需定期清理 3. 集群模式下部分命令受限(如跨节点事务) 4. 持久化可能影响瞬时性能 |
Redis 高可用实现方案
Redis 实现高可用主要依靠两大机制:主从复制与哨兵监控。
一、主从复制机制
Redis通过主从复制实现数据冗余与读写分离,支持全量同步和增量同步两种模式。
1.1 全量同步流程
当从服务器首次连接主服务器或数据差异过大时触发全量同步:
全量同步流程:
- 从服务器发送 SYNC 命令:从服务器请求与主服务器建立复制关系。
- 主服务器生成 RDB 快照:接收到 SYNC 命令后,主服务器调用 BGSAVE 命令生成 RDB 文件,同时启动缓冲区记录后续所有的增量命令。
- 传输 RDB 文件:主服务器将 RDB 快照发送给从服务器。
- 从服务器加载 RDB 文件:从服务器加载快照文件,完成数据初步同步。
- 增量命令同步:主服务器从缓冲区读取断线期间的命令,发送给从服务器,从服务器执行后续写入操作。
1.2 增量同步(PSYNC)流程
在理解增量同步之前需要了解下面几个概念
- 复制偏移量:执行复制的主从服务器会以字节为单位维护一个复制的偏移量(offset)。
- 复制缓冲区:一个先进先出(first in first out,FIFO)的队列,用于存储服务器执行过的命令,每次执行命令时主服务器都会将命令记录下来,并存储在复制缓冲区。命令存储的仅仅是数据变更的操作,复制缓冲区的大小是1 MB。
- 服务器运行ID:每个Redis服务器会在启动时生成自己的服务器运行ID(runid),主服务器会将自己的运行ID发送给从服务器,从服务器将其保存起来,当主从服务器断线重连之后就可依据这一ID来判断当前主服务器是否是之前的主服务器,如果是,则启动增量同步,否则启动全量同步。
Redis 2.8+版本引入PSYNC命令优化断线重连场景:
核心逻辑:
- 通过 runid 验证主服务器身份
- 通过 offset 判断数据差异是否超出缓冲区容量(默认1MB)
- 增量同步仅传输丢失的命令,避免全量复制
PSYNC命令的执行流程。
- (1)客户端向服务器发送SLAVEOF命令,让当前服务器成为从服务器。
- (2)从服务器根据自己是否保存主服务器的运行ID来判断是否是第一次复制,如果是第一次复制,则继续执行第3步,否则跳转到第4步。
- (3)从服务器向主服务器发送 PSYNC ? -1 命令进行全量同步。
- (4)从服务器向主服务器发送PSYNC runid offset命令进行增量同步。
- (5)主服务器接收到PSYNC 命令后,先判断runid是否与本机ID一致,如果一致,则会再次判断offset和本机的偏移量差距有没有超过复制缓冲区大小,如果没有,就给从服务器发送CONTINUE命令,此时从服务器只需要等待主服务器传回失去连接期间丢失的命令。
- (6)如果runid和本机ID不一致或者双方偏移量差距超过复制缓冲区大小,就会发送FULLRESYNC runid offset命令,从服务器将runid保存起来,并进行全量同步。
二、哨兵监控机制
主从复制虽然实现了数据同步,但主服务器宕机后写操作将无法进行。为解决此问题,Redis 提供了哨兵(Sentinel)机制,主要功能包括:
- 监控(Monitoring):持续检查主从服务器的运行状态。
- 通知(Notification):在检测到故障时,通过 API 向管理员或其他应用程序发送通知。
- 自动故障迁移(Automatic Failover):当主服务器失效时,从剩余从服务器中选举出一个新主服务器,并指示其他从服务器切换复制目标,同时向客户端返回新主服务器的地址。
2.1 故障转移时序流程
核心功能:
- 监控:多哨兵节点协同检测主服务器状态
- 选举:基于Raft算法选举领头哨兵
- 故障转移:
- 提升从服务器为新主节点
- 修改其他从服务器复制目标
- 更新客户端连接地址
三、方案对比与选型建议
方案 | 适用场景 | 限制条件 |
---|---|---|
主从复制 | 数据冷备份、读写分离 | 主节点故障需手动切换 |
哨兵模式 | 自动故障转移的高可用场景 | 需要至少3个哨兵节点保障决策 |
推荐组合:主从复制+哨兵模式,兼顾数据冗余与自动容灾。
四、生产环境实践建议
- 网络优化:主从节点尽量部署在同机房
- 内存配置:主节点内存建议为最大数据量的1.5倍
- 监控指标:
- 主从复制延迟( master_repl_offset )
- 哨兵节点的 ping 响应时间
- 避免使用 KEYS * 等阻塞命令影响同步性能
通过合理配置主从复制与哨兵监控,可构建秒级故障恢复的高可用Redis集群。
热门推荐
临高乳猪:海南美食界的网红打卡地
种植牙二期手术:完整步骤揭秘与术后护理指南
四川新增旅游直达车:青城山到峨眉山只需两小时
冠心病搭桥术后:药物治疗与生活注意事项
从粒子自旋到标准模型:李群表示理论的物理应用
摩羯座女生当会计师的优势
政策加持下的职教新风口
热带鱼燕鱼饲养指南:水质、水温和饲料管理要点
法乙第20轮:波城FC主场迎战敦刻尔克,谁将笑到最后?
事儿真人也真《我是刑警》催泪收官 国产刑侦剧找回该有的样子
大连理工新增人工智能大师班,北工大探索本硕博贯通培养
驾乘险+补充险,让你驾车无忧
龙须鱼走红:新手也能养的“致富鱼”
黄芪猪蹄汤:糖尿病患者的养生之选
一碗宫廷老母鸡汤:甄嬛传里的养生智慧与现代价值
28年前震惊全国:鹤岗南山煤矿特大持枪抢劫杀人案始末
一挑三事件后,唐柔如何用坚韧精神赢得尊重
一文读懂暴雨洪灾应急预案:8大要素+多地成功实践
认知行为疗法助你走出手术阴影
藏头诗在教育界的兴起:激发文学兴趣的新途径
巴黎圣日耳曼法甲连胜,李刚仁闪耀全场
林诗栋WTT福冈总决赛夺冠,“数学高手”再创奇迹
牙神经修复期间,这些禁忌你知道吗?
电子琴智能化升级:教育创新与音乐创作双突破
12345热线如何快速解决问题?这些技巧请收好!
日本2023年“孤独死”人数超3.5万,老龄化困境引发关注
大年初一不洗头,竟是为了讨好水神?
五招识别网络谣言,警方教你远离虚假信息
来上那么一碗山药银耳羹,帮你滋养脾胃、润肺止咳!
选购冰箱看这篇:人口、饮食习惯决定容量大小