Tomcat 基於MSM做Session共享


前言

  在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 &quot;%r&quot; %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/


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