我正努力在幾個應用程序服務器前設置一個Apache httpd負載均衡器。這是我的配置:使用Apache HTTPD的負載均衡器
ProxyRequests off
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080
BalancerMember http://remote-svr:8080
ProxySet lbmethod=bybusyness
ProxySet stickysession=JESSIONIDSSO
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass/balancer://mycluster/
ProxyPassReverse/balancer://mycluster/
ProxyPassReverseCookieDomain http://127.0.0.1:8080 localhost
ProxyPassReverseCookieDomain http://remote-svr:8080 localhost
我不知道最後兩行按兵不動,雖然許多例子,我在網上看了他們使用一個,所以我加了他們,看它是否固定我的問題(它沒有)。
的問題是,如果我註釋掉要麼BalancerMember線,例如:
#BalancerMember http://127.0.0.1:8080
BalancerMember http://remote-svr:8080
然後從用戶的角度來看的行爲是好的,但是當兩個成員是活動的,行爲是錯誤的。
該應用程序最初顯示一個登錄屏幕,但是當兩個負載均衡器都處於活動狀態時,用戶提交用戶名和密碼時會重新導向到登錄屏幕,可能會丟失會話。有誰知道這個問題可能是什麼?
編輯 - 現在的工作
作參考,這一設置現在似乎工作:
ProxyRequests off
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080 route=localServer
BalancerMember http://remote-svr:8080 route=remoteServer
ProxySet lbmethod=bybusyness
ProxySet stickysession=ROUTEID
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass/balancer://mycluster/
ProxyPassReverse/balancer://mycluster/
注意「路線」屬性的各個節點需要在節點本身(服務器上設置。在這種情況下,服務器運行JBoss時爲xml)。 JSESSIONID對單個應用程序的粘滯會話cookie起作用,但每個服務器上都有多個應用程序,並且用戶需要爲所有應用程序使用相同的節點。
如果您懷疑粘性被破壞,可以嘗試在文檔的[疑難解答](http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html#stickyness_troubleshooting)部分中介紹的內容,可能會得到你轉發? – Qben
您必須啓用應用程序服務器之間的會話共享,否則不會知道登錄到另一個應用程序服務器。 – EJP
EJP,會話共享會對代碼進行相當多的修改,目前這不是一種選擇。我們希望使用粘性會話來避免這種情況,通過確保每次都將單個用戶路由到同一個應用服務器,但不同的用戶將使用不同的應用服務器。 –