繁体   English   中英

负载平衡两次运行的tomcat应用程序

[英]Load balancing a tomcat application running on two wars

我的应用程序(部署在tomcat中)经历了两次大战,一个客户端(例如A)和一个服务器(例如B)。 两者都部署在同一jvm中,并且它们通过Web服务进行通信。 现在,为了使应用程序具有可伸缩性,我希望将其集群化并部署在多个节点中。 以下是apache服务器中的负载均衡器配置。

<Proxy balancer://mycluster stickysession=JSESSIONID>
BalancerMember ajp://127.0.0.1:8009 min=10 max=100 route=jvm1 loadfactor=1
BalancerMember ajp://127.0.0.1:8019 min=20 max=200 route=jvm2 loadfactor=1
</Proxy>

ProxyPass /A balancer://mycluster/A
ProxyPass /B balancer://mycluster/B

在我的客户端应用程序中,服务器网址如下所示

server.url=http://localhost/B/myservice/

我的意图是,到达节点上Web应用程序A的任何请求都应在同一节点上的Web应用程序B中得到处理。 但是使用当前配置,它并没有给出预期的结果。 在jvm1上的Web应用程序A中处理的请求转到在jvm2上的Web应用程序B,反之亦然。 请让我知道我在这里缺少什么,以及如何摆脱这个问题

您观察到的行为似乎是合理的:您向Apache负载均衡器发送了一个请求,该请求被路由到其中一个节点。 如果我了解您的情况正确,那么您想强制将请求(由您的Web应用程序发起)路由到正确的节点。 我可以想到两种方法来实现此目的:

  1. 我想到达Web应用程序A的初始请求来自拥有会话的用户。 如果您已在Tomcat中配置了粘性会话,则可以重用用户的会话cookie并将其与Web服务请求一起发送。 这样,负载均衡器将决定将请求路由到与为您带来Cookie的原始请求相同的节点。 但是,从调用Web服务的位置访问cookie可能并不可行。
  2. 处理您的内部请求并不是负载均衡器的工作。 那么为什么要使用它呢? 您可以在两个Tomcat配置中都添加常规HTTP连接器,然后将其用于Web服务请求。 因此,您可以规避负载平衡,在这种情况下,这只会增加不必要的延迟和通信开销。 缺点是:您可能需要对要调用的IP进行硬编码。

顺便说一句:您的配置看起来好像两个节点负载平衡器都在一台计算机上运行。 可以吗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM