一、核心概念与关系
Redis 的 主从复制、哨兵(Sentinel) 和 集群(Cluster) 是逐步演进的高可用与分布式解决方案,三者关系如下:
-
主从复制:数据冗余与读写分离的基础。
-
哨兵:在主从基础上实现自动故障转移(高可用)。
-
集群:在分片(Sharding)基础上集成主从复制和自动故障转移(分布式+高可用)。
三者关系可总结为:
-
主从复制 是数据同步的基础机制。
-
哨兵 是主从的增强,提供故障检测与自动切换。
-
集群 是更高维度的分布式架构,融合主从复制和分片技术。
二、主从复制(Master-Slave Replication)
1. 核心作用
-
数据冗余:从节点(Slave)复制主节点(Master)数据,实现备份。
-
读写分离:主节点处理写请求,从节点处理读请求,提升读吞吐量。
2. 工作原理
-
全量同步:
-
从节点首次连接主节点时,主节点生成 RDB 快照发送给从节点。
-
从节点加载 RDB 文件完成初始数据复制。
-
-
增量同步:
-
主节点将写命令写入 复制缓冲区(Replication Buffer)。
-
从节点持续接收并执行缓冲区中的命令,保持数据一致性。
-
3. 架构局限
-
单点故障:主节点宕机后需手动切换从节点为主节点。
-
写性能瓶颈:所有写操作集中在主节点。
三、哨兵(Sentinel)
1. 核心作用
-
监控:持续检查主从节点健康状态。
-
自动故障转移:主节点宕机时,选举新主节点并通知客户端。
-
配置中心:客户端通过哨兵获取最新的主节点地址。
2. 工作原理
-
监控阶段:
-
哨兵通过定期发送
PING
命令检测节点状态。 -
若主节点未响应,哨兵将其标记为 主观下线(SDOWN)。
-
-
选举阶段:
-
多个哨兵协商确认主节点 客观下线(ODOWN)。
-
哨兵通过 Raft 算法选举 领导者哨兵 负责故障转移。
-
-
故障转移:
-
领导者哨兵从从节点中选出新主节点(基于优先级、复制偏移量等)。
-
通知其他从节点复制新主节点,并更新客户端连接。
-
3.经典架构
-
+------------+ | Sentinel | +------------+ | +------------+ | +------------+ | Master |<----+----->| Slave 1 | +------------+ +------------+ | v +------------+ | Slave 2 | +------------+
4.适用场景
-
中小规模 Redis 服务,需要高可用但无需水平扩展
四、Redis 集群(Cluster)
1. 核心作用
-
数据分片(Sharding):将数据分布到多个节点,突破单机内存限制。
-
高可用:每个分片(Shard)采用主从复制,支持自动故障转移。
2. 工作原理
-
分片机制:
-
集群将数据划分为 16384 个哈希槽(Slot),每个节点负责部分槽。
-
客户端通过
CRC16(key) % 16384
计算 key 所属槽,路由到对应节点。
-
-
节点通信:
-
节点间通过 Gossip 协议 交换状态信息(如槽分配、节点状态)。
-
-
故障转移:
-
若主节点宕机,其从节点通过 选举机制 升级为新主节点(类似哨兵)。
-
客户端自动重定向到新主节点。
-
3. 典型架构
+----------------+ +----------------+
| Master 1 |<----->| Slave 1-1 |
| (Slots 0-5460) | | (Replica) |
+----------------+ +----------------+ | v
+----------------+ +----------------+
| Master 2 |<----->| Slave 2-1 |
| (Slots 5461-10922)| | (Replica) |
+----------------+ +----------------+ | v
+----------------+ +----------------+
| Master 3 |<----->| Slave 3-1 |
| (Slots 10923-16383) | | (Replica) |
+----------------+ +----------------+
4. 关键特性
-
数据迁移:支持动态增删节点,槽可重新分配。
-
跨槽操作限制:
MGET
、MSET
等命令需所有 key 在同一节点,否则需用{hash_tag}
强制路由。
5. 适用场景
-
大规模数据存储,需水平扩展和高可用性。
五、三者对比总结
特性 | 主从复制 | 哨兵模式 | 集群模式 |
---|---|---|---|
核心目标 | 数据冗余、读写分离 | 高可用(自动故障转移) | 分布式存储 + 高可用 |
数据分布 | 全量复制 | 全量复制 | 分片(16384 槽) |
故障处理 | 手动切换 | 自动切换 | 自动切换(内置哨兵逻辑) |
扩展性 | 垂直扩展(单机) | 垂直扩展 | 水平扩展(多节点分片) |
适用场景 | 小型应用 | 中小型高可用场景 | 大型分布式系统 |
六、常见问题解答
Q1:集群模式下还需要哨兵吗?
-
不需要。集群内置了故障检测与转移逻辑,无需额外部署哨兵。
Q2:主从复制能否与集群共存?
-
可以。集群中的每个分片(主节点)可配置多个从节点,形成“主从+集群”架构。
Q3:如何选择架构?
-
数据量小 + 高可用需求 → 哨兵模式。
-
数据量大 + 高可用需求 → 集群模式。
Q4:集群的故障转移时间?
-
通常 10~30 秒,依赖节点状态检测和选举机制。