部署tomcat負載均衡集羣,實現節點之間內存中的Session共享。

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

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

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

用於非集羣環境中對單個處於運行狀態的Tomcat實例會話進行管理。當Tomcat關閉時,這些會話相關的數據會被寫入磁盤上的一個名叫SESSION.ser的文件,並在Tomcat下次啓動時讀取此文件。如果tomcat正常關閉會話不會丟失,如果是tomcat主機崩潰或者進程崩潰那會話是一定會丟失的。

2PersistentManager (持久會話管理器)

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

3DeltaManager (集羣會話管理器)

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

4BackupManager

    用於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反向代理,負載均衡。 (這個過程我們在前篇博文有講到這裏略)

請參考: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 />

如圖:

wKiom1Pss1jRLoZhAAGNWSAPcJM975.jpg

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

訪問我們的負載均衡服務器192.168.18.203/testapp

wKioL1PstvyBfrMqAAEpQSUVoJE240.jpg


刷新頁面

wKiom1PstiHwqBBfAAF40v7yfYE473.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章