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操作受限
相关文章
|
11月前
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
855 2
|
11月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1035 6
|
11月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
1943 3
|
12月前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
存储 缓存 人工智能
Redis六大常见命令详解:从set/get到过期策略的全方位解析
本文将通过结构化学习路径,帮助读者实现从命令语法掌握到工程化实践落地的能力跃迁,系统性提升 Redis 技术栈的应用水平。
|
NoSQL 关系型数据库 MySQL
Redis高可用之主从复制架构(第一部分)
Redis高可用之主从复制架构(第一部分)
|
机器学习/深度学习 NoSQL Redis
Redis高可用之集群架构(第三部分)
Redis高可用之集群架构(第三部分)
|
存储 负载均衡 NoSQL
Redis 高可用篇:你管这叫主从架构数据同步原理?
Redis 高可用篇:你管这叫主从架构数据同步原理?
740 5
|
存储 监控 安全
ES+Redis+MySQL,这个高可用架构设计太顶了!下
ES+Redis+MySQL,这个高可用架构设计太顶了!下