簡體   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