HAproxy:当服务器速度慢时选择不同的后端

HAproxy:当服务器速度慢时选择不同的后端

haproxy我正在尝试实现一种方法,在服务器宕机或运行缓慢(超过某些限制)时直接“伪造”服务器响应。

我编写了一个 lua 脚本,将其加载到 haproxy 中(并注册为 core.service),以轻量级和快速的方式模仿服务器行为。

现在我需要根据规则做出后端选择:

  1. 后端已关闭(所有服务器的健康检查均失败)。
  2. 后端足够慢,我不想等待真正的响应。

对于第一部分我设法做到了:

acl backend_down nbsrv(be) lt 1
...
use_backend fallback_backend if backend_down

backend fallback_backend
   http-request use-service lua.fallback_service

我似乎找不到第二部分的好方法。我如何检查响应时间并根据结果在配置中做出决定?

答案1

我的方法 - 您仍然在健康检查中实现这一点。您只需测量响应时间,计算平均值,如果平均值太高,则返回 /api/responsetime 上的 503 HTTP 状态。我不认为有一个变量可以存储可用于 ACL 的响应时间。即使存在 - 每个 ACL 路径都是针对每个请求独立处理的 - 您仍然需要根据当前请求上下文计算 ACL(包括其单独的处理时间,您将在它从上游服务器处理后获得该时间)。

另一种方法是让外部服务测量这些时间并通过管理套接字禁用/启用服务器。

相关内容