Apache 和 mod_proxy_balancer 上的現有連接不會故障轉移第二個 JBoss 節點
我有一個 Jboss 農場,由 Apache HTTP + mod_proxy_balancer 和 mod_proxy_ajp 進行負載平衡,配置如下:
<VirtualHost *:80> ServerName web-gui-acceptance.myorg.com ServerAlias web-gui-acceptance ProxyRequests Off ProxyPass /web-gui balancer://jbosscluster/web-gui stickysession=JSESSIONID nofailover=On ProxyPassReverse /web-gui http://srvlnx01.myorg.com:8080/web-gui ProxyPassReverse /web-gui http://srvlnx02.myorg.com:8080/web-gui <Proxy *> AuthType Kerberos [...] </Proxy> <Proxy balancer://jbosscluster> BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX01_node1 BalancerMember ajp://srvlnx01.myorg.com:8009 route=SRVLNX02_node1 ProxySet lbmethod=byrequests </Proxy> </VirtualHost>
當第一個 JBoss 節點發生故障(託管 VM 關閉)時,我現有的連接不會故障轉移到第二個節點……第一個路由被保留(在 table / .shm 中?),這為我提供了 503 錯誤。
有人可以告訴我我錯過了什麼嗎?
我可能找到了一種解決方法,也可以處理部署/取消部署:http ://www.jboss.org/mod_cluster
好處
與其他基於 httpd 的負載均衡器相比,mod_cluster 具有以下優勢:
httpd worker的動態配置
傳統的基於 httpd 的負載均衡器需要顯式配置可用於代理的工作程序。在 mod_cluster 中,代理的大部分配置駐留在應用程序伺服器上。應用程序伺服器將與之通信的代理集由靜態列表或通過廣告機制使用動態發現確定。應用伺服器將生命週期事件(例如伺服器啟動/關閉)中繼到代理,允許它們有效地自動配置自己。值得注意的是,伺服器的正常關閉不會導致代理的故障轉移響應,就像傳統的基於 httpd 的負載均衡器一樣。
伺服器端負載均衡因子計算
與傳統的基於 httpd 的負載均衡器相比,mod_cluster 使用由應用伺服器計算和提供的負載均衡因子,而不是在代理中計算這些因子。因此,mod_cluster 提供了一組比代理提供的更強大、更準確的負載指標。(有關更多資訊,請參閱負載指標)
細粒度的 Web 應用生命週期控制
傳統的基於 httpd 的負載均衡器不能很好地處理 Web 應用程序的取消部署。從代理的角度來看,對未部署的 Web 應用程序的請求與對不存在的資源的請求無法區分,並且會導致 404 錯誤。在 mod_cluster 中,每個伺服器將任何 Web 應用程序上下文生命週期事件(例如,Web 應用程序部署/取消部署)轉發到代理,通知它開始/停止將給定上下文的路由請求到該伺服器。
AJP 是可選的
與 mod_jk 不同,mod_cluster 不需要 AJP。與應用程序伺服器節點的 httpd 連接可以使用 HTTP、HTTPS 或 AJP。原始概念在 wiki 中進行了描述。
我希望這會有所幫助。