Apache+Tomcat負(fù)載均衡兩種session共享方式的設(shè)置session共享有兩種方式:1、session共享,多個服務(wù)器session拷貝保存,一臺宕機(jī)不會影響用戶的登錄狀態(tài); 2、請求精確集中定位,即當(dāng)前用戶的請求都集中定位到一臺服務(wù)器中,這樣單臺服務(wù)器保存了用戶的session登錄信息,如果宕機(jī),則等同于單點(diǎn)部署,會丟失; apache中針對上述兩個方法提供了不同的配置項: ------------------------------- 選取Apache HTTP Server作為前端的負(fù)載服務(wù)器,后端選取兩個Tomcat作集群。 一、采用粘性Session
這種方式將同一用戶的請求轉(zhuǎn)發(fā)到特定的Tomcat服務(wù)器上,避免了集群中Session的復(fù)制,缺點(diǎn)是用戶只跟一種的一臺服務(wù)器通信,如果此服務(wù)器down掉,那就廢了。 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的相關(guān)參數(shù),<Proxy>模塊定義了均衡負(fù)載的配置,其中兩個Tomcat Server都配置在同一臺服務(wù)器上,端口分別為8009、9009,并配置各自的route,這樣Apache Server就能根據(jù)route將請求轉(zhuǎn)發(fā)給特定的Tomcat。 接下來修改Tomcat的server.xml文件,如下: <!-- Define an AJP 1.3 Connector on port 8009
--> <!--
Define the top level container in our
container hierarchy --> 下面用JMeter對配置后的負(fù)載均衡做一測試,首先先啟動兩個Tomcat Server,隨后啟動Apache Server,在JMeter中新建測試計劃,在兩個Tomcat Server中的jsp-examples下新建test.jsp(此jsp自己隨便寫兩句就成),然后進(jìn)行測試,以下是部分取樣器結(jié)果: HTTP
response headers: HTTP/1.1
200 OK Date:
Wed, 11 Jul 2007 02:17:55 GMT Set-Cookie:
JSESSIONID=AC7EF1CAA8C6B0FEB68E77D7 Content-Type:
text/html;charset=ISO-8859-1 Content-Length:
3 Keep-Alive:
timeout=5, max=79 Connection:
Keep-Alive以上紅色代碼表示用戶的http請求中的JSESSIONID中已經(jīng)附帶了route后綴,.b表示此請求將轉(zhuǎn)發(fā)到route為b的Tomcat Server上,你將會發(fā)現(xiàn)其中的一部分請求的JSESSIONID后綴為.a,也就是轉(zhuǎn)發(fā)給route為a的Tomcat Server上。 二、采用Session復(fù)制 修改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然后在此配置文件末端加入以下代碼:
<!-- Define an AJP 1.3 Connector on port 8009
--> <!--
Define the top level container in our
container hierarchy --> jvmRoute也須同前面的設(shè)置一樣。
|
|
|