Apache+Tomcat負載均衡兩種session共享方式的設置
session共享有兩種方式:
1、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登錄狀態;
2、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登錄信息,如果宕機,則等同于單點部署,會丟失;
3,使用一臺獨立的服務器來維護session
apache中針對上述兩個方法提供了不同的配置項:
session replication:會話復制,即上述的方法一;
session sticky:會話不復制,即上述的方法二;
-------------------------------
選取Apache HTTP Server作為前端的負載服務器,后端選取兩個Tomcat作集群。
一、采用粘性Session
這種方式將同一用戶的請求轉發到特定的Tomcat服務器上,避免了集群中Session的復制,缺點是用戶只跟一種的一臺服務器通信,如果此服務器down掉,那就廢了。
采用的model為mod_proxy_ajp.so,整個配置在tomcat的配置文件中都有相關的注釋,只需作相應修改就OK。
我們選取的是Apache HTTP Server2.2.4,Tomcat6.0.41。
首先安裝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上。
二、采用Session復制
修改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/
ProxyPassReverse / balancer://tomcatcluster/
<Proxy balancer://tomcatcluster>
BalancerMember ajp://localhost:8009 route=a
BalancerMember ajp://localhost:9009 route=b
</Proxy> 接下來修改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也須同前面的設置一樣。
另外,還需要在tomcat中將以下配置打開:
session共享有兩種方式:
1、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登錄狀態;
2、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登錄信息,如果宕機,則等同于單點部署,會丟失;
apache中針對上述兩個方法提供了不同的配置項:
session replication:會話復制,即上述的方法一;
session sticky:會話不復制,即上述的方法二;
-------------------------------
選取Apache HTTP Server作為前端的負載服務器,后端選取兩個Tomcat作集群。
一、采用粘性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上。
二、采用Session復制
修改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/
ProxyPassReverse / balancer://tomcatcluster/
<Proxy balancer://tomcatcluster>
BalancerMember ajp://localhost:8009 route=a
BalancerMember ajp://localhost:9009 route=b
</Proxy> 接下來修改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也須同前面的設置一樣。
另外,還需要在tomcat中將以下配置打開:
session共享有兩種方式:
1、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登錄狀態;
2、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登錄信息,如果宕機,則等同于單點部署,會丟失;
apache中針對上述兩個方法提供了不同的配置項:
session replication:會話復制,即上述的方法一;
session sticky:會話不復制,即上述的方法二;
-------------------------------
選取Apache HTTP Server作為前端的負載服務器,后端選取兩個Tomcat作集群。
一、采用粘性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上。
二、采用Session復制
修改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/
ProxyPassReverse / balancer://tomcatcluster/
<Proxy balancer://tomcatcluster>
BalancerMember ajp://localhost:8009 route=a
BalancerMember ajp://localhost:9009 route=b
</Proxy> 接下來修改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也須同前面的設置一樣。
另外,還需要在tomcat中將以下配置打開:
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled" ackTimeout="15000" waitForAck="true"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> </Cluster>
最后,要在我們的應用程序里的web-inf下的web.xml文件<web-app>元素的最后加上: <distributable/>
三,那一臺獨立的服務器來維護session,對于一般的需求用不到,用到了再進行學習了解
原文地址:http://blog.sina.com.cn/s/blog_5f53615f0100p4fj.html