带有Haproxy的Azure负载平衡器导致504超时

时间:2019-02-26 11:00:51

标签: azure haproxy azure-load-balancer

我们在Azure的负载均衡器产品之后使用2个活动的haproxy服务器,然后将负载分配到我们的前端Web群集。之所以进行此设置,是因为我们需要在haproxy服务器上使用HA,并且在haproxy中还使用了许多规则来路由通信,而Azure提供的任何产品都不支持该规则。

我们遇到了一个问题,流量到达了天蓝色的负载均衡器,被路由到haproxy框,然后发送到IIS进行处理,但我们从未收到来自服务器的响应,但我可以看到请求已被处理因为数据已写入数据库。我在504的haproxy日志中有一个日志,但是当我检查IIS日志时,未注册任何内容,因此它在IIS中得到处理,但看起来在某个阶段连接已断开。

我在没有Azure负载均衡器的情况下测试了此安装程序,仅Haproxy可以正常工作,但是当我们引入Azure负载均衡器时,我们开始遇到504错误。有没有人看到过这样的问题?

haproxy.cfg

global
    log 127.0.0.1 local0
    maxconn 4096
    user haproxy
    group haproxy
    tune.ssl.default-dh-param 2048
    tune.maxrewrite 4096

    ssl-default-bind-options no-sslv3
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

    ssl-default-server-options no-sslv3
    ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

defaults
    log global
    option httplog
    mode http
    option dontlognull
    option tcplog
    retries 3
    option redispatch
    maxconn 20000
    timeout connect 8000
    timeout client 50000
    timeout server 50000

frontend release-micro-http
    bind :8082
    reqadd X-Forwarded-Proto:\ http
    default_backend release-micro-backend

backend release-micro-backend
    balance roundrobin
    option http-server-close
    option forwardfor
    option httpchk GET /check.txt
    server worker1 10.1.2.1:8086 check
    server worker2 10.1.2.2:8086 check

Azure Load Balancer Config

1 个答案:

答案 0 :(得分:0)

正如@sqlbot所说,我注意到Haproxy日志显示-sH-作为终止状态

  

s =等待服务器发送或接收数据时服务器端超时已过期。

     

H =代理正在等待来自服务器的完整有效的响应HEADERS(仅HTTP)。

我们在C:\ Windows \ system32 \ LogFiles \ Httperr中查看了httperr.log,并注意到我们得到了:

POST / api / v1 / clients--2个已连接

我回收了应用程序池并启用了请求跟踪,并且应用程序开始再次正确响应。我们将空闲超时设置为0,因此我们需要研究IIS配置,然后进一步设置应用程序。