基於tomcat集群會話保持
環境:
一臺nginx:ip 172.17.13.136
一臺tomcat1:ip 172.17.13.134
一臺tomcat2:ip 172.17.13.135
一、tomcat上操作:
1、下載jdk並安裝
lftp 172.17.0.1
cd pub/Sources/7.x86_64/jdk
mget jdk-8u144-linux-x64.rpm
rpm -ivh jdk-8u144-linux-x64.rpm
註意:安裝完成後,都要配置JAVA_HOME環境變量,指向java的安裝路徑;
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh
查看版本:Java -version
2、下載tomcat並解壓:
(1)、從官網下載tomcat二進制安裝包(http://tomcat.apache.org/)
#wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat- 8/v8.5.11/bin/apache-tomcat-8.5.11.tar.gz
或者ftp上下載(lftp 172.17.0.1;cd /pub/Sources/7.x86_64/tomcat/;mget apache-tomcat-7.0.78.tar.gz )
(2)、解壓
tar xvf apache-tomcat-7.0.78.tar.gz -C /usr/local/
查看解壓後的目錄:
ll /usr/local/ | grep tomcat
3、為方便管理,創建軟鏈接,或者直接mv改名。
ln -s /usr/local/apache-tomcat-7.0.78/ /usr/local/tomcat
4、PATH環境配置:
vim /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
賦予執行權限:
chmod +x /etc/profile.d/tomcat.sh
加載環境配置:
source /etc/profile.d/tomcat.sh
5、啟動tomcat
catalina.sh start
查看tomcat是否正常啟動(ss -ntl 查看端口8080)
6、測試是否正常:curl -I 127.0.0.1:8080
通過瀏覽器訪問:http://172.17.13.135:8080
http://172.17.13.134:8080
可訪問到tomcat頁面如下
實現會話保持:
1、vim server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> #jvmRoute表示唯一表示本機,所以不同主機的是不同的。這個參數非必須
<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.14.14.4" port="45564" frequency="500" dropTime="3000"/> #多播地址應該是224~239,同一組裏的多播地址相同
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="172.17.13.134" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> #address為本機能夠向外通信的地址
<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"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2、vim /usr/local/tomcat/conf/web.xml 給應用程序加<distributable/>標簽,使其能夠實現復制。在web-app字段加 <distributable/>。
將web.xml放在對應的項目目錄下:
mkdir /usr/local/tomcat/webapps/test/WEB-INF
cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/
重啟服務:catalina.sh stop
catalina.sh start
如果不能啟動,查看日誌logs/catalina.out信息如下(不能加入到組播) :
那麽添加到達組播的路由即可:route add -host 228.14.14.4 dev eth0
二、Nginx服務器上操作:
1、vim /etc/nginx/nginx.conf
upstream tomcat { 在http段配置
server 172.17.13.136:8080;
server 172.17.13.137:8080;
}
index index.jsp index.html; server段
location /{
proxy_pass http://tomcat;
}
2、測試頁面:在tomcat1和tomcat2上編輯測試頁面,tomcat1內容為A,tomcat2內容為B
Vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color="blue">TomcatB </h1>
<table 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>
3、訪問nginx服務器進行驗證:http://172.17.13.136/test/
可發現兩臺機器顯示的session ID相同
三、tomcat結合memcached實現seesion共享:
在所有的tomcat節點上:兩臺主機既做tomcat也做memcached
下載五個jar包,將jar包放在/usr/local/tomcat/lib:
1、cd /usr/local/tomcat/lib;
lftp 172.17.0.1
>cd /pub/Sources/7.x86_64/msm
>mget javolution-5.4.3.1.jar
memcached-session-manager-1.8.3.jar
memcached-session-manager-tc7-1.8.3.jar
msm-javolution-serializer-1.8.3.jar
spymemcached-2.11.1.jar
>exit
2、在host段定義一個用於測試的context容器,並在其中創建一個會話管理器。
vim server.xml 刪除之前的那一大段cluster配置,再在host中加入下面一段
<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.100.9:11211,n2:172.16.100.10:11211" #如果只有一個,可以只寫個ip,而且下一行failoverNodes不需要寫
failoverNodes="n1" 表示備用的,當n2壞了才會用n1.
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
</Context>
重啟服務:
catalina.sh stop
catalina.sh start
3、下載memcached,啟動服務
yum install memcached -y
systemctl start memcached
4、測試頁面及測試效果同上
基於tomcat集群會話保持