HAProxy SSL连接

我们正在使用HA-Proxy version 1.5.11 2015/01/31 ,从昨天我们注意到,通过https的所有对我们的服务的请求是非常缓慢的。 从Chrome开发者控制台中,我们可以看到以下时间:

 Initial Connection 7.59s SSL 6.42s 

我们testing了socket的统计信息

 # ss -s Total: 2080 (kernel 2088) TCP: 2674 (estab 2141, closed 433, orphaned 84, synrecv 0, timewait 433/0), ports 0 

所以它可能远低于65k端口。

以下是我们的haproxy.cfg

 # Global configuration global log 127.0.0.1 local0 notice maxconn 50000 stats socket /tmp/proxystats level admin tune.ssl.default-dh-param 2048 #user deploy #group deploy #daemon tune.bufsize 32768 # Default configuration defaults log global mode http option httplog option dontlognull stats enable stats uri /proxystats stats auth username:pass stats realm Haproxy\ Statistics stats refresh 5s timeout connect 120000 timeout client 120000 timeout server 120000 option redispatch option forwardfor option http-server-close errorfile 500 /etc/haproxy/errors/503.http errorfile 502 /etc/haproxy/errors/503.http errorfile 503 /etc/haproxy/errors/503.http # HTTP frontend configuration frontend http mode http bind *:80 #redirect scheme https if !{ ssl_fc } redirect prefix https://myservice.com code 301 if { hdr(host) -i myservice.com } acl www hdr(host) -i www.myservice.com acl api hdr(host) -i api.myservice.com acl browser hdr(host) -i br-rx.myservice.com use_backend api_server if www use_backend api_server if api use_backend browser_receiver if browser # HTTPs frontend configuration frontend https mode http bind *:443 ssl crt <our .com pem> crt <second domain pem> crt <third domain pem> redirect prefix https://www.myservice.com code 301 if { hdr(host) -i myservice.com } use_backend api_server if { ssl_fc_sni www.myservice.com } use_backend api_server if { ssl_fc_sni api.myservice.com } use_backend browser_receiver if { ssl_fc_sni br-rx.myservice.com } 

系统中的CPU和内存是正常的。 CPU 9.3%, MEM: 335MB

我们还能从哪里开始寻找?

鉴于Chrome报告连接build立时间极高,这意味着SYN数据包正在被丢弃或至less没有被应答。 这可能发生在三种情况下:

  • 数据包丢失:您可能需要确保您的Internet链接仍然正常,并且特定服务器具有正确的连接(其网卡可能已经死亡)
  • 积压已满,如果haproxy正在花时间接受连接,并导致许多SYN_RECV连接,则会发生这种情况,但由于您没有任何连接,因此情况并非如此;
  • 不正确的调整conntrack导致传入连接被丢弃。 考虑到人们在系统上部署负载平衡器而不进行调整,我倾向于为此投票,而且这个问题相当频繁。 请至less使用“dmesg”检查系统日志,并查找各种错误,任何net_ratelimit或任何“conntrack table full”消息。

编辑:我只是意识到,你只改变了全局maxconn设置,但不是默认的,所以你的前端仍然限制在2000并发连接(检查haproxy -vv)。 而你的netstat似乎表明你距离这个限制并不太远,所以这可能是一个原因。 请在默认部分添加一个maxconn指令。