HAProxy - 一台服务器的多个微服务的健康检查

HAProxy - 一台服务器的多个微服务的健康检查

我们有 2 台 Web 服务器需要进行负载平衡。每台服务器都有一个供公众使用的主 Web 应用程序。每台服务器还具有多个由主应用程序内部使用的依赖微服务。

如果检测到任何一个服务器的微服务发生故障,我们希望负载均衡器排除该服务器。

http://server1/mainApp
http://server1/microservice1
http://server1/microservice2

http://server1/mainApp
http://server2/microservice1
http://server2/microservice2

因此如果http://server2/microservice2下降那么我们想要服务器1为所有流量提供服务。或者如果http://server1/microservice1发生故障,我们希望服务器2到服务器流量。

这种逻辑在 HAproxy 中可以实现吗?或者是否有其他技术可以为我们做到这一点?

谢谢!

答案1

HAproxy 没有内置此类复杂健康检查功能。

也就是说,您可以做的是在后端(或者在 LB 上,如果更容易/更好)编写一个快速而粗糙的页面,它对所有微服务执行 GET 请求并返回给定结果的给定状态代码或字符串;如果一切正常,则返回 200 和“OK”,否则返回 503 和“FAILED”。

我编写了一个类似的 .NET 页面来检查某个特定服务是否正在系统上运行,因为即使支持服务没有运行,IIS 也总是返回 200。

由于您只有 3 个微服务,所以它应该可以运行良好,但如果您有 10 个或数百个微服务,那么运行效果就不太好了。

答案2

您可以使用tcp-check。在后端部分,添加类​​似以下内容:

option tcp-check
tcp-check connect
tcp-check send GET\ /\mainApp\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)
tcp-check connect
tcp-check send GET\ /\microservice1\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)

看:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-tcp-check%20connect

相关内容