Tomcat通过memcached实现session共享

可以在context.xml或者server.xml上配置集群文件,我这里在context.xml上添加memcached-session-manager配置语句:

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

    sticky="false"

    memcachedNodes="n1:172.16.*.*:11211"

    failoverNodes=""

    requestUriIgnorePattern="*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"

    sessionBackupAsync="false"

    sessionBackupTimeout="1800000"

    <!-- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" -->
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
    <!--customConverter="de.javakaffee.web.msm.serializer.kryo.JodaDateTimeRegistration,de.javakaffee.web.msm.serializer.kryo.WicketSerializerFactory"  -->
/>

 

关于各参数的意思及用法参考: Overview over memcached-session-manager configuration attributes 章节。

修改$TOMCAT_HOME/conf/server.xml,启有ENGIN标签中的JVMROOT属性,启用的目的就是为了区分SESSION是在哪个节点上生成的,也可不启用。

测试session

修改之后,创建一个index.jsp测试session共享的文档,重启两个tomcat实例。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster Test</title></head>
<body>
<%
  //HttpSession session = request.getSession(true); 
  System.out.println(session.getId());
  out.println("<br> SESSION ID:" + session.getId()+"<br>");
  // 如果有新的请求,则添加session属性 
  String name = request.getParameter("name");
  if (name != null && name.length() > 0) {
     String value = request.getParameter("value");
     session.setAttribute(name, value);
  }
    out.print("<b>Session List:</b>");
    Enumeration<String> names = session.getAttributeNames();
    while (names.hasMoreElements()) {
        String sname = names.nextElement();
        String value = session.getAttribute(sname).toString();
        out.println( sname + " = " + value+"<br>");
        System.out.println( sname + " = " + value);
   }
%>
%</body>
%</html>

粘贴进来的时候可能有缩进的格式不正确的现象,使用set paste可以临时关闭缩进 或者
比较方便的方法就是修改用户家目录下的 .vimrc配置文件: set pastetoggle=<F9> ,以后在插入模式下,只要按F9键就可以快速切换自动缩进模式了。
 

测试步骤:

A:测试直接各节点访问测试页,若能正常显示且显示出SESSIONID值,表示TOMCAT运行正常

B:关闭所有浏览器,并重新打开一个窗口,测试访问NGINX服务器http://192.168../session.jsp.jsp 显示出一个SESSION ID值。

C:按F5多刷新几次,看看SESSION ID是否会变化,若不变化,从某种程度认为SESSSION共享是成功 的(留意各节点的TOMCAT日志,每刷新一次,会在被调度到的节点打出日志)。若SESSION ID变化,表示SESSION 共享失败。

D:关闭 被调度到的节点的TOMCAT,再刷新测试页,若发现页面显示正常,且SESSION ID值不变化,说明SESSION也被调度到另一个节点,查看节点TOMCAT日志,也会打出与看到的SESSION ID一样的记录。此时,基本可以认为SESSION共享是成功的。

http://www.pengzihe.com/?p=309

http://taokey.blog.51cto.com/4633273/1615551

http://blog.csdn.net/nerissa/article/details/18961361

感谢这三位大神的博客,小弟借鉴于他们才得以成功

最后附上jar包下载地址:

 javolution-5.4.3.1.jar 

http://memcached-session-manager.googlecode.com/svn/maven/javolution/javolution/

 memcached-session-manager-1.8.1.jar

http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/

 memcached-session-manager-tc7-1.8.1.jar  

http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/

 msm-javolution-serializer-1.8.1.jar

http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/

 spymemcached-2.10.2.jar

http://repo1.maven.org/maven2/net/spy/spymemcached/

注意:如果你是tomcat7就选择 memcached-session-manager-tc7,如果是Tomcat6,就得换成 memcached-session-manager-tc6

 http://pan.baidu.com/s/1mir4l3E

发表评论