部署tomcat負載平衡叢集,實現節點之間記憶體中的Session共用。

來源:互聯網
上載者:User

標籤:session   tomcat叢集   

    在實驗之前先來瞭解下tomcat會話管理器(Manager)

Manger對象用於實現HTTP會話管理的功能,介紹下幾種常見的:

1、StandardManager(標準會話管理器)

用於非叢集環境中對單個處於運行狀態的Tomcat執行個體會話進行管理。當Tomcat關閉時,這些會話相關的資料會被寫入磁碟上的一個名叫SESSION.ser的檔案,並在Tomcat下次啟動時讀取此檔案。如果tomcat正常關閉會話不會丟失,如果是tomcat主機崩潰或者進程崩潰那會話是一定會丟失的。

2、PersistentManager (持久會話管理器)

當一個會話長時間處於空閑狀態時會被寫入到swap會話對象,這對於記憶體資源比較吃緊的應用環境來說比較有用。

3、DeltaManager (叢集會話管理器)

    用於配置一個tomcat會話叢集,加入當前叢集組中的節點並在各節點間傳遞心跳資訊,而且可以在接收不到某成員的心跳資訊時將其從叢集節點中移除,節點之間會通過多播通道將自己的會話訊息傳遞給其他節點,使得每個節點會話共用。(這個看似很完美,但是如果在大規模的叢集中,同步的會話量將會很大,造成很大的資源佔用這是非常不適用的。)

4、BackupManager

    用於Tomcat叢集的會話管理器,與DeltaManager不同的是,某節點會話的改變只會同步給叢集中的一個節點或者有限節點,而非全部節點。這樣可以有效降低會話同步的代價。


實驗一、配置一個session共用叢集(DeltaManager)

實驗環境:RHEL6.4+Tomcat/7.0.55

admin1.tuchao.com  192.168.18.201 //tomcat伺服器

admin2.tuchao.com  192.168.18.202 //tomcat伺服器

admin3.tuchao.com  192.168.18.203 //Apache伺服器


admin1安裝jdk與tomcat(略)

配置測試頁面

mkdir /usr/local/tomcat/webapps/testapp{classes,WEB-INF} -pv

vim /usr/local/tomcat/webapps/testapp/index.jsp

加入以下代碼:

<%@ page language="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA </font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("abc","abc"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

配置完成後啟動tomcat。

admin2安裝jdk與tomcat(略)

配置測試頁面

mkdir /usr/local/tomcat/webapps/testapp{classes,WEB-INF} -pv

vim /usr/local/tomcat/webapps/testapp/index.jsp

加入以下代碼:

<%@ page language="java" %>

<html>

  <head><title>TomcatB</title></head>

  <body>

    <h1><font color="blue">TomcatB </font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("abc","abc"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

配置完成後啟動tomcat。

admin3  配置Apache反向 Proxy,負載平衡。 (這個過程我們在前篇博文有講到這裡略)

請參考:http://tchuairen.blog.51cto.com/3848118/1539278


配置叢集

編輯 /usr/local/tomcat/conf/server.xml 在Engine段中添加如下代碼:


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="8">


          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>


          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="228.50.10.1"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="192.168.18.201"

                      port="4000"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>


            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>


          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>


          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>


          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

        </Cluster>

我們配置的時候要修改的只有下面兩個段:

Membership 

用於Channel中配置同一通訊通道上節點叢集組中的成員情況,即監控加入當前叢集組中的節點並在各節點間傳遞心跳資訊,而且可以在接收不到某成員的心跳資訊時將其從叢集節點中移除。 需要將這段內容中的多播地址,修改為自己適用的。Tomcat6中Membership的實現是org.apache.catalina.tribes.membership.McastService。


Receiver

用於Channel定義某節點如何從其它節點的Sender接收複製資料,Tomcat6中實現的接收方式有兩種BioReceiver和NioReceiver。 需要修改用於從其他節點接收資料的IP地址。


給需要配置會話共用叢集的應用程式配置使用分布式會話

編輯應用程式目錄下WEB-INF檔案夾中的web.xml檔案 

在web-app段中添加 <distributable />


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/DD/wKiom1Pss1jRLoZhAAGNWSAPcJM975.jpg" title="FBEUPRMF@L%_N][EH]6JJ5A.jpg" alt="wKiom1Pss1jRLoZhAAGNWSAPcJM975.jpg" />

注意這些步驟每個叢集節點都要配置,之後重啟tomcat服務。

訪問我們的負載平衡伺服器192.168.18.203/testapp

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/DF/wKioL1PstvyBfrMqAAEpQSUVoJE240.jpg" title="N%MPCNDU2607UAGD@FWIQ2G.jpg" alt="wKioL1PstvyBfrMqAAEpQSUVoJE240.jpg" />


重新整理頁面

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/45/DD/wKiom1PstiHwqBBfAAF40v7yfYE473.jpg" title="0HPMRII99U$@E$_%]GS2G_Y.jpg" alt="wKiom1PstiHwqBBfAAF40v7yfYE473.jpg" />


本文出自 “壞人的部落格” 部落格,請務必保留此出處http://tchuairen.blog.51cto.com/3848118/1540307

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.