Redis 哨兵模式专注于主节点故障自动切换,适合数据量单机可容纳且高可用要求高的场景;集群模式同时解决数据分片和高可用,适合数据量超过单机内存或需要水平扩展的场景。
先说结论:哨兵模式是高可用专项解决方案,集群模式是大规模存储加高可用综合解决方案。
- 适合:数据量小于单机内存上限选哨兵,需水平扩展选集群。
- 重点看:哨兵不支持原生分片,集群通过 16384 个槽位实现数据分片。
- 别忽略:两种模式异步复制均存在故障转移时数据丢失窗口。
快速处理思路
根据数据规模和扩展需求决定架构,先评估单机内存是否足够,再确认是否需要多节点写入。
如果业务数据量在单机内存承受范围内且主要瓶颈是高可用,优先部署哨兵模式;如果数据量预计增长超过单机内存或需要线性提升读写性能,直接选择集群模式。
为什么会这样
设计目标不同导致架构差异,哨兵解决主节点故障手动切换问题,集群解决单机内存和并发瓶颈。
哨兵模式基于主从复制,核心是监控和自动选举,不负责数据分片,所有节点存储全量数据。集群模式引入哈希槽机制,将数据分散到多个主节点,每个主节点管理一部分槽位,天然支持横向扩展。
分步处理
第一步,评估数据容量。确认当前数据量及未来增长是否超过单节点内存限制,若超过则排除哨兵模式。
第二步,确认扩展需求。判断是否需要通过增加节点线性提升写性能,哨兵模式写操作仅限主节点,无法横向扩展写能力。
第三步,检查客户端支持。确认应用使用的 Redis 客户端是否支持集群协议,集群模式需要客户端支持重定向和槽位计算。
第四步,规划节点数量。哨兵模式建议至少 1 主 2 从加 3 哨兵,集群模式建议至少 3 主 3 从以保证高可用和槽位分布。
怎么验证是否生效
使用 INFO replication 命令查看主从状态,若角色显示 master 或 slave 且无 cluster _enabled 则为哨兵或主从模式。
使用 CLUSTER INFO 命令查看集群状态,若 cluster_state 显示 ok 且 cluster_slots_assigned 为 16384 则集群模式生效。
检查应用日志,确认连接 Redis 时是否收到 MOVED 或 ASK 重定向响应,集群模式下客户端需处理此类重定向。
常见坑
故障转移数据丢失。两种模式主从复制均为异步,主节点宕机时未同步到从节点的数据会丢失,不能假设数据绝对一致。
客户端兼容性问题。旧版客户端可能不支持集群协议,连接集群模式 Redis 时会报错或直接连接失败。
事务限制。集群模式不支持跨槽位事务,多 key 操作若哈希槽不同无法保证原子性,需使用哈希标签解决。
常见问题
哨兵模式和集群模式能同时用吗
不需要也不建议混用。集群模式内置了故障转移机制,不再依赖独立哨兵进程,同时使用会增加架构复杂度且无额外收益。
小数据量场景选哪个更稳妥
数据量较小且无需水平扩展时选哨兵模式。哨兵模式部署和维护成本较低,配置简单,能满足高可用需求。
集群模式最少需要多少节点
生产环境建议至少 6 个节点。通常配置 3 个主节点和 3 个从节点,以保证任意一个主节点故障时有从节点可接管。
参考来源
- Redis 集群模式深度对比:主从、哨兵与 Cluster 的工程选型指南
- Redis 哨兵与集群模式
- Redis 哨兵模式和集群模式区别
- Redis 高可用解决方案哨兵模式与集群模式的比较