记录因net.ipv4.tcp_tw_recycle=1内核参数导致ssh登录不上的问题

机器配置了 net.ipv4.tcp_tw_recycle=1 , 表示开启TCP连接中TIME-WAIT sockets的快速回收。

这种配置会导致一个问题,当服务是一个网关类的应用的时候且访问量很大的时候容易出现很多的连接拒绝的情况。

修改回来永久生效的办法:

vim /etc/sysctl.conf
net.ipv4.tcp_tw_recycle=0
sysctl -p
 
 

net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse回收tcp连接总结

对于tcp连接 TIME_WAIT使用建议使用以下优化方式:

1.修改net.ipv4.ip_local_port_range参数,增加客户端端口可用范围。
2.或服务器IP,让服务器能容纳足够多的TIME-WAIT状态连接。在我们常见的互联网架构中(NGINX反代跟NGINX,NGINX跟FPM,FPM跟redis、mysql、memcache等),减少TIME-WAIT状态的TCP连接,最有效的是使用长连接,不要用短连接,尤其是负载均衡跟web服务器之间。
3.修改net.ipv4.ip_local_port_range参数,增加客户端端口可用范围。
4.增加客户端ip

在服务端,不要启用net.ipv4.tcp_tw_recycle,除非你能确保你的服务器网络环境不是NAT。在服务端上启用net.ipv4.tw_reuse对于连接进来的TCP连接来说,并没有任何卵用。

在客户端(尤其是服务器上,某服务以客户端形式运行时,比如上面提到的nginx反代,连接着redis、mysql的FPM(fastcgi manager)等等)上启用net.ipv4.tcp_tw_reuse,还算稍微安全的解决TIME-WAIT的方案。再开启net.ipv4.tcp_tw_recycle的话,对客户端(或以客户端形式)的回收,也没有什么卵用,反而会发生很多诡异的事情(尤其是FPM这种服务器上,相对nginx是服务端,相对redis是客户端)。

posted @ 2023-02-24 18:01  在运维之路上的小汤姆  阅读(361)  评论(0编辑  收藏  举报