清漆耗尽开放端口,大量 SYN_SENT 连接

use*_*997 8 networking varnish tcp network-traffic apache-2.2

最近,我们的 Varnish (3x) -> Apache (3x) 设置出现问题,导致SYN_SENT连接激增。

峰值本身是由于访问站点的新流量(不是任何类型的 DDOS),而且我们的 Varnish 机器似乎在将流量转发到后端服务器时遇到问题(Apache 流量下降与清漆峰值相关) ),使可用端口池拥塞SYN_SENT

在 Apache 上启用 Keep-alives(15 秒)。

错在哪一边?流量很大,但无论如何都不会导致这种设置(3 个 Varnish 前端机器,3 个后端 Apache 服务器)停止。

请帮忙。

通过防火墙连接的 Munin 屏幕截图在这里

~$ netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

      9 CLOSE_WAIT
     12 CLOSING
    718 ESTABLISHED
     39 FIN_WAIT1
   1714 FIN_WAIT2
     76 LAST_ACK
     12 LISTEN
    256 SYN_RECV
   6124 TIME_WAIT
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf(清漆)

net.ipv4.netfilter.ip_conntrack_max = 262144
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_fin_timeout = 30
Run Code Online (Sandbox Code Playgroud)

阿帕奇 netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

     11 CLOSE_WAIT
    286 ESTABLISHED
     38 FIN_WAIT2
     14 LISTEN
   7220 TIME_WAIT
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf (Apache)

vm.swappiness=10
net.core.wmem_max = 524288
net.core.wmem_default = 262144
net.core.rmem_default = 262144
net.core.rmem_max = 524288
net.ipv4.tcp_rmem = 4096 262144 524288
net.ipv4.tcp_wmem = 4096 262144 524288
net.ipv4.tcp_mem = 4096 262144 524288

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_keepalive_time = 30

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.core.somaxconn = 2048


net.ipv4.conf.lo.arp_ignore=8
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

vm.swappiness = 0

kernel.sysrq=1
kernel.panic = 30
Run Code Online (Sandbox Code Playgroud)

Flo*_*aie 0

在 Varnish 服务器上,尝试更改这两个参数:

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
Run Code Online (Sandbox Code Playgroud)

tw_reuse 将允许它重用 TIME_WAIT 中的连接。

tw_recycle 可能会导致负载均衡器等出现问题。