標籤: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