Redis高可用架构全解析:从主从复制到集群方案

简介: Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。

一、为什么需要高可用?

Redis作为核心数据存储,单点故障可能导致:

  1. 数据丢失风险:未持久化的数据将永久丢失
  2. 服务不可用:所有依赖Redis的服务将中断
  3. 业务损失:电商、金融等场景可能造成重大损失

高可用设计目标:故障自动切换,保障服务连续性


二、Redis高可用三大核心方案

1. 基础方案:主从复制(Replication)

架构原理

057f71ab441a48bceb9d267ee82dc5b8_MD5.jpeg

建立主从连接的三种方式(slave连接master)

方式一:客户端发送命令

slaveof <masterip> <masterport>

方式二:启动服务器参数

redis-server -slaveof <masterip> <masterport>

方式三:服务器配置

vim redis.conf
slaveof <masterip> <masterport>

复制流程:

  • 主从复制过程大体可以分为3个阶段
    • 建立连接阶段(即准备阶段)
    • 数据同步阶段
    • 命令传播
      cd3e687094679ec1a6ba2d8413360671_MD5.jpeg
# 全量同步流程
1. 从服务器发送 PSYNC ? -1 命令
2. 主服务器执行 BGSAVE 生成 RDB 文件
3. 主服务器将 RDB 文件发送给从服务器
4. 从服务器清空数据库并载入 RDB 文件
5. 主服务器将复制积压缓冲区的命令发送给从服务器

# 触发全量同步的情况:
- 首次连接
- 复制ID不匹配
- 偏移量不在积压缓冲区范围内

# 增量同步流程
1. 从服务器发送 PSYNC   命令
2. 主服务器检查复制ID和偏移量
3. 如果偏移量在积压缓冲区范围内,发送 +CONTINUE
4. 主服务器发送积压缓冲区中的命令

# 增量同步的优势:
- 减少网络传输
- 降低主服务器负载
- 缩短同步时间

特点

  • 一主多从,读写分离
  • 数据冗余备份
  • 手动故障切换

优势

  • 简单易实现
  • 低成本扩展读性能

局限

  • 故障切换需人工干预
  • 写性能无法扩展
  • 存在主从延迟

2. 自动故障转移——哨兵模式

为什么要有哨兵模式?

在主从复制的架构中,是依赖主节点进行写操作的,如果主节点挂了,那么将无法执行客户端的写操作请求。要想恢复服务,只能通过人工介入的方式,重启主节点或者换一个主节点,太不人性化了。我们想要的是主节点挂了以后,可以自动切换另一个可用的节点为主节点,哨兵(Sentinel)机制就是解决这个问题的,它的作用是实现主从节点故障转移

架构原理

a822c029c1b70e77edf212a17f4ef8ad_MD5.jpeg

核心功能

  • 节点监控
  • 自动故障转移(选主)
  • 通知

    具体工作流程:

    1. 节点监控:哨兵 每秒会向主从节点发送PING 命令,如果服务器正常,会返回给哨兵一个响应 PING 命令的回复有两种情况:
    2. 有效回复:返回 +PONG、-LOADING、-MASTERDOWN 任何一种;
    3. 无效回复:有效回复之外的回复,或者再指定时间内返回任何回复。
      如果一个哨兵收到了无效回复,就会就其标记为主观下线,如果是主节点被标记了主观下线,会向其他哨兵发起投票,其他哨兵根据回复情况投出赞成或反对票,当投票数达到预设值时,就会标记为客观下线,在主节点被标记后,就需要从正常的从节点选一个为新的主节点

      客观下线只针对于主节点,哨兵的赞同票数的值时通过哨兵配置文件中的 quorum 配置,一般设置为哨兵个数的二分之一加 1

    4. 自动故障转移(选主):
    5. 通过选举的方式选择领导哨兵,由领导哨兵来执行主从切换
    6. 从服务器中选择新的升级为主服务器
    7. 执行主从切换

      哨兵选举和主服务器选择以及主从切换的详细过程这里就不展开来讲了。感兴趣的同学可以自行学习

    8. 更新配置信息(通知):通过 pub/sub 机制发布不同事件,让客户端在这里订阅消息

      部署建议

    • 至少3个Sentinel节点
    • 跨物理机部署

特点

优势

  • 自动故障切换
  • 客户端自动发现节点
    局限
  • 写性能瓶颈仍在单主节点
  • 扩容复杂度高

3. 分布式方案——Cluster集群

为什么要有Cluster集群?

有了哨兵以后,我们实现了自动检测以及自动故障转移,看起来已经很完美了。但是呢,随着你的数据量越来越大。虽然你部署了好几台服务器,但是所有的服务器的数据都是一样的,实际可以保存的数据量还是一台服务器可以存储的数据。比如服务器的内存时5G,此时你想存15G的数据,即便有三台服务器,还是只能存5G的数据。Cluster集群就是解决这个问题的,他可以将数据分开在服务器上保存
架构原理
Redis Cluster方案采用哈希槽(Hash Slot),来处理数据和实例之间的映射关系

16384个哈希槽 → 分散到多个主节点
每个主节点对应N个从节点

# 数据分片机制
键名->计算hash值->取模(% 16384)->槽位(Slot 8765)-> 节点

核心特性

  • 数据分片存储
  • 自动数据迁移
  • 节点间Gossip协议通信

部署命令

redis-cli --cluster create 192.168.1.101:6379 192.168.1.102:6379 ...

数据路由原理

slot = CRC16(key) % 16384

优势

  • 真正的分布式架构
  • 支持水平扩展
  • 自动故障转移

局限

  • 客户端需支持集群协议
  • 跨slot操作受限
相关文章
|
6月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
1062 3
|
7月前
|
消息中间件 监控 Cloud Native
高效设计:支持亿级用户社交关系的100W QPS架构方案
面对亿级用户与百万QPS的高并发场景,性能测试成为系统稳定的关键。本文剖析真实业务痛点,详解从接口压测、全链路监控到瓶颈定位的完整性能体系,助你掌握大厂级性能优化能力,从容应对卡顿、宕机等线上挑战。
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
636 0
|
11月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
6月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
648 25
|
7月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
313 1
Redis专题-实战篇二-商户查询缓存
|
11月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
1424 0
|
7月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
11月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
339 32
|
11月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
269 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡