0

我们在 Azure 的负载均衡器产品后面使用 2 个活动的 haproxy 服务器,然后将负载分配到我们的前端 Web 集群。我们有这个设置是因为我们需要在我们的 haproxy 服务器上使用 HA,并且我们还在 haproxy 中使用了许多规则来路由任何 Azure 产品都不支持的流量。

我们遇到了一个问题,流量到达 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 负载均衡器配置

4

1 回答 1

0

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

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

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

我们查看了 C:\Windows\system32\LogFiles\Httperr 中的 httperr.log,发现我们得到了:

POST /api/v1/clients - - 2 Connection_Dropped

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

于 2019-02-27T09:25:55.177 回答