2013-08-21 87 views
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 

而且這裏聽的情景:

  1. 第一請求沒有cookie,所以Apache選擇負載均衡器中的下一個可用服務器來處理請求。
  2. 後端Tomcat服務器設置JSESSIONID,但不記下返回的實際值。
  3. 下一個請求時,阿帕奇指出,有對給定JSESSIONID注意到沒有後端服務器,因此它選擇下一個可用的,在這種情況下,另一種爲提供服務的第一個請求
  4. 的Tomcat注意到JSESSIONID的值是無效的,所以它創建一個新的。
  5. Apache不記下JSESSIONID已更改爲將其固定到該後端服務器。
  6. 返回頁首3

有沒有辦法說服Apache注意Tomcat返回的值?

回答