如何在多个后端之间共享健康检查?

Tim*_*Tim 5 high-availability haproxy

我有两个后端,以便在我的应用程序中维护两组规则。一种用于通过浏览器访问的主网站(cookied 会话),另一种用于 API(无状态并通过 API 密钥进行身份验证)。

配置看起来像这样(大大简化)。

defaults
    option httpchk HEAD /ping

backend web
    cookie _srv insert indirect
    server srv1 10.0.0.1:80 cookie srv1 check inter 10s
    server srv2 10.0.0.2:80 cookie srv2 check inter 10s

backend api
    stick-table type string len 50 expire 1d store http_req_cnt
    stick on url_param(key)
    server srv1 10.0.0.1:80 check inter 10s
    server srv2 10.0.0.2:80 check inter 10s
Run Code Online (Sandbox Code Playgroud)

如图所示,两个后端使用相同的服务器,只是 API 不需要设置 cookie。有(或将会有)更多的逻辑需要分离,例如速率限制规则。

我的问题是如何避免重复健康检查?对每台服务器对同一端点执行两次 ping 操作会浪费资源。我想让web后端进行健康检查,并将api后端标记为启动或关闭。这可能吗?或者也许有更好的方法来分离后端但保留通用功能。

Mic*_*bot 5

track [<proxy>/]<server>

此选项允许通过跟踪另一台服务器来设置服务器的当前状态。可以跟踪一个服务器,而该服务器本身又跟踪另一个服务器,前提是在链的末端,服务器启用了运行状况检查。如果省略,则使用当前的。如果disable-on-404使用,则必须在两个代理上启用它。

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#5.2-track

这在行中server

backend api
    server srv1 10.0.0.1:80 track web/srv1
    server srv2 10.0.0.2:80 track web/srv2
Run Code Online (Sandbox Code Playgroud)

这是从1.6开始的,但是以后的版本应该是一样的。该功能也存在于 1.5 和 1.4 中。它可能存在于以前的版本中,但这些版本没有维护,您不应该使用它们。