配置 haproxy 仅禁用受影响的服务,同时保持轻松快速地关闭整个盒子

配置 haproxy 仅禁用受影响的服务,同时保持轻松快速地关闭整个盒子

我们使用 haproxy 在多台机器之间进行负载平衡。我们的应用程序包含许多服务,每个服务都作为 tomcat 中的独立 war 部署,可供请求。目前我有一个进行负载平衡的后端,这意味着如果任何一台服务器开始返回错误,整个盒子将被视为“坏的”,并从负载平衡器中移除。

例如,如果有人在框 A 中发出请求时https://myAwsomeApp/foo/然后,盒子 A 将从负载均衡器中完全移除,这意味着对https://myAwsomeApp/bar/永远不会被路由到框 A,即使该单独的服务可以运行并且仍然可以支持对它的请求。

我想改变这一点,让每个服务都是独立的,这样即使 foo 应用程序在盒子 A 上出现故障,对 /bar 的请求仍然会被路由到 A。

我知道我可以使用 ACl 来引起请求https://myAwsomeApp/foo转到不同的后端然后请求https://myAwsomeApp/bar;但是这看起来有点愚蠢,因为两个后端有完全相同的主机。

我还想要一种快速的方法来一次性关闭整个盒子,当我们部署新代码或在特定站点遇到问题时,必须修改 10 个后端(盒子支持的每个服务一个),这似乎很烦人,并且容易在错过一个后端时出错。

那么有没有一种更干净的方法可以两全其美呢?让 haproxy 只禁用那些被证明不好的服务,同时也可以轻松地一次性关闭一个盒子上的所有服务。

答案1

如果您希望对每项服务进行独立的健康检查,并且您应该这样做,那么您确实需要为每个服务提供一个后端。好消息是您不需要手动配置所有服务器。设置 DNS,HAProxy 可以使用 server-template 和 resolvers 参数发现您的服务器。

https://www.haproxy.com/blog/whats-new-haproxy-1-8/#dns-for-service-discovery

答案2

最好的办法是使用 server.xml 中的 appbase 设置将 tomcat 配置为每个应用程序使用一个连接器(端口)。然后只需为每个端口设置一个后端即可。

以下是来自 stackoverflow 的解决方法:https://stackoverflow.com/questions/23569327/deploying-multiple-applications-to-tomcat

相关内容