Redis 是一款高性能的内存数据库,广泛应用于缓存、消息队列和计数场景。为了保证 Redis 在高并发和大数据量下的可用性,官方提供了两套主要机制:主从 + 哨兵机制 和 集群模式。本文将详细讲解它们的原理、特点及区别。
一、Redis 主从节点 + 哨兵机制(Sentinel)
1️⃣ 主从节点概念
-
Master(主节点)
-
提供写操作,也可提供读操作。
-
负责向从节点同步数据。
-
-
Slave(从节点)
-
复制主节点的数据。
-
一般用于读操作或备份,提高可用性和性能。
-
2️⃣ 哨兵机制概念
Redis Sentinel 是 Redis 官方提供的高可用解决方案,主要功能:
-
监控(Monitoring)
- 哨兵周期性检查主从节点是否正常。
-
通知(Notification)
- 当节点故障时,通知管理员或客户端。
-
自动故障转移(Automatic failover)
- 主节点宕机时,自动将从节点升级为主节点,并让其他从节点指向新主节点。
-
配置提供者(Configuration provider)
- 客户端可通过哨兵获取当前主节点信息,避免连接失效。
3️⃣ 哨兵工作流程
-
监控
-
哨兵定期向主从节点发送
PING
命令。 -
超时未响应 → 标记为 SDOWN(主观下线)。
-
多数哨兵认为不可用 → ODOWN(客观下线)。
-
-
选举
-
主节点 ODOWN 后,多哨兵投票选出 Leader。
-
Leader 负责选择从节点升级为新主节点。
-
其他从节点指向新主节点。
-
-
通知
-
节点状态变化或故障转移完成 → 哨兵通过事件或 API 通知客户端。
-
客户端通过
SENTINEL get-master-addr-by-name <name>
获取新主节点地址。
-
4️⃣ 注意事项
-
哨兵节点至少 3 个以上,避免单点故障。
-
客户端必须支持哨兵模式。
-
只适用于单主多从架构,不支持数据分片。
二、Redis 集群模式(Cluster)
1️⃣ 集群概念
Redis Cluster 用于水平扩展 + 高可用,特点:
-
多个 master 节点,每个负责一部分数据。
-
每个 master 可有从节点备份。
-
自动故障转移,不依赖哨兵。
-
数据分片:16384 个 hash slot 分布到各个 master 节点。
2️⃣ 数据分片机制
-
计算 slot
slot = CRC16(key) % 16384
-
分配 slot
-
每个 master 节点负责一部分 slot。
-
例如:
master1: slot 0-5460 master2: slot 5461-10922 master3: slot 10923-16383
-
-
客户端访问
-
根据 key 的 slot 找到对应 master 节点。
-
如果访问错误节点 → 返回 MOVED 错误 → 客户端重定向。
-
3️⃣ 集群高可用
-
Master 宕机 → 从节点通过投票升级为新 master。
-
集群继续提供服务,保证高可用。
-
多 master + 多从节点 → 支持读写分离和水平扩展。
4️⃣ 注意事项
-
客户端必须支持 Cluster 协议(如 Jedis Cluster、Lettuce)。
-
跨槽操作有限,涉及多个 key 的命令必须在同一 hash slot。
-
数据迁移需要注意性能影响。
三、哨兵 vs 集群对比
特性 | 哨兵模式 | 集群模式 |
---|---|---|
数据分片 | ❌ 不分片 | ✅ 分片(hash slot) |
主节点数量 | 1 | 多个 |
从节点 | ✅ | ✅ |
自动故障转移 | ✅ | ✅ |
水平扩展 | ❌ | ✅ |
客户端要求 | 普通客户端 | 支持 Cluster 协议 |
总结
-
哨兵 + 主从:适合单主多从场景,保证主节点故障时快速切换。
-
集群模式:适合数据量大、高并发场景,支持水平扩展和自动容错。
-
两者是独立方案,一般不会同时使用。