HAProxy 健康检查:使用 httpchk 并观察?

HAProxy 健康检查:使用 httpchk 并观察?

我正在使用 HAProxy 1.4.18,后端配置如下

backend staging
  option httpchk HEAD /check.txt HTTP/1.0
  http-check disable-on-404
  default-server error-limit 1 on-error mark-down
  server staging01 x.x.x.x:80 check observe layer7
  server staging02 x.x.x.x:80 check observe layer7

服务器在 apache/passenger 上运行多个应用程序。

httpchk 和 disable-on-404 的组合允许正常关闭并从 lb 中轻松删除服务器,同时仍然能够直接访问(即用于测试)。

我正在尝试设置观察,以便在应用程序不工作时禁用服务器。我破坏了 staging02 上的应用程序配置,因此它总是返回 500。它在第一个 500 之后被正确标记为 DOWN,但在下一个 httpchk 中被标记为 UP。

这是日志文件:

Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.

有没有办法将这两项检查结合起来?

答案1

我现在理解的区别是/check.txt实际上返回 200 响应,但对应用程序的所有请求都返回 500。HAProxy 看到从代理请求返回的 500 并将服务器从池中取出,但随后启动自己的检查,收到 200 并将服务器放回池中。

解决方案是执行以下任一操作:

  1. 配置 Apache 而不是应用程序,以便每个请求都返回 500 响应,即使是静态文件/check.txt
  2. 更改/check.txt为一个 Ruby 应用程序,其中包含足够的逻辑以便在适当的时候在 200 和 500 响应之间进行选择。
  3. 设置inter价值变成 3600 这样荒谬的数字。这样应该会给你一个小时的时间进行测试或者(如果服务器自行宕机)找出问题并重新启动。
  4. 将值设置inter为较小的值,例如 60,但将rise值设置为较大的值,例如 60。这也会给您一个小时的时间,然后服务器才会添加回池中。 (请注意,这两个列在最后,因为它们可能是非常糟糕的想法。)

相关内容