Redis高可用 系统性知识体系
一、Redis高可用体系整体演进与核心目标
1.1 体系演进脉络
Redis高可用能力是逐步迭代完善的,整体遵循单机→主从复制→哨兵Sentinel→Redis Cluster的演进路径,每个阶段针对性解决上一阶段的核心痛点:
- 单机Redis:仅能实现基础缓存/存储能力,存在单点故障、内存上限、读写性能瓶颈三大核心问题;
- 主从复制:实现数据多副本热备、读写分离,解决单点数据丢失与读性能瓶颈,是所有高可用方案的底层基础;
- 哨兵Sentinel:基于主从架构实现自动化故障转移、节点监控、配置中心能力,解决主从架构下主节点故障需人工介入的痛点,完成主从架构的高可用闭环;
- Redis Cluster:官方原生分布式分片方案,实现数据水平分片、去中心化集群管理、自带主从高可用,彻底解决单机内存上限与写性能瓶颈,支撑大规模业务场景。
1.2 高可用核心设计目标
- 故障自愈:节点故障时自动化完成故障转移,无需人工介入,最大程度降低服务不可用时间;
- 数据一致性:通过多副本复制保证数据不丢失,兼顾性能与一致性平衡;
- 水平扩展:支持集群节点动态扩缩容,线性提升集群存储与读写性能;
- 负载均衡:通过合理的分片与调度机制,避免节点负载不均,保障集群稳定性;
- 运维可控:提供完善的监控、告警、配置管理能力,降低大规模集群运维成本。
二、基础层:主从复制(Replication)
2.1 核心定位与解决的痛点
主从复制是Redis高可用的基石,核心是实现一主多从的数据副本同步,主节点负责写操作,从节点负责读操作与数据备份。
- 核心解决痛点:单点数据丢失风险、单机读性能瓶颈、故障恢复数据重建成本高。
2.2 主流架构模式
| 架构模式 | 核心特点 | 适用场景 |
|---|---|---|
| 一主一从 | 1主1从,架构最简单,主从数据完全一致 | 数据冷备、小规模读写分离场景 |
| 一主多从 | 1主N从,多个从节点并行承接读请求 | 读多写少、高并发读场景 |
| 树状级联复制 | 主节点仅同步给少数从节点,下层从节点从上层从节点同步数据 | 大规模从节点集群,降低主节点复制带宽与CPU压力 |
2.3 核心实现原理
Redis主从复制分为全量复制与增量复制两个核心阶段,基于PSYNC 2.0协议实现(替代旧版SYNC协议,解决断线重连后强制全量复制的性能问题)。
2.3.1 核心基础数据结构
- 复制偏移量(offset):主节点和从节点各自维护一个偏移量,主节点每处理一个写命令就递增偏移量,从节点同步完命令后也递增偏移量,通过偏移量差值判断主从数据一致性。
- 复制积压缓冲区(repl_backlog_buffer):主节点维护的固定长度环形缓冲区,存储最近执行的写命令,用于增量复制,默认大小1MB。
- 节点运行ID(run_id):每个Redis节点启动时生成的唯一40位字符串,用于标识节点身份,从节点断线重连时通过run_id判断是否为之前的主节点,决定是否可以增量复制。
2.3.2 全量复制(首次同步/无法增量同步场景)
全量复制是主从首次建立连接时的同步方式,基于RDB快照实现,完整流程:
- 从节点发送
PSYNC ? -1命令,向主节点发起首次复制请求; - 主节点执行
BGSAVE命令,后台生成RDB快照文件; - 主节点将RDB文件发送给从节点,从节点清空本地所有数据,加载RDB文件到内存;
- 主节点将生成RDB期间收到的所有写命令,存入复制缓冲区,待从节点加载完RDB后,批量发送给从节点执行;
- 从节点执行完缓冲区的写命令,主从数据达到一致状态,全量复制完成,进入持续增量复制阶段。
2.3.3 增量复制(断线重连优化)
主从网络断线重连后,若满足增量复制条件,主节点仅发送断线期间缺失的写命令,无需全量复制,大幅降低同步开销。
- 触发条件:从节点重连后,主节点run_id与断线前一致,且从节点的复制偏移量仍在主节点的复制积压缓冲区范围内;
- 核心流程:从节点发送
PSYNC <run_id> <offset>命令,主节点校验通过后,将积压缓冲区中offset之后的写命令发送给从节点,从节点执行后恢复数据一致。
2.4 完整复制生命周期
- 连接建立:从节点配置
slaveof <master_ip> <master_port>,与主节点建立socket连接,完成身份认证; - 权限校验与能力协商:主从节点交换版本信息、复制能力(是否支持PSYNC 2.0);
- 数据同步:根据节点状态选择全量/增量复制,完成基准数据同步;
- 持续命令传播:主节点每执行一个写命令,就异步将命令发送给所有从节点,从节点执行命令,保持主从数据一致。
2.5 核心问题与优化方案
| 核心问题 | 根因分析 | 优化方案 |
|---|---|---|
| 全量复制性能开销大 | BGSAVE fork子进程阻塞主节点、RDB传输占用大量带宽、从节点加载RDB阻塞服务 | 1. 调大repl_backlog_size,降低全量复制触发概率;2. 开启无盘复制repl-diskless-sync yes,主节点直接通过网络发送RDB给从节点,避免本地磁盘IO;3. 业务低峰期执行主从首次同步 |
| 主从数据不一致 | 异步复制存在延迟、主节点阻塞、从节点故障、网络延迟 | 1. 主从节点部署在同机房,降低网络延迟;2. 监控主从复制偏移量差值,设置告警阈值;3. 强制读一致性场景,路由到主节点读取 |
| 主节点复制压力过大 | 一主多从场景下,主节点需同时给多个从节点发送RDB与增量命令 | 采用树状级联复制架构,主节点仅同步给2-3个上层从节点,下层从节点从上层从节点同步 |
| 从节点过期键读取异常 | 从节点默认不会主动删除过期键,主节点删除过期键的命令同步延迟 | Redis 4.0+开启slave-lazy-expire yes,从节点读取时主动过滤过期键;避免在从节点执行大量过期键的遍历操作 |
三、主从高可用增强:哨兵Sentinel
3.1 核心定位与解决的痛点
Sentinel(哨兵)是Redis官方提供的主从架构高可用管理组件,本质是一个运行在特殊模式下的Redis节点,核心解决主从架构下主节点故障需人工手动切换的核心痛点,实现故障自动化自愈。
3.2 分布式架构设计
哨兵架构必须采用集群部署(奇数个节点,最低3节点),避免单点故障,整体分为两大核心组件:
- 哨兵集群:分布式独立节点,两两之间建立连接,协同完成节点监控、下线判定、领导者选举、故障转移;
- 数据节点集群:被监控的Redis主从复制组,包含1个主节点与N个从节点。
3.3 四大核心能力
- 监控(Monitoring):持续周期性检测主节点、从节点、其他哨兵节点的存活状态与健康度;
- 通知(Notification):当检测到节点故障时,通过API、脚本通知运维人员或上下游应用系统;
- 自动故障转移(Automatic Failover):主节点故障时,自动完成从节点升主、其他从节点切换复制源、客户端路由更新,实现故障自愈;
- 配置中心(Configuration Provider):客户端连接哨兵集群获取主节点地址,故障转移完成后,哨兵集群向客户端推送最新的主节点地址,客户端无需重启即可切换。
3.4 核心原理与全流程
3.4.1 节点发现与心跳机制
- 节点发现:
- 哨兵启动时,通过配置的主节点地址,向主节点发送
INFO命令,获取主节点的所有从节点列表; - 所有哨兵节点通过专属发布订阅频道
__sentinel__:hello,每2秒广播一次自身信息与主节点状态,其他哨兵订阅该频道,自动发现集群中的其他哨兵节点,并建立TCP连接。
- 哨兵启动时,通过配置的主节点地址,向主节点发送
- 心跳保活:每个哨兵节点每秒向所有主节点、从节点、其他哨兵节点发送
PING命令,通过响应结果判断节点存活状态。
3.4.2 下线判定机制
哨兵采用双层判定机制,避免网络抖动导致的故障误判,仅针对主节点的客观下线才会触发故障转移。
- 主观下线(SDOWN):
- 单个哨兵节点发送
PING命令后,若节点超过down-after-milliseconds配置的时间未返回有效响应,该哨兵会将节点标记为主观下线; - 从节点、其他哨兵节点的主观下线不会触发后续流程,仅主节点的主观下线会进入客观下线判定。
- 单个哨兵节点发送
- 客观下线(ODOWN):
- 哨兵将主节点标记为SDOWN后,会向集群中其他所有哨兵节点发送
SENTINEL is-master-down-by-addr命令,询问其他哨兵是否认为该主节点已下线; - 当该哨兵收到超过配置的quorum(法定人数) 的同意下线回复后,会将主节点标记为客观下线,正式触发故障转移流程。
关键规范:quorum建议设置为哨兵集群节点数的一半+1(如3节点集群设2,5节点集群设3),且必须满足集群过半节点存活才能完成判定,避免脑裂。
- 哨兵将主节点标记为SDOWN后,会向集群中其他所有哨兵节点发送
3.4.3 哨兵领导者选举
主节点客观下线后,需先通过Raft一致性算法选举出一个哨兵领导者,由该领导者全权负责故障转移执行,避免多个哨兵同时操作导致混乱。
核心选举规则:
- 率先标记主节点为客观下线的哨兵,会发起选举,向其他哨兵请求投票,要求选自己为领导者;
- 每个哨兵在同一个配置纪元(epoch,全局递增的逻辑时钟)内,只能投出一票,优先给最先发起请求的哨兵投票;
- 若某个哨兵获得超过集群半数的选票,且票数≥quorum,则成功当选为领导者;
- 若选举超时无胜出者,等待随机超时时间后重新发起选举,直到选出领导者。
3.4.4 自动化故障转移全流程
哨兵领导者选举完成后,执行完整的故障转移流程,全程无需人工介入:
- 合格新主节点筛选:从故障主节点的所有从节点中,过滤掉不合格的候选者,筛选规则:
- 排除已主观下线、断线、5秒内未回复哨兵
INFO命令的从节点; - 排除与主节点断线时间超过
down-after-milliseconds * 10的从节点,保证数据完整性;
- 排除已主观下线、断线、5秒内未回复哨兵
- 新主节点优先级排序:对合格候选者按以下规则从高到低排序,排名第一的当选新主节点:
- 第一优先级:
slave-priority(从节点优先级)数值越小,优先级越高,优先级为0的节点不参与选举; - 第二优先级:复制偏移量offset最大的节点(数据最完整);
- 第三优先级:节点run_id最小的节点;
- 第一优先级:
- 从节点升主:哨兵领导者向当选的新主节点发送
SLAVEOF NO ONE命令,将其升级为主节点; - 从节点切换复制源:哨兵领导者向其他所有从节点发送
SLAVEOF <新主IP> <新主端口>命令,让所有从节点从新主节点同步数据; - 旧主节点降级处理:将故障的旧主节点标记为从节点,待其恢复上线后,自动让其从新主节点同步数据;
- 配置更新与通知:哨兵集群更新集群配置,向客户端推送新主节点地址,完成整个故障转移流程。
3.5 核心风险与优化方案
3.5.1 脑裂问题与解决方案
- 问题描述:主节点因网络分区与哨兵集群失联,哨兵集群选举出新主节点,此时旧主节点仍在正常运行,客户端仍向旧主节点写入数据;网络恢复后,旧主节点被降级为从节点,会清空本地数据,从新主节点全量同步,导致分区期间写入的数据全部丢失。
- 核心解决方案:通过主节点配置双参数兜底,强制主节点在无合格从节点时拒绝写操作:
# 主节点至少有1个从节点保持连接,才允许执行写操作 min-replicas-to-write 1 # 从节点复制延迟最大不超过10秒,否则视为不合格 min-replicas-max-lag 10
3.5.2 其他核心优化
- 部署规范:哨兵集群至少3个节点,跨机房/跨服务器部署,避免与Redis数据节点部署在同一台服务器;
- 参数调优:
down-after-milliseconds根据业务容忍度设置,建议3000-5000ms,避免过短导致误判,过长导致故障恢复慢; - 客户端优化:客户端配置多个哨兵节点地址,避免单哨兵节点故障导致无法获取主节点地址;监听哨兵的主节点切换事件,自动更新连接池;
- 权限控制:哨兵集群与Redis数据节点配置统一的密码,避免认证失败导致监控与故障转移失效。
四、分布式高可用终极方案:Redis Cluster
4.1 核心定位与解决的痛点
Redis Cluster是Redis官方原生的分布式分片集群方案,也是大规模Redis集群的首选方案,核心解决两大行业痛点:
- 单机内存上限问题:通过数据分片,将数据分散存储到多个节点,突破单机内存限制;
- 单机写性能瓶颈:去中心化架构,多个主节点并行承接写请求,线性提升集群写性能;
同时内置主从复制、自动化故障转移能力,无需依赖哨兵即可实现完整的高可用闭环。
4.2 去中心化集群架构
- 核心组成:集群由多个分片组成,每个分片对应一个主从复制组(1个主节点+N个从节点,建议1主2从);
- 节点角色:
- 主节点:负责对应分片的写操作、读操作、槽位管理、集群状态维护,参与故障检测与选举投票;
- 从节点:作为主节点的副本,承接读请求,主节点故障时参与选举,升级为新主节点;
- 通信机制:所有节点两两之间建立TCP连接,通过Gossip协议周期性交换节点状态、槽位映射、故障信息,无中心管理节点,集群状态由所有节点共同维护;
- 槽位管理:集群固定16384个哈希槽,所有哈希槽必须全部分配给主节点,集群才能正常对外提供服务。
4.3 核心分片原理:哈希槽(Hash Slot)机制
哈希槽是Redis Cluster分片的核心设计,替代传统的一致性哈希方案,解决了一致性哈希扩缩容时数据迁移范围大、数据倾斜严重的问题。
4.3.1 哈希槽核心设计思想
- 集群预分配固定16384个哈希槽(编号0~16383),哈希槽是集群数据分片与迁移的最小单位;
- 槽位与节点解耦:每个主节点负责一部分哈希槽,槽位可以在节点之间自由迁移,扩缩容仅需调整槽位分配,无需改动哈希算法;
- 数据与槽位绑定:每个key绑定到一个固定的哈希槽,通过槽位找到对应的节点,实现请求的精准路由。
为什么是16384个槽?哈希槽信息在Gossip消息中通过bitmap存储,16384个bit刚好是2KB,符合Gossip消息的最优传输大小,既保证了分片粒度足够细,又不会导致集群通信消息过大。
4.3.2 槽位计算与映射规则
- key槽位计算公式:
HASH_SLOT = CRC16(key) mod 16384- CRC16是16位循环冗余校验算法,输出0~65535的数值;
- 对16384取模,得到0~16383之间的槽位编号;
- HashTag特殊规则:若key中包含
{}包裹的内容,则仅对{}内的字符串计算CRC16,保证相关key落在同一个槽位,支持跨key的事务、MGET/MSET等操作。示例:{user}:1001、{user}:1002会落在同一个槽位。 - 槽位映射传播:每个节点维护自身负责的槽位信息,通过Gossip协议广播给整个集群,最终所有节点都持有完整的槽位-节点映射表。
4.3.3 客户端路由与重定向机制
Redis Cluster采用智能客户端直连模式,客户端本地缓存槽位-节点映射表,根据key的槽位直接路由到对应节点执行命令,无需中间代理节点,性能损耗极低。
当客户端访问的节点不负责对应key的槽位时,节点会返回重定向错误,分为两种类型:
- MOVED重定向(永久槽位迁移):
- 触发场景:槽位已经永久迁移到其他节点,当前节点不再负责该槽位;
- 处理逻辑:节点返回
MOVED <slot> <target_ip>:<target_port>错误,客户端更新本地槽位映射表,下次直接访问目标节点。
- ASK重定向(临时槽位迁移中):
- 触发场景:槽位正在从源节点迁移到目标节点,部分key已迁移到目标节点,部分仍在源节点;
- 处理逻辑:源节点返回
ASK <slot> <target_ip>:<target_port>错误,客户端先向目标节点发送ASKING命令,再执行对应命令;本次重定向不更新本地映射表,仅单次生效,避免迁移未完成导致的路由错乱。
4.3.4 槽位扩缩容与数据迁移
集群扩缩容的本质是哈希槽的重新分配与对应数据的迁移,全程不影响集群对外服务:
- 扩容流程:新节点加入集群 → 为新节点分配其他主节点上的哈希槽 → 批量迁移槽位对应的key到新节点 → 迁移完成后更新集群槽位映射表;
- 缩容流程:将待下线节点负责的哈希槽全量迁移到其他主节点 → 槽位迁移完成后,节点无负责槽位 → 从集群中移除该节点;
- 迁移核心特性:以key为最小迁移单位,小批量多批次迁移,迁移过程中源节点仍可对外提供服务,仅当访问正在迁移的key时触发ASK重定向,实现无感扩缩容。
4.4 集群通信机制:Gossip协议
Redis Cluster通过Gossip协议实现去中心化的集群状态同步,无需中心节点,保证集群状态的最终一致性。
- 核心消息类型:
PING:节点每秒随机选择5个节点,向最久未通信的节点发送PING消息,检测节点存活,携带自身状态与部分集群信息;PONG:收到PING消息后,返回PONG响应,携带自身状态信息;MEET:新节点加入集群时,发送MEET消息,通知其他节点新节点加入;FAIL:节点被标记为已下线时,广播FAIL消息,通知所有节点更新故障节点状态。
- 通信特性:最终一致性,集群状态变更会在几秒内同步到所有节点,无强一致性保证,适合AP(可用性+分区容错性)场景。
4.5 去中心化故障转移全流程
Redis Cluster内置故障转移能力,无需依赖哨兵,基于集群内主节点的分布式协商完成,全程自动化执行。
4.5.1 故障检测:双层下线判定
- 疑似下线(PFAIL,Probational Fail):
- 节点向目标节点发送PING消息,若超过
cluster-node-timeout配置时间未收到PONG响应,将目标节点标记为PFAIL; - 节点通过Gossip消息,将PFAIL状态广播给集群其他节点。
- 节点向目标节点发送PING消息,若超过
- 已下线(FAIL):
- 当某个主节点,被集群中超过半数的其他持有槽位的主节点标记为PFAIL,该节点会被正式标记为FAIL;
- 节点广播FAIL消息给整个集群,所有节点更新该节点状态,触发故障转移流程。
关键规则:仅持有槽位的主节点参与下线判定投票,从节点仅同步状态,不参与投票。
4.5.2 从节点选举资格筛选
故障主节点的从节点,需先通过资格校验,才能参与新主节点选举,筛选规则:
- 从节点与主节点的断线时间,不能超过
cluster-node-timeout * cluster-replica-validity-factor,保证从节点数据不会过于陈旧,避免选举后数据丢失; - 从节点必须正常运行,未被标记为PFAIL/FAIL状态。
4.5.3 新主节点选举规则
基于Raft算法实现,核心规则:
- 合格的从节点,将集群配置纪元(configEpoch)+1,向集群中所有持有槽位的主节点发起选举投票请求;
- 每个主节点,在同一个配置纪元内,只能投出一票,且只会给对应故障主节点的从节点投票;
- 主节点优先给复制偏移量最大(数据最完整)的从节点投票;
- 若某个从节点获得超过半数的持有槽位的主节点的选票,则选举成功,成为新的主节点。
4.5.4 故障转移执行步骤
- 选举成功的从节点,执行
SLAVEOF NO ONE命令,正式升级为主节点; - 新主节点撤销旧主节点负责的所有哈希槽,将槽位全部分配给自己;
- 新主节点向集群广播PONG消息,通知所有节点自己的新主身份与槽位分配信息;
- 集群中其他节点更新槽位映射表,故障主节点的其他从节点,切换复制源到新主节点,开始增量同步;
- 旧主节点恢复上线后,自动降级为新主节点的从节点,从新主节点全量同步数据;
- 集群槽位全部恢复正常分配,故障转移完成,集群恢复正常服务。
4.6 集群核心痛点:数据倾斜与全链路优化
数据倾斜是Redis Cluster最常见的生产问题,指集群中不同主节点之间数据量、请求量严重不均,导致部分节点负载过高成为瓶颈,甚至触发OOM,而其他节点资源闲置,严重影响集群稳定性与可用性。
4.6.1 数据倾斜的核心分类与优化
1. 数据量倾斜(内存占用不均)
| 核心根因 | 针对性优化方案 |
|---|---|
| 大key问题:单个key的value过大(如MB级别的hash/list/set),导致对应节点内存占用远超其他节点 | 1. 大key拆分:将大hash/list拆分为多个子key,分散到不同槽位与节点; 2. 定期巡检:通过 redis-cli --bigkeys、redis-rdb-tools定期扫描大key,及时治理;3. 规范写入:禁止业务写入超过10KB的单key,大对象拆分存储 |
| 哈希槽分配不均:部分主节点负责的槽位数量远多于其他节点 | 1. 集群搭建/扩缩容时,均匀分配槽位,保证每个主节点负责的槽位数量差值≤1; 2. 定期巡检槽位分配,通过槽位迁移调整不均的分配 |
| HashTag滥用:大量key使用同一个HashTag,导致集中落在同一个槽位与节点 | 1. 非必要不使用HashTag,仅跨key事务/批量操作场景使用; 2. 严格控制单个HashTag对应的key数量与总数据量,避免过度集中 |
| 冷热数据分布不均:大量热数据key集中在少数节点 | 1. 热数据key添加随机后缀,拆分到不同槽位,分散存储; 2. 调整槽位分配,将热数据槽位分散到多个节点 |
2. 请求量倾斜(QPS负载不均)
| 核心根因 | 针对性优化方案 |
|---|---|
| 热点key问题:少数超高并发访问的key集中在同一个节点,导致该节点CPU/网卡跑满 | 1. 热点key多副本拆分:将热点key复制为多个带随机后缀的副本,分散到不同槽位与节点,读请求轮询访问,分散压力; 2. 客户端本地缓存:对不要求强一致性的热点读key,通过Caffeine/Guava做本地缓存,减少Redis访问量; 3. 二级缓存:热点数据接入CDN/本地内存缓存,降低Redis集群压力 |
| 读写分离配置不当:所有读请求集中打到少数从节点,导致节点负载过高 | 1. 客户端实现轮询策略,将读请求均匀分发到分片的所有从节点; 2. 按业务场景拆分读请求,避免单节点承接所有热点读 |
| 危险命令/复杂操作滥用:大量keys、flushall、跨槽多key操作集中在单个节点 | 1. 线上禁用keys、flushdb等危险命令,通过rename-command屏蔽; 2. 跨槽多key操作拆分为单key操作,或通过HashTag保证同槽,避免全集群扫描; 3. 复杂lua脚本、聚合操作迁移到业务低峰期执行 |
3. 迁移临时倾斜(扩缩容/槽位迁移导致)
| 核心根因 | 针对性优化方案 |
|---|---|
| 迁移速度过快,占用大量带宽/CPU,导致源/目标节点负载飙升 | 1. 业务低峰期执行槽位迁移,避开流量高峰; 2. 调整 cluster-migration-barrier参数,控制单次迁移的key数量,小批量多批次迁移;3. 限制迁移带宽,避免占用业务带宽 |
| 大key迁移导致节点阻塞,请求堆积 | 1. 迁移前先治理大key,拆分后再执行迁移; 2. 超大key单独迁移,避开业务高峰 |
五、三大高可用方案核心能力对比
| 对比维度 | 主从复制 | 哨兵Sentinel | Redis Cluster |
|---|---|---|---|
| 核心定位 | 数据多副本、读写分离 | 主从架构自动化故障转移 | 分布式分片、水平扩展、原生高可用 |
| 架构模式 | 中心化主从架构 | 哨兵集群+主从数据节点 | 去中心化分片集群 |
| 水平扩展能力 | 无,受限于主节点单机内存 | 无,受限于主节点单机内存 | 支持,可动态扩缩容节点,线性提升性能 |
| 写性能上限 | 单机主节点写性能上限 | 单机主节点写性能上限 | 多主节点并行写入,线性提升写性能 |
| 故障转移 | 无,需人工手动切换 | 自动化故障转移,秒级恢复 | 内置自动化故障转移,秒级恢复 |
| 数据一致性 | 异步复制,最终一致 | 异步复制,最终一致 | 异步复制,最终一致 |
| 适用场景 | 小规模业务、读多写少、数据冷备 | 中小规模业务、单主可承载全部数据、需高可用 | 大规模业务、数据量超单机内存、高并发读写、需水平扩展 |
六、全体系落地最佳实践
6.1 部署规范
- 主从/哨兵架构:主从节点跨服务器/跨机房部署,哨兵集群至少3节点,奇数部署,quorum设置为过半;
- Cluster集群:建议至少3个分片,每个分片1主2从,所有节点跨服务器部署,避免主从节点同机;集群节点总数建议不超过1000个,避免Gossip协议通信压力过大;
- 硬件规范:主节点与从节点配置一致,使用SSD磁盘,开启swap防护,保证同机房部署,降低网络延迟。
6.2 核心配置优化
- 复制优化:调大
repl_backlog_size(建议4GB以上),降低全量复制概率;开启repl-disable-tcp-nodelay no,降低复制延迟; - 故障转移优化:
cluster-node-timeout/down-after-milliseconds建议设置为3000-5000ms,平衡误判率与恢复速度; - 稳定性优化:开启AOF持久化,主从节点均开启持久化;设置
maxmemory-policy为合理的淘汰策略;Cluster集群设置cluster-require-full-coverage no,避免单分片故障导致整个集群不可用。
6.3 运维监控规范
- 核心监控指标:主从复制偏移量、节点存活状态、槽位分配均匀度、内存使用率、CPU使用率、QPS、大key数量、故障转移事件;
- 定期巡检:每月扫描大key、热点key,治理数据倾斜;定期检查主从一致性、集群槽位覆盖情况;
- 应急预案:提前制定主节点故障、脑裂、数据倾斜、OOM等场景的应急预案,定期演练。
6.4 风险防控
- 脑裂防控:主从/哨兵架构配置
min-replicas-to-write参数,Cluster集群保证节点跨机房部署,过半节点存活才允许写入; - 数据丢失防控:开启AOF持久化,设置
appendfsync everysec,主节点故障后优先选择数据最完整的从节点升主; - 性能风险防控:禁止线上使用危险命令,严格控制大key写入,提前治理热点key,避免数据倾斜。