用msm来实现Tomcat +memcached的session保持

前言:

在tomcat集群中,当一个节点出现故障时候,其他节点如何接管故障节点的session信息,下面内容是基于Msm+Memcached来实现session共享的。

Msm: memcached session manager是一个高可用的tomcat sesion 共享解决方案,除了可以从本机的内存中快读读取session信息外,同时可以使用memcached存取session,以实现高可用。

安装在tomcat上的Msm使用本机内存保存session,当一个请求执行完毕之后,如果对应的session在本地不存在,则将该session复制一份到memcached,当该session的下。

[简单环境说明:主机两台,192.168.1.122,192.168.1.123,在192.168.1.122上安装nginx,两台上面分别安装memcached和tomcat,nginx上面放静态文件实现动静分离,分别安装tomcat进行做负载让nginx去调度。具体实现方法如下]

Tomcat的配置

1,确保已经将所需的jar包放入到各个tomcat节点的tomcat安装目录下的lib目录中(/usr/local/tomcat/lib/)

可以在一台或者多台服务器安装tomcat服务,一台多实例看我博客,多实例tomcat安装。http://www.mrliangqi.com/988.html

jar包官网下载:http://code.google.com/p/memcached-session-manager/downloads/list

本地下载地址:https://yunpan.cn/cqZmjbThBUhyN   访问密码 e8c9

[root@yscf2 soft]# cd msm_lib/

[root@yscf2 msm_lib]# ls

javolution-5.4.3.1.jar

memcached-session-manager-tc7-1.6.3.jar

spymemcached-2.7.3.jar

memcached-session-manager-1.6.3.jar

msm-javolution-serializer-1.6.3.jar

2,然后修改/usr/local/tomcat/conf/context.xml配置文件,添加以下配置。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:192.168.1.122:11211,n2:192.168.1.123:11211"

requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"

sessionBackupAsync="false"

sessionBackupTimeout="100"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

copyCollectionsForSerialization="false" />

3,在各节的/usr/local/tomcat/webapps/ROOT/目录中新建一个aa.jsp的文件并添加以下内容,来验证session.

[在为了区分,把TomcatA改成B,把red改成blue。]

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="red">TomcatA.mrliangqi.com</font></h1>

<table align="centre" border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("mrliangqi.com","mrlianqgi.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

4,启动tomcat来测试session共享是否成功

下面来模拟tomcatA节点故障,看看session会发生什么改变。虽然tomcatA故障,用户请求被调度到tomcatB节点上,但是session集群内的所有的节点都保存了全局的session信息,很好的实现了用户访问的不中断。Session信息在n1上面,而且sessionid没有发现变化。

2016032901


发表评论

登录 后发表评论.