Apache+Tomcat負載均衡兩種session共享方式的設置

 session共享有兩種方式:
一、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登陸狀態;
二、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登陸信息,若是宕機,則等同於單點部署,會丟失;
3,使用一臺獨立的服務器來維護session
apache中針對上述兩個方法提供了不一樣的配置項:
  session replication:會話複製,即上述的方法一;
  session sticky:會話不復制,即上述的方法二;
-------------------------------
 
選取Apache HTTP Server做爲前端的負載服務器,後端選取兩個Tomcat做集羣。
1、採用粘性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都配置在同一臺服務器上,端口分別爲800九、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也須同前面的設置同樣。 css

下面用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上。
 
2、採用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中將如下配置打開:
  html

session共享有兩種方式:
一、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登陸狀態;
二、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登陸信息,若是宕機,則等同於單點部署,會丟失;
apache中針對上述兩個方法提供了不一樣的配置項:
  session replication:會話複製,即上述的方法一;
  session sticky:會話不復制,即上述的方法二;
-------------------------------
 
選取Apache HTTP Server做爲前端的負載服務器,後端選取兩個Tomcat做集羣。
1、採用粘性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都配置在同一臺服務器上,端口分別爲800九、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上。
 
2、採用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中將如下配置打開:
  web

session共享有兩種方式:
一、session共享,多個服務器session拷貝保存,一臺宕機不會影響用戶的登陸狀態;
二、請求精確集中定位,即當前用戶的請求都集中定位到一臺服務器中,這樣單臺服務器保存了用戶的session登陸信息,若是宕機,則等同於單點部署,會丟失;
apache中針對上述兩個方法提供了不一樣的配置項:
  session replication:會話複製,即上述的方法一;
  session sticky:會話不復制,即上述的方法二;
-------------------------------
 
選取Apache HTTP Server做爲前端的負載服務器,後端選取兩個Tomcat做集羣。
1、採用粘性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都配置在同一臺服務器上,端口分別爲800九、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也須同前面的設置同樣。 apache

下面用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上。
 
2、採用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,對於通常的需求用不到,用到了再進行學習瞭解 後端

相關文章
相關標籤/搜索