haproxy - 第 7 层健康检查失败

问题描述 投票:0回答:1

我偶尔会遇到第 7 层运行状况检查失败的情况。这种情况在生产机器上似乎是随机发生的,可能每分钟一次或平均每几分钟一次。这是配置:

backend api
    mode http
    option httpchk GET /api/v1/status HTTP/1.0
    http-check expect status 200
    balance roundrobin
    server api1 127.0.0.1:8001 check fall 3 rise 2
    server api2 127.0.0.1:8002 check fall 3 rise 2

HAproxy 日志告诉我以下内容:

Health check for server api/api2 failed, reason: Layer7 timeout, check duration: 10001ms, status: 2/3 UP.

奇怪的是,当我运行脚本以比 HAproxy 快得多的速度获取相同的 URL 时,它永远不会返回 200 响应。它永远不会像 HAproxy 那样挂起。

此外,我偶尔会收到各种 API 调用的 HAProxy 错误,而不仅仅是运行状况检查,所有这些看起来都非常相似:

https-in~ api/api1 45/0/0/-1/30045 504 194 - - sHVN 50/49/13/10/0 0/0 "POST /api/v1/accounts HTTP/1.1"

这可能是什么问题?这个真的把我难住了

haproxy
1个回答
0
投票

您已将

haproxy
配置为使用
HTTP 1.0
(这也是默认设置)发送运行状况检查。

GET /api/v1/status HTTP/1.0
content-length: 0

curl
等价物是:

curl --http1.0 http://127.0.0.1:8001/api/v1/status

确保您的后端服务器正确处理此问题。

您可能想切换到

HTTP/1.1

backend api
  option httpchk GET /api/v1/status HTTP/1.1
  ...

对于偶尔的失败,请考虑重试请求,尽管这可能表明应用程序服务器端存在某些问题(注意,需要

haproxy >= 2.0

backend api
    option redispatch
    retry-on empty-response conn-failure

查看haproxy博客了解更多详情。

© www.soinside.com 2019 - 2024. All rights reserved.