我有两个后端,以便在我的应用程序中维护两组规则。一个用于通过浏览器访问的主网站(烹饪会话),一个用于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
如图所示,两个后端使用相同的服务器,但API不需要设置cookie。 (或将会)更多地将逻辑分开,例如速率限制规则。
我的问题是如何避免重复健康检查?每台服务器两次ping同一端点是浪费资源。我想让web
后端进行运行状况检查,并将api
后端标记为向上或向下。这可能吗?或者也许有更好的方法来分离后端,但保留常见的功能。
答案 0 :(得分:2)
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
这是1.6,但后来的版本应该是相同的。 该功能也存在于1.5和1.4中。它可能存在于以前的版本中,但这些版本没有维护,您不应该使用它们。