一主多从配置需显式对齐端口、密码与只读设置,否则复制不可靠;须校验master_link_status、replica-read-only及slave_repl_offset增长;高写入下宜用树状拓扑并监控偏移量差值。

一主多从配置:端口、密码与只读必须显式对齐
Redis默认不自动识别主从角色,多个从节点能跑起来,不代表复制就可靠。常见错误是主节点设了密码,但从节点没配masterauth,导致INFO replication里显示master_link_status:down;或者从节点没开replica-read-only yes(旧版叫slave-read-only),结果被误发SET命令污染数据。
实操建议:
- 主节点配置只需保证
bind、port、requirepass明确,无需额外开启复制开关 - 每个从节点的配置文件中必须包含三要素:
slaveof {master_ip} {master_port}、masterauth {master_password}、replica-read-only yes - 启动时用
--port和--slaveof参数覆盖配置文件更可控,例如:redis-server /etc/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379 - 验证不是只看
role:slave,还要检查master_host、master_port是否匹配,以及slave_repl_offset是否持续增长
Lettuce的REPLICA_PREFERRED不是万能路由开关
Spring Boot里配read-from: REPLICA_PREFERRED看似一步到位,但实际行为依赖Lettuce在初始化时探测到的拓扑结构。如果配置列表里混入了未启动的节点,或某个从节点虽连上但复制中断,Lettuce可能退化为全走主节点——你完全感知不到。
实操建议:
- 不要把主节点地址也塞进
cluster.nodes列表;应单独用spring.redis.host/port配主节点,再用spring.redis.lettuce.cluster.nodes只列从节点 -
REPLICA_PREFERRED下,Lettuce会优先选可用从节点,但若所有从节点都不可用(如延迟超500ms或PING失败),它才 fallback 到主节点——这个“不可用”阈值不可调,得靠自己加健康检查兜底 - 高频 key 的读请求(如
GET user:1001)仍可能集中打到同一个从节点,Lettuce不做一致性哈希,需业务层加本地缓存或二次分发
高写入场景下,一主多从会线性拖垮主节点
每增加一个直连从节点,主节点就要多维护一份复制缓冲区、多广播一次PSYNC流、多处理一次ACK心跳。当写入QPS超过3k,5个直连从节点会让主节点CPU飙升40%,网络发送字节翻倍,且任意一个从节点断连重连,都可能触发全量同步,拉起BGSAVE吃光磁盘IO。
Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。
实操建议:
- 写入压力大时,改用树状拓扑:让1个从节点(如6380)直连主节点,其余从节点(6381、6382)执行
REPLICAOF 127.0.0.1 6380,形成两级复制 - 中间节点必须确保
replica-read-only no(仅限转发复制流用途),否则下游无法建立REPLICAOF连接;但业务读请求仍只能发给末端只读从节点 - 监控关键指标:
connected_slaves(中间节点应≥1)、repl_backlog_active(主节点应为1)、slave_repl_offset与主节点master_repl_offset差值应
负载均衡不能只轮询,得动态剔除滞后节点
把读请求平均分给三个从节点,但如果其中一台因网络抖动延迟飙到2s,而你的应用又没做超时熔断,大量请求就会卡死在线程池里。更糟的是,INFO replication里的slave_repl_offset差值可能已超百万,但节点本身还活着,照样收流量。
实操建议:
- 定期(如每30秒)用
redis-cli -h {ip} -p {port} --latency测真实延迟,连续3次>500ms则标记为临时下线 - 每次读操作前,检查从节点
slave_repl_offset与主节点master_repl_offset差值,超过阈值(如50000)就跳过该节点 - 避免用Nginx做四层转发——它无法感知Redis协议里的角色和复制状态;真要用代理,选支持
ROLE命令探测的Redis Proxy,或直接在客户端做节点管理
真正难的不是配出多个从节点,而是让它们在写入风暴、网络分区、进程重启这些真实故障下,依然稳定提供低延迟、强一致的读服务。复制偏移量差值、心跳超时时间、缓冲区大小这三组数字,比配置文件里的slaveof行数重要得多。










