🚀 Redis 集群模式详解
Redis 提供了三种集群模式:主从模式、哨兵模式 和 Cluster 模式。其中,主从模式最为常见。本文将详细介绍这三种模式的概念、原理、优缺点及示意图,快来一起学习吧!📚
🌟 三种集群模式概览
- 主从模式:基础的高可用方案,实现读写分离。
- 哨兵模式 (Sentinel):在主从基础上增加监控和自动故障转移。
- Cluster 模式:官方分布式解决方案,支持分片存储和高可用。
1️⃣ 主从复制
1.1 主从模式示意图
1.2 Redis 复制原理
Redis 主从复制分为两部分:同步 (SYNC) 和 命令传播 (Command Propagate)。
- 同步 (SYNC):
- 从服务器主动获取主服务器数据,保持一致。
- 流程:从服务器发送 SYNC 命令 → 主服务器生成 RDB 快照 → 发送给从服务器。
- 命令传播 (Command Propagate):
- 主服务器数据修改后,将命令传播给从服务器。
- 流程:主服务器缓存修改命令 → 发送给从服务器 → 从服务器执行命令保持一致。
- 为何需要两种操作?
- 仅同步时,主服务器生成 RDB 期间仍会接收新命令,若无命令传播,会导致主从数据不一致。因此,命令传播弥补了这段时间的差异。
1.3 主从复制流程
以下两图展示了复制过程:
1.4 优缺点
- 优点:
- 读写分离,提高可用性,解决单机故障。
- 主从复制期间,主从均为非阻塞,服务仍可用。
- 缺点:
- 主节点宕机需手动切换,可能导致数据不一致。
- 多从节点同时恢复时,大量 SYNC 请求可能压垮主节点 IO。
- 在线扩容复杂。
1.5 总结
主从模式通过复制提升了可用性,但手动切换和扩容是其短板。
2️⃣ Sentinel 哨兵模式
2.1 Sentinel 系统
哨兵模式是 Redis 的高可用解决方案,通过一个或多个 Sentinel 实例监控主从集群,并在主节点下线时自动切换从节点为主节点。
系统架构图
监控过程
- Sentinel 通过发送命令(如 PING)监控 Redis 服务器状态。
- 通过发布订阅模式通知状态变化。
2.2 故障转移
转移过程
- 主节点 (Server1) 下线:
- Sentinel 将从节点 (Server2) 升级为主节点:
- 原主节点恢复后降级为从节点:
故障检测
- Sentinel 每秒发送 PING 命令。
- 若某实例响应超时(超过
down-after-milliseconds
),标记为主观下线。 - 多个 Sentinel 确认后,标记为客观下线。
2.3 优缺点
- 优点:
- 继承主从模式优点。
- 自动故障转移,提升高可用性。
- 缺点:
- 在线扩容复杂。
2.4 总结
哨兵模式增强了主从集群的高可用性,适合需要自动切换的场景。
3️⃣ Cluster 模式
3.1 Redis Cluster 简介
Redis Cluster 是 3.0 版本引入的分布式解决方案,采用 Sharding(分片) 技术,实现高可用和分布式存储。
架构图
3.2 数据分片原理
- Redis Cluster 使用 16384 个哈希槽。
- 每个 Key 通过 CRC16 算法计算后对 16384 取模,分配到对应槽。
- 客户端连接任意节点,节点根据槽信息定位数据位置。
3.3 复制原理
- 每个主节点可配多个从节点。
- 主节点宕机时,从节点接管。
- 若主从同时宕机,集群不可用。
- 主节点间通过 PING 检测故障,半数以上主节点确认某节点宕机则触发切换。
3.4 优缺点
- 优点:
- 分布式存储,节省内存。
- 高可用与读写分离兼顾。
- 缺点:
- 实现复杂,维护成本较高。
3.5 总结
Cluster 模式适合大规模分布式场景,兼顾高可用与资源效率。
评论区