• memached实现tomcat的session共享


    由于项目服务器用的阿里云的ECS,Memcached也采用的阿里云。多个tomcat集群的session都存储在一个云memcached中。

    配置步骤如下:

    一、tomcat增加memcached支持的lib包

    主要用到以下9个jar包,去http://code.google.com/p/memcached-session-manager可以下载(当然需要fanqiang)。

    asm-3.2.jar
    kryo-1.04.jar
    kryo-serializers-0.11.jar
    memcached-session-manager-1.9.2.jar
    memcached-session-manager-tc7-1.9.2.jar
    minlog-1.2.jar
    msm-kryo-serializer-1.8.2.jar
    reflectasm-1.01.jar
    spymemcached-2.10.3.jar

    把以上9个jar包放到tomcat/lib目录下。

    二、配置tomcat同步session到memcached中

    有两种模式:sticky和no-sticky
    sticky:负载均衡会根据用户会话,每次都分配到同一个集群节点上。用户每次获取会话数据都是从tomcat里面取得,tomcat会备份一个session到memcached。 这样可以保持获取session的最高效。
    no-sticky:负载均衡不会管用户会话,而是按每次连接分别分发的方式,会话都保持在memcached上,每次读写都在memcached上。由于会远程访问数据,所以效率会低一些,但是这种却是最符合集群或集中缓存预期效果的。

    我采用的是no-sticky模式,编辑tomcat下的conf目录下的context.xml文件,在<Context>与</Context>中增加如下内容:

    <Manager
            className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
            memcachedNodes="n1:xxxxxx:11211"
            requestUriIgnorePattern=".*.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
            sessionBackupAsync="false"
            sessionBackupTimeout="1800000"
            copyCollectionsForSerialization="false"
            sticky="false"
            username="xxxx"
            password="xxxxxx"
            memcachedProtocol="binary"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

    配置完成以后重启tomcat,使配置生效。

    三、测试session共享是否生效

    在第一个tomcat实例中的webapps/ROOT目录下新建test.jsp页面,内容如下

    <%@ page language="java" %>
    <html>
      <head><title>TomcatA</title></head>
      <body>
        <h1><font color="red">TomcatA </font></h1>
        <table align="centre" border="1">
          <tr>
            <td>Session ID</td>
        <% session.setAttribute("abc","abc"); %>
            <td><%= session.getId() %></td>
          </tr>
          <tr>
            <td>Created on</td>
            <td><%= session.getCreationTime() %></td>
         </tr>
        </table>
      </body>
    </html>

    同样在第二个tomcat实例中的webapps/ROOT目录下新建test.jsp页面,内容如下:

    <%@ page language="java" %>
    <html>
      <head><title>TomcatB</title></head>
      <body>
        <h1><font color="blue">TomcatB </font></h1>
        <table align="centre" border="1">
          <tr>
            <td>Session ID</td>
        <% session.setAttribute("abc","abc"); %>
            <td><%= session.getId() %></td>
          </tr>
          <tr>
            <td>Created on</td>
            <td><%= session.getCreationTime() %></td>
         </tr>
        </table>
      </body>
    </html>

    在上层的nginx中配置负载均衡及反向代理如上两个tomcat(过程略)

    最终测试效果如下,可以看到,session共享成功,另外也可以去memcached中看到存储的session。

  • 相关阅读:
    刷新
    自定义背景色
    会议通js
    Flex Layout Attribute
    spin.js
    jq size()与length的区别
    初识node.js
    [Swift]归并排序 | Merge sort
    [Swift]桶排序 | Bucket sort
    [Swift]计数排序 | Counting sort
  • 原文地址:https://www.cnblogs.com/Eivll0m/p/6525741.html
Copyright © 2020-2023  润新知