Apache+Tomcat關於Session Sticky的負載平衡

來源:互聯網
上載者:User

選取Apache HTTP Server作為前端的負載伺服器,後端選取兩個Tomcat作叢集,此次選擇的配置方式為Session Sticky(粘性Session),這種方式將同一使用者的請求轉寄到特定的Tomcat伺服器上,避免了叢集中Session的複製,缺點是使用者只跟一種的一台伺服器通訊,如果此伺服器down掉,那就廢了。
採用的model為mod_proxy_ajp.so,整個配置在tomcat的設定檔中都有相關的注釋,只需作相應修改就OK。
我們選取的是Apache HTTP Server2.2.4,Tomcat5.5.16。
首先安裝Apache HTTP Server,然後修改其設定檔http.conf,首先load三個model,代碼如下:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

然後在此設定檔末端加入以下代碼:

ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  
ProxyPassReverse / balancer://tomcatcluster/   
  
<Proxy balancer://tomcatcluster>  
BalancerMember ajp://localhost:8009 route=a  
BalancerMember ajp://localhost:9009 route=b
</Proxy> 

以上代碼配置了Proxy的相關參數,<Proxy>模組定義了均衡負載的配置,其中兩個Tomcat Server都配置在同一台伺服器上,連接埠分別為8009、9009,並配置各自的route,這樣Apache Server就能根據route將請求轉寄給特定的Tomcat。
接下來修改Tomcat的server.xml檔案,如下:

<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

其中的port為前面<Proxy>中設定的連接埠,還要配置其route,代碼如下:

<!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="a">

jvmRoute也須同前面的設定一樣。

下面用JMeter對配置後的負載平衡做一測試,首先先啟動兩個Tomcat Server,隨後啟動Apache Server,在JMeter中建立測試計劃,在兩個Tomcat Server中的jsp-examples下建立test.jsp(此jsp自己隨便寫兩句就成),然後進行測試,以下是部分取樣器結果:

HTTP response headers:
HTTP/1.1 200 OK
Date: Wed, 11 Jul 2007 02:17:55 GMT
Set-Cookie: JSESSIONID=AC7EF1CAA8C6B0FEB68E77D7D375E2AF.b; Path=/jsp-examples
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 3
Keep-Alive: timeout=5, max=79
Connection: Keep-Alive

以上紅色代碼錶示使用者的http請求中的JSESSIONID中已經附帶了route尾碼,.b表示此請求將轉寄到route為b的Tomcat Server上,你將會發現其中的一部分請求的JSESSIONID尾碼為.a,也就是轉寄給route為a的Tomcat Server上。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.