2
我試圖將Apache設置爲具有會話關聯的2個Tomcat實例的負載平衡器。配置Apache和Tomcat以實現負載平衡
目標是讓會話保持在一臺服務器上,但要有下一個會話(當它由後端服務器更改時)轉到下一個可用服務器(比方說使用循環算法更容易實現)。在Tomcat中使用「jvmRoute」和Apache中的等效「路由」時,執行路由的實際值是路由名稱,該路由名稱不會更改,並且所有請求都始終路由到單個客戶端的同一後端服務器。
我發現到目前爲止,只有使用JSESSIONID cookie時存在雞/雞蛋問題。讓我們考慮以下設置:
2的Tomcat服務器上的端口8009和8010(AJP13) 1 Apache服務器具有以下配置
<Proxy balancer://hello-cluster>
BalancerMember ajp://127.0.0.1:8009/hello
BalancerMember ajp://127.0.0.1:8010/hello
</Proxy>
ProxyPass /hello balancer://hello-cluster stickysession=JSESSIONID
而且這裏聽的情景:
- 第一請求沒有cookie,所以Apache選擇負載均衡器中的下一個可用服務器來處理請求。
- 後端Tomcat服務器設置JSESSIONID,但不記下返回的實際值。
- 下一個請求時,阿帕奇指出,有對給定JSESSIONID注意到沒有後端服務器,因此它選擇下一個可用的,在這種情況下,另一種爲提供服務的第一個請求
- 的Tomcat注意到JSESSIONID的值是無效的,所以它創建一個新的。
- Apache不記下JSESSIONID已更改爲將其固定到該後端服務器。
- 返回頁首3
有沒有辦法說服Apache注意Tomcat返回的值?