首页/数据/Redis 进阶速查/LB 空闲超时与连接存活协同
性能与排障129 条

LB 空闲超时与连接存活协同

负载均衡器的空闲超时若短于连接池保活间隔,池中连接会被静默断开;双方参数对齐并留出心跳余量。

Redis 进阶速查数据更新于 2026-10-13

超时参数要成对看

业务到 Redis 之间常隔着负载均衡器或四层代理,LB 有自己的空闲超时:连接在这段时间内没有数据往返就被静默断开,而两端不一定立刻察觉。如果连接池的保活间隔长于 LB 空闲超时,池里会攒下一批已被断开的连接,业务取到它们时才会失败。协同原则是保活或心跳间隔明显小于 LB 空闲超时,并留出余量应对抖动。

基本信息

主要风险空闲连接被 LB 静默回收,池中留下死连接
协同原则保活间隔小于 LB 空闲超时,通常取三分之一到一半
服务端参数tcp-keepalive 控制服务端对空闲对端的探测
客户端参数连接池保活间隔与最大空闲时间
兜底手段取用前健康检查 + 幂等请求重试

典型使用场景

  • 接入四层 LB 或云负载均衡:空闲超时是平台默认值,业务侧常常不知情
  • 低峰时段:夜间几乎无流量,最容易触发静默断连
  • 故障恢复:切换后旧池连接全部失效,需要快速淘汰重建
  • 偶发重置排查:把失败请求与空闲时长对照,验证是否与超时错配吻合
  • 容量评估:连接被批量回收后集中重建,会形成二次压力

对齐与核查

对齐与核查
redis-cli CLIENT LIST                    # 看连接的空闲时长与年龄分布
redis-cli CONFIG GET tcp-keepalive       # 服务端侧的空闲探测间隔
redis-cli INFO clients | grep connected_clients  # 连接数是否出现规律性掉落
# 客户端侧示例:保活 30 秒,LB 空闲超时 120 秒,留出足够余量
# pool: keepalive=30s, idle_timeout=120s, acquire_timeout=200ms

参数对齐表

参数所处位置设置思路
LB 空闲超时负载均衡器或四层代理先查清平台默认值,不要假设无限
连接保活间隔客户端连接池取 LB 超时的三分之一到一半
tcp-keepaliveRedis 服务端配置负责服务端向空闲对端发起探测
获取连接超时客户端连接池短于业务总超时,便于快速失败
超时错配的典型症状是「日常正常,闲置一段时间后第一批请求报错,随后自行恢复」——因为只有空闲足够久的连接才会被回收,忙时根本看不出来。
参数分散在 LB、客户端池与服务端三处,改一处必须同步核查另外两处。只把客户端保活调好、LB 超时更短,问题依然照旧。

易错点

  • 只调一端:客户端保活间隔仍大于 LB 空闲超时,连接照样被静默断开
  • 把连接重置笼统归为网络抖动:根因是超时错配,长期不修会积累成随机失败
  • 保活间隔设得极短:连接数多时空闲心跳本身造成额外流量与服务端唤醒
  • 迁移或更换 LB 后沿用旧参数:新平台默认超时不同,原本对齐的参数再次错配

数据来源与参考

  • Redis 官方实践:连接超时协同
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌