必须将cluster-node-timeout设为至少45000ms且所有节点一致,因跨机房rtt达20–80ms,若单次往返接近timeout的1/3(5秒)易误判下线,导致slot迁移中断或集群卡在fail?状态。

cluster-node-timeout 必须调大,且所有节点一致
跨机房 RTT 通常在 20–80ms,而 Redis 默认 cluster-node-timeout 是 15000ms(15秒),看似宽松,实则危险——slot 迁移依赖高频心跳与 ACK,单次往返若接近 timeout 的 1/3(即 5 秒),就可能触发误判为节点下线,导致迁移中断或集群状态卡在 fail?。这不是“调大一点就好”,而是硬性要求:
-
cluster-node-timeout至少设为45000(45秒),生产环境建议60000 - 必须在所有节点的
redis.conf中统一配置,不能只改部分节点 - 修改后需逐个
redis-cli -h node-ip config rewrite并config reload,不可仅靠重启 - 配合
redis-cli --cluster check验证各节点看到的超时值是否一致
读请求别指望客户端自动走本地从节点
加了本地从节点 ≠ 读延迟下降——Jedis 默认不读 replica,Lettuce 不设 ReadFrom.REPLICA_PREFERRED 就直连 master,ioredis 不配 scaleReads: 'slave' 也一样。跨机房场景下,没显式路由策略,95% 以上读流量仍打向远端主节点。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- Jedis:弃用
JedisSentinelPool默认构造器,改用new JedisPool(..., localSlaveHost, localSlavePort)显式指向本机房从节点 - Lettuce:初始化时必须传
ClientOptions.builder().readFrom(ReadFrom.REPLICA_PREFERRED),否则 replica 状态再好也不生效 - ioredis:启用
enableReadyCheck: true+scaleReads: 'slave'后,还需通过 DNS 或服务发现过滤出本机房 IP 段,否则可能选到异地 slave - 监控关键指标:
keyspace_hits和rejected_connections,若异地读占比突增,说明本地节点已静默故障但未被感知
主从同步链路本身就得抗抖动
跨机房带宽有限、丢包率高,主从复制极易堆积,master_repl_offset 和 slave_repl_offset 差值拉大,轻则读旧数据,重则从节点降级为只读却未通知客户端,报错 READONLY You can't write against a read only replica。
-
repl-backlog-size至少调到1024mb(默认 1mb),避免网络抖动触发全量同步 -
repl-backlog-ttl从默认 3600 改为14400,延长缓冲区存活时间 -
repl-ping-replica-period从 10s 改为5,加快主节点对从节点失联的感知 - 主从间启用
repl-diskless-sync yes,但需确认双方 Redis 版本 ≥ 3.0 且支持 RDB streaming
别信“集群代理”能自动搞定就近访问
Twemproxy、Codis、CacheCloud 这类 proxy 层,本身不识别机房拓扑。如果 upstream 配置把所有节点(含异地)都写进同一组,它只会轮询或哈希分发,照样把请求打到 80ms 延迟的远端节点上。
- 必须按机房拆分 proxy 实例:DC1 的 proxy 只 upstream DC1 的 master/slave,DC2 同理
- 应用层 DNS 或服务发现要隔离:让 DC1 的服务只解析到 DC1 的 proxy VIP,禁止跨解析
- CacheCloud 的
RedisClusterReshard.java模块虽支持分片优化,但前提是部署时就按机房分配 slot,而非后期强行 rehash - Proxy 日志里盯紧
upstream_connect_time,若频繁出现 >50ms,说明 upstream 列表混入了异地地址
redis-cli --cluster reshard 就可能因节点间时钟不一致直接失败,且这种失败不会报明确错误,只表现为迁移卡住或超时。必须用 ntpq -p 每日巡检,偏差持续 >50ms 就要干预。










