我们有2个Web服务器,我们要负载平衡。 每个服务器都有一个主要的networking应用程序,受到公众的打击。 每个服务器还有一些由主应用程序在内部使用的相关微服务。
我们希望负载平衡器在检测到服务器的任何一个微服务被closures的情况下排除服务器。
http://server1/mainApp http://server1/microservice1 http://server1/microservice2 http://server1/mainApp http://server2/microservice1 http://server2/microservice2
所以如果http://server2/microservice2出现故障,我们希望server1为所有stream量提供服务。 或者,如果http://server1/microservice1宕机,我们希望server2到服务器通信。
HAproxy中可以实现这种逻辑吗? 还是有另一种技术可以为我们做到这一点?
谢谢!
HAproxy没有像这样的复杂健康检查的内置function。
也就是说,你可以做的是在后端(或者如果它更简单/更好的话在LB上)写一个快速和脏的页面,它在所有的微服务上执行GET请求,并为给定的结果返回给定的状态码或string; 200,如果没关系,就OK,503,如果没有,则为“FAILED”。
我写了一个类似的.NET页面来检查系统上是否运行了特定的服务,因为即使没有运行支持服务,IIS总是返回200。
既然你只有3个微服务,它应该工作得很好,但是如果你有10个或者数百个微服务,那就不是那么重要。
你可以使用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