haproxy httpchk 对后端的多重检查

Elg*_*o08 7 load-balancing haproxy

是否可以在一个后端检查两个条件?例子

backend web-static
        option httpchk GET /path/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        option httpchk GET /path2/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        server appsrv1 192.168.1.10:80 check inter 3000 weight 1
Run Code Online (Sandbox Code Playgroud)

小智 7

啊,我也有同样的疑问!我们的开发人员根据一个 URL 名称制作了一个多功能 Web 服务,因为我们需要支持非 CORS 兼容的浏览器(IE 8 和 9)。通向一个 VIP 地址的一个 DNS 名称有多个子目录,每个子目录都是不同的应用程序。所以我们的负载均衡器必须对每个服务进行健康检查,然后将其视为一个大的“与”测试,即,如果甚至其中一个服务没有通过检查,那么我们必须将该服务器从农场,直到他们全部通过。

我们正在从 Cisco ACE 负载平衡器过渡,在该平台上,您只需定义多个“探针”配置,然后在单个服务器群中调用多个探针,一行接一行,然后它运行所有探针。正如您可能发现的那样,HAProxy 不会让您定义多个“选项 httpchk”……或者至少它会忽略除其中之一之外的所有选项,因此您无法获得所需的测试。但是我从手册中发现,我可以通过不使用 httpchk 来完成,在“option tcp-check”下替换一系列“connect、send、check”行。它完美地工作。

option tcp-check
tcp-check connect
tcp-check send GET\ /FirstApplication/check.aspx?healthcheck\ HTTP/1.0\r\n\r\n
tcp-check expect string Healthy
tcp-check connect
tcp-check send GET\ /SecondApplication/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesThisIsGood
tcp-check connect
tcp-check send GET\ /ThirdApp/Check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string ExpectedCheckResult
tcp-check connect
tcp-check send GET\ /NumberFourApp/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesItIsWorking
Run Code Online (Sandbox Code Playgroud)

请注意,您必须对要发送的字符串中的每个空格进行反斜杠转义。我在请求中使用 HTTP/1.0,默认情况下它不执行 keepalive,所以我在每个系列的行中重新连接。我想我也可以使用 HTTP/1.1,但是我还必须传输一个 Host 标头,所以我认为这种方式更容易。连续运行这四个检查,仍然只需要60ms,所以我很满意。另请注意,我只是使用“期望字符串”,但还有一个“期望 rstring”用于正则表达式搜索从服务器返回的结果内容。


pet*_*nar 2

也许,制作一个“包装器”PHP 会更容易:它检查其他文件,如果一切正常,它会返回 HTTP 代码 200,如果没有,则返回 404。

我记得,当我们也需要功能检查时,这对我们也有用。