Redis主从节点TCP连接数过高咨询:2万连接是否正常?
Redis主从架构2万TCP连接:绝对不正常,排查指南
首先拍板说清楚:这种情况绝对不正常。1主1从的Redis架构下,主从节点之间正常只会维持1个(最多极少数几个)复制专用连接,再加上各自的业务客户端连接,总连接数也绝不可能飙升到20000这个量级。接下来咱拆解可能的原因和落地的排查步骤:
可能的核心原因
- 主从复制连接频繁断连重连:这是最常见的诱因。比如主节点的
client-output-buffer-limit slave配置过小,当主节点向从节点同步的数据流过大/网络延迟高时,输出缓冲区超过阈值,主节点会主动断开从节点连接,从节点就会反复发起重连,积累大量TCP连接(尤其是TIME_WAIT状态的连接)。另外,网络不稳定(丢包、抖动)也会导致主从连接频繁中断,触发重试。 - 客户端连接泄漏:你可能混淆了"主从之间的复制连接"和"所有客户端+复制连接的总数"。如果是两个节点的总连接数达2万,大概率是业务侧的客户端存在连接泄漏——比如客户端没有用连接池,每次请求都新建连接却不主动关闭,或者连接池配置不合理(比如最大连接数设得过高,且连接没有被复用)。
- 异常进程/恶意扫描:有没有脚本、测试程序在不断向Redis节点发起新连接?或者存在外部IP的恶意扫描,持续建立大量短连接,导致连接数暴涨。
一步步排查方案
定位连接来源
登录主/从节点,执行CLIENT LIST命令,查看输出里的addr字段:- 如果大量连接的
addr是对方节点的IP,说明主从复制连接异常; - 如果连接来自多个业务IP,那就是客户端连接泄漏的问题;
- 如果有陌生IP,大概率是恶意扫描。
- 如果大量连接的
检查主从复制日志
查看从节点的Redis日志(默认路径一般是/var/log/redis/redis-server.log),如果频繁出现Connecting to MASTER、SYNC started、MASTER <-> SLAVE sync started这类日志,说明从节点在反复发起复制重连,这时候要盯主节点的输出缓冲区配置。校验关键Redis配置
- 主节点执行
CONFIG GET client-output-buffer-limit,看slave对应的阈值(默认是256mb 64mb 60,分别是硬限制、软限制、软限制持续时间)。如果数值过小,建议适当调大(比如改成512mb 128mb 60),避免主节点主动断开从节点。 - 检查从节点的
repl-ping-slave-period(默认10秒),这个值过小也可能导致不必要的连接检测,但一般默认值是合理的。
- 主节点执行
排查网络状态
在节点上执行ss -ant | grep <对方节点IP>:6379,查看连接状态:- 如果大量连接处于
TIME_WAIT状态,说明连接关闭后没有及时回收,可能是系统TCP参数需要优化(比如调整net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle); - 如果大量是
ESTABLISHED状态,那就要回到前面的步骤,看是复制连接还是客户端连接。
- 如果大量连接处于
针对性解决建议
- 复制重连问题:调大主节点的
client-output-buffer-limit slave阈值,同时排查主从之间的网络链路(比如用ping、mtr检测丢包和延迟),确保网络稳定。 - 客户端连接泄漏:优化业务客户端的连接池配置(比如设置合理的最大连接数、空闲连接超时时间),检查代码确保连接使用后正确归还连接池,避免裸连后不关闭。
- 恶意扫描/异常进程:用防火墙(比如iptables)限制仅允许业务IP和从节点IP访问Redis端口,同时排查服务器上的异常进程,终止不必要的连接发起程序。
内容的提问来源于stack exchange,提问作者Cyriac Joseph
相关产品推荐
相关产品推荐

