我们在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
答案 0 :(得分:0)
正如@sqlbot所说,我注意到Haproxy日志显示-sH-作为终止状态
s =等待服务器发送或接收数据时服务器端超时已过期。
H =代理正在等待来自服务器的完整有效的响应HEADERS(仅HTTP)。
我们在C:\ Windows \ system32 \ LogFiles \ Httperr中查看了httperr.log,并注意到我们得到了:
POST / api / v1 / clients--2个已连接
我回收了应用程序池并启用了请求跟踪,并且应用程序开始再次正确响应。我们将空闲超时设置为0,因此我们需要研究IIS配置,然后进一步设置应用程序。