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/


1,在tomcat中找到文件apache-tomcat-6.0.37\conf\context.xml 加入内部 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.65:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false" /> 加入之后的content.xml的内容为 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- The contents of this file will be loaded for each web application --> <Context> <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值