haproxy httpchk 在后端进行多次检查

haproxy httpchk 在后端进行多次检查

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

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

答案1

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

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

答案2

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

我们正在从 Cisco ACE 负载均衡器过渡,在该平台上,您只需定义多个“探测”配置,然后在单个服务器群中一行一行地调用多个探测,它就会运行所有探测。您可能已经发现,HAProxy 不允许您定义多个“选项 httpchk”……或者至少它会忽略除其中一个之外的所有选项,因此您无法获得所需的测试。但我从手册中发现,我可以通过不使用 httpchk 来做到这一点,而是在“选项 tcp-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

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

相关内容