HAProxy SSL 连接

HAProxy SSL 连接

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

Initial Connection 7.59s
SSL 6.42s

我们测试了套接字统计数据

# 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和Memory正常。CPU 9.3%, MEM: 335MB

我们还可以在哪里开始寻找?

答案1

鉴于 Chrome 报告极高的联系设置时间,这意味着 SYN 数据包被丢弃或至少没有得到答复。这可能发生在三种情况下:

  • 数据包丢失:你可能想确保你的互联网链接仍然正常,并且特定服务器具有正确的连接(其网卡可能已损坏)
  • 积压已满,如果 haproxy 需要时间来接受连接,就会发生这种情况,并导致许多 SYN_RECV 连接,但由于您没有任何连接,因此情况并非如此;
  • 未正确调整 conntrack 导致传入连接被丢弃。我倾向于投票支持这一点,因为人们在系统上部署负载平衡器时没有对其进行调整,而且这个问题相当常见。请至少使用“dmesg”检查系统日志并查找各种错误、任何 net_ratelimit 或任何“conntrack 表已满”消息。

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

相关内容