前言
在Tomcat集羣中,當一個節點出現故障,雖然我們有高可用集羣來負責故障轉移,但用戶的session信息如何保持呢?下面介紹一下如何利用MSM+Memcached做Session共享、
相關介紹
MSM
MSM–Memcached Session Manager是一個高可用的Tomcat Session共享解決方案,除了可以從本機內存快速讀取Session信息(僅針對黏性Session)外,同時可使用Memcached存取Session,以實現高可用。
安裝配置
一、Nginxi配置
1、安裝nginx服務
[root@centos7 ~]# yum install nginx -y
2、編輯配置文件
1 2 3 4 5 6 7 8 9 10 |
http { upstream tomsrv { server 172.16.100.5:8080; server 172.16.100.6:8080; } server { location / { proxy_pass http://tomsrv; } } |
3、啓動服務
[root@centos7 ~]# systemctl start nginx.service
二、所有節點統一配置
1、安裝jdk
[root@node5 ~]# rpm -ivh jdk-8u73-linux-x64.rpm
2、安裝Tomcat
[root@node5 ~]# tar -xf apache-tomcat-8.0.33.tar.gz -C /usr/local/
[root@node5 ~]# cd /usr/local/
[root@node5 ~]# ln -sv apache-tomcat-8.0.33 tomcat
3、設置環境變量
JAVA
1 2 3 4 5 6 7 |
[root@node5 ~]# echo "export JAVA_HOME=/usr/java/latest" > /etc/profile.d/java.sh [root@node5 ~]# echo 'port PATH=$JAVA_HOME/bin:$PATH'> /etc/profile.d/java.sh [root@node5 ~]# . /etc/profile.d/java.sh [root@node5 ~]# java -version java version "1.8.0_73" Java(TM) SE Runtime Environment (build 1.8.0_73-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode) |
Tomcat
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@node5 ~]# echo "CATALINA_HOME=/usr/local/tomcat" > /etc/profile.d/tomcat.sh [root@node5 ~]# echo "export CATALINA_HOME=/usr/local/tomcat" > /etc/profile.d/tomcat.sh [root@node5 ~]# echo 'export PATH=$CATALINA_HOME/bin:$PATH' >> /etc/profile.d/tomcat.sh [root@node5 ~]# . /etc/profile.d/tomcat.sh [root@node5 ~]# catalina.sh vsrsion Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Usage: catalina.sh ( commands ... ) commands:...... |
4、複製庫文件
[root@node5 ~]# cp memcached-session-manager-1.9.2.jar memcached-session-manager-tc8-1.9.2.jar javolution-5.4.3.1.jar msm-javolution-serializer-1.9.2.jar spymemcached-2.11.1.jar /usr/local/tomcat/lib/
5、編輯配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<Engine name="Catalina" defaultHost="node5.redhat.com" jvmRoute="node5"> <!--這裏根據各節點名稱進行修改--> <Host name="node5.redhat.com" appBase="/data/webapps" unpackWARS="true" autoDeploy="true"> <!--這裏根據各節點名稱進行修改--> <Context path="" docBase="/data/webapps" reloadable="true" > <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.100.5:11211,n2:172.16.100.6:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs" prefix="web1_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> |
6、創建項目目錄
[root@node5 ~]# mkdir -pv /data/webapps/{WEB-INF,META-INF,classes,lib}
7、編輯主頁面文件
[root@node5 ~]# vim /data/webapps/index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<%@ page language="java" %>
<html>
<head><title>node5</title></head>
<body>
<h1><font color="blue">node5.redhat.com</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("magedu.com","magedu.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
<!--根據各節點名稱進行修改主機名-->
|
結論
當配置好上述節點後,直接訪問nginx服務器,就能訪問tomcat提供的頁面了,就算是輪詢調度,Session ID也不會改變。
轉自:https://magedu.org/2016/05/04/tomcat-session-msm/