如何使HA代理保持活跃

时间:2015-01-27 02:52:23

标签: haproxy keep-alive

在我的环境中,我有2个Web服务器(Apache)的haproxy负载平衡,这是我的HA代理配置:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
        tune.ssl.default-dh-param 2048
    daemon
        nbproc      1
    stats socket /var/lib/haproxy/stats
        stats       timeout 1m
        nogetaddrinfo
listen front
    bind :80
    redirect scheme https if { hdr(Host) -i domain.com } !{ ssl_fc }
listen front_ssl
    bind :443 ssl crt /opt/certificate/domain.pem
    mode http
        option dontlognull
    stats      enable
    stats      uri /ha?stats
    stats      realm system
    stats      auth root:*********
    stats      refresh 5s
    option http-keep-alive
    option forwardfor
    option redispatch
    reqadd X-Forwarded-Proto:\ https if { ssl_fc }
         timeout client  15s
        timeout connect 3s
        timeout server  15s
        timeout http-request 15s
        timeout http-keep-alive 15s
        default_backend bk_http
backend bk_http
        mode http
        balance source
        option http-keep-alive
        default-server inter 1s
        retries 3
        timeout connect 3s
        timeout server  15s
        timeout queue 60s
        timeout check 10s
        timeout http-request 15s
        timeout http-keep-alive 15s
        server node1 1.2.3.4:82 check id 1 weight 1 maxconn 2000 maxqueue 2000
        server node2 5.6.7.8:82 check id 1 weight 1 maxconn 2000 maxqueue 2000
在/etc/httpd/conf/httpd.conf中

“KeepAlive On” 但是当我用curl测试时,我发现keepalive不起作用:

curl -Iv http://domain.com 2>&1 | grep -i 'connection #0'
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Closing connection #0
curl -Iv https://domain.com 2>&1 | grep -i 'connection #0'
* Closing connection #0

据我所知,如果keepalive正在运行,结果应该是:

  0   162    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connection #0 to host domain.com left intact
* Closing connection #0

如果我的配置有问题,请告诉我?

1 个答案:

答案 0 :(得分:9)

您拥有正确的配置。您只需要option http-keep-alive这是haproxy 1.5的默认值。请检查您安装的版本。

请参阅http://www.haproxy.org/download/1.5/doc/configuration.txt第4节。代理

  

在HTTP模式下,处理应用于流过的请求和响应   连接取决于前端的HTTP选项和   后端的。 HAProxy支持5种连接模式:

     
      
  • KAL:保持活力(“选项http-keep-alive”)这是默认模式:all   处理请求和响应,连接保持打开但空闲   答复和新请求之间。

  •   
  • TUN:tunnel(“选项http-tunnel”):这是版本的默认模式   1.0到1.5-dev21:只处理第一个请求和响应,并且   其他所有内容都转发,完全没有分析。这种模式不应该   因为它在日志记录和HTTP处理方面造成了很多麻烦。

  •   
  • PCL:被动关闭(“选项httpclose”):与隧道模式完全相同,   但是在两个方向都附加了“连接:关闭”以尝试制作   第一次请求/响应交换后,两端都关闭。

  •   
  • SCL:服务器关闭(“选项http-server-close”):面向服务器   收到响应结束后连接关闭,但是   面向客户的连接仍然开放。

  •   
  • FCL:强制关闭(“option forceclose”):连接已主动关闭   在回复结束后。

  •   

您的后端node1 / node2可能正在关闭连接。他们可能没有启用Keepalive。

如果拦截http / 1.1的流量检查而没有“Connection:close”标题