数据库与缓存11 分钟阅读更新于 2026-07-30

Redis 集群模式总览:主从复制、哨兵和切片集群怎么选

Redis 集群模式内容,讲清主从复制、哨兵、切片集群分别解决什么问题,以及不同阶段如何选型。

相关工具

先看系统到底缺什么

Redis 从单机走向集群,通常不是因为名字更高级,而是单机开始扛不住某个问题。可能是读流量太高,需要更多副本分担读;可能是主节点故障后不能靠人工切换;也可能是数据量或写压力已经超过单个主节点的能力。问题不同,架构也不同。

相关基础内容 对 Redis 集群模式的概括很清楚:主从复制,是将一个 Redis 实例的数据复制到其他实例,其中一个是主节点,其余是从节点,主节点将写操作传播到所有从节点;哨兵,是监控 Redis 实例状态,发现主节点故障并自动进行故障转移;切片集群,是将数据分布在不同服务器上,以此降低系统对单主节点的依赖。

这三句话其实已经把选型逻辑讲出来了。主从复制解决数据副本和读扩展;哨兵解决故障发现和自动切换;切片集群解决数据分布和横向扩展。不要先问“哪个最好”,先问当前系统缺的是副本、故障转移,还是分片能力。

Redis 集群模式总览图解,展示主从复制、哨兵 Sentinel 和切片集群三种模式的结构、数据复制、故障转移、槽位分布和选型路径
Redis 三种集群模式的定位

主从复制负责数据复制和读扩展;哨兵负责监控和故障转移;切片集群把数据分布到多个主节点,降低单主节点依赖。

主从复制:先有副本,再谈高可用

主从复制是最基础的扩展方式。一个主节点负责写入,把写操作传播给多个从节点。从节点保存主节点的数据副本,可以用于读扩展、备份、容灾准备。文中说主节点将写操作传播到所有从节点,说的就是这条复制链路。

它解决的第一个问题是数据不只放在一台 Redis 上。主节点挂了,至少从节点里还有一份数据副本。它解决的第二个问题是读压力。某些读请求可以走从节点,让主节点把更多精力放在写入和复制上。

但主从复制本身并不等于自动高可用。主节点故障后,如果没有哨兵或其他机制,谁来判断主节点真的不可用,谁来提升从节点,客户端怎么知道新主节点地址,这些都还没有解决。所以主从复制是基础,不是完整答案。

主从复制适合什么阶段

如果系统刚从单机 Redis 走出来,主从复制通常是第一步。它改动相对小,能先获得副本和读扩展能力。对缓存场景来说,从节点还能在主节点压力大时承接部分读取。

主从复制也适合做备份准备。即使业务暂时不从从节点读,也可以先让从节点持续接收主节点数据,降低单机故障时完全无副本的风险。很多系统后面引入哨兵,也是建立在主从结构之上。

它的边界也要清楚。主从复制不能让多个主节点同时分担写入,也不能自动完成故障转移。写压力主要还在主节点上,数据容量也主要受主节点限制。如果你的瓶颈是写入或内存容量,主从复制只能缓解一部分,不能从根上解决。

哨兵:让故障切换自动发生

资料 对哨兵的定义是:监控 Redis 实例的状态,发现主节点故障并自动进行故障转移。这里的关键词是监控和故障转移。哨兵不是用来保存业务数据的,它站在旁边观察主从节点是否正常。

当主节点不可用时,哨兵会通过一定机制从从节点里选出一个新的主节点,然后通知其他从节点切换到新主节点。客户端也需要感知新的主节点位置,继续把写请求发到正确的地方。这样故障恢复不再完全依赖人工操作。

哨兵解决的是主从复制留下的关键缺口:主节点挂了怎么办。没有哨兵,主从结构只是有副本;有了哨兵,系统才具备自动发现故障、自动提升新主的能力。

哨兵适合什么阶段

当 Redis 已经进入生产关键链路,主节点故障不能长时间依赖人工切换时,就应该考虑哨兵。尤其是缓存层承载了大量流量,或者 Redis 保存了会话、计数、限流状态,主节点不可用会直接影响业务。

哨兵的引入也意味着系统复杂度上升。你要部署多个 Sentinel 节点,配置监控对象,处理客户端连接发现,关注误判和切换窗口。它不是“加一个组件就完事”,而是让 Redis 集群具备自动恢复能力。

如果业务只需要一个简单缓存,故障后可以短暂降级或重启,哨兵未必是第一天就必须上。可一旦 Redis 不可用会明显影响用户请求,人工切换又慢,就该把哨兵纳入架构。

切片集群:数据分布到多台机器

资料 对切片集群的描述是:将数据分布在不同的服务器上,以此降低系统对单主节点的依赖。这句话很重要,因为它讲的是另一个维度的问题:不是主节点挂了怎么办,而是单个主节点本来就装不下、扛不住怎么办。

切片集群会把数据按规则分布到多个主节点上。每个主节点负责一部分数据,客户端请求会根据 key 路由到对应节点。这样数据容量和写入压力可以在多个主节点之间分摊。相比一个主节点带多个从节点,切片集群更强调横向扩展。

这也意味着复杂度更高。你要处理数据分布、槽位迁移、节点扩容、客户端路由、跨 key 操作限制等问题。切片集群不是主从复制的简单加强版,而是把 Redis 从一个主节点模型推进到多主分片模型。

切片集群适合什么阶段

当 Redis 数据量超过单机内存,或者写入压力集中在一个主节点上无法继续扩展时,切片集群才真正有必要。它适合需要更大容量、更高吞吐、更强横向扩展能力的系统。

如果业务只是读多写少,主节点容量还够,用主从加哨兵可能更简单。切片集群会带来分片和路由复杂度,很多命令在跨槽位时会受限制。为了还没出现的容量问题提前上切片,可能会让系统维护成本过早升高。

但当容量和写压力已经明确成为瓶颈,切片集群就是更自然的方向。它把数据拆到多个主节点上,让系统不再强依赖一个主节点的内存和写能力。

三种模式不是互斥关系

主从复制、哨兵、切片集群不是三选一的孤立方案。很多架构会从主从复制开始,再加哨兵做自动故障转移;更大规模时,切片集群里的每个主节点也可以配置从节点,形成分片加副本的结构。

更准确的理解是:主从复制提供副本,哨兵管理故障切换,切片集群负责分布数据。它们关注的层面不同,可以组合使用。只是在不同规模阶段,优先解决的问题不一样。

小系统先把单机用稳,出现读扩展和副本需求时上主从;主节点故障不能手工处理时加哨兵;单主容量或写入压力到顶时,再考虑切片集群。这个演进路径通常比一开始堆满所有组件更稳。

选型时看三个问题

第一个问题:是不是只缺副本和读扩展?如果答案是是,主从复制就能解决大部分需求。它让数据有副本,也能让从节点承接一部分读取。

第二个问题:主节点故障后能不能人工处理?如果不能,哨兵就有价值。它负责监控、判断故障、提升新主、通知切换,减少人工介入时间。

第三个问题:单个主节点的内存或写入能力是不是已经不够?如果是,才进入切片集群的讨论。切片集群解决的是数据和压力分布,不只是高可用。把这三个问题按顺序问完,选型就不会乱。

面试可以这样回答

如果被问 Redis 集群模式有哪些,可以按 相关的三类回答:主从复制、哨兵、切片集群。主从复制是一个主节点把写操作传播给多个从节点,从节点保存数据副本;哨兵负责监控 Redis 实例状态,发现主节点故障后自动故障转移;切片集群把数据分布在不同服务器上,降低系统对单主节点的依赖。

然后讲每种模式解决什么问题:主从复制解决数据副本和读扩展,但主节点故障仍需要切换;哨兵在主从基础上解决自动故障转移;切片集群解决单主节点容量和写压力限制,通过分片实现横向扩展。

最后给选型思路:只需要副本和读扩展,选主从;需要自动故障转移,选主从加哨兵;数据量或写压力超过单主能力,再考虑切片集群。这样回答会比只背三个名词更像真实工程判断。

常见问题

Redis 集群模式主要有哪些?

常见有主从复制、哨兵和切片集群。主从复制负责数据副本,哨兵负责监控和故障转移,切片集群负责数据分布和横向扩展。

主从复制解决什么问题?

它把主节点数据复制到从节点,提供数据副本和读扩展能力。但单独的主从复制不等于自动故障转移。

哨兵的作用是什么?

哨兵监控 Redis 主从节点状态,发现主节点不可用时自动选出新的主节点,并通知其他节点和客户端切换。

什么时候需要切片集群?

当单个主节点的内存容量或写入压力成为瓶颈,需要把数据分布到多台服务器上时,就需要考虑切片集群。

MySQL 与 Redis

继续阅读

返回专题