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

配置步骤如下:

一、tomcat增加memcached支持的lib包

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

  1. asm-3.2.jar
  2. kryo-1.04.jar
  3. kryo-serializers-0.11.jar
  4. memcached-session-manager-1.9..jar
  5. memcached-session-manager-tc7-1.9..jar
  6. minlog-1.2.jar
  7. msm-kryo-serializer-1.8..jar
  8. reflectasm-1.01.jar
  9. spymemcached-2.10..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>中增加如下内容:

  1. <Manager
  2. className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  3. memcachedNodes="n1:xxxxxx:11211"
  4. requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
  5. sessionBackupAsync="false"
  6. sessionBackupTimeout=""
  7. copyCollectionsForSerialization="false"
  8. sticky="false"
  9. username="xxxx"
  10. password="xxxxxx"
  11. memcachedProtocol="binary"
  12. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

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

三、测试session共享是否生效

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

  1. <%@ page language="java" %>
  2. <html>
  3. <head><title>TomcatA</title></head>
  4. <body>
  5. <h1><font color="red">TomcatA </font></h1>
  6. <table align="centre" border="">
  7. <tr>
  8. <td>Session ID</td>
  9. <% session.setAttribute("abc","abc"); %>
  10. <td><%= session.getId() %></td>
  11. </tr>
  12. <tr>
  13. <td>Created on</td>
  14. <td><%= session.getCreationTime() %></td>
  15. </tr>
  16. </table>
  17. </body>
  18. </html>

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

  1. <%@ page language="java" %>
  2. <html>
  3. <head><title>TomcatB</title></head>
  4. <body>
  5. <h1><font color="blue">TomcatB </font></h1>
  6. <table align="centre" border="">
  7. <tr>
  8. <td>Session ID</td>
  9. <% session.setAttribute("abc","abc"); %>
  10. <td><%= session.getId() %></td>
  11. </tr>
  12. <tr>
  13. <td>Created on</td>
  14. <td><%= session.getCreationTime() %></td>
  15. </tr>
  16. </table>
  17. </body>
  18. </html>

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

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

memached实现tomcat的session共享的更多相关文章

  1. 配置tomcat的session共享

    可通过下面方法限制一个用户访问一个服务器之后就只在该服务器上操作. 请求负载过程中会话信息不能丢失.那么在多个tomcat中session需要共享. 配置tomcat的session共享可以有三种解决 ...

  2. 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享

    一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...

  3. Apache代理Tomcat实现session共享构建网上商城系统

    一.环境介绍 二.安装配置后端服务器 三.安装配置前端服务器 四.配置Tomcat服务器实现session共享 五.构建网上商城系统 一.环境介绍 系统版本:CentOS 6.4_x86_64 Mys ...

  4. 浅谈负载均衡之【tomcat分布式session共享】

    1)整理集成所需jar kryo-1.0.3.jar kryo-serializers-0.8.jar memcached-2.4.2.jar memcached-session-manager-1. ...

  5. (转)tomcat架构&session共享

    (二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...

  6. apache+tomcat实现session共享

    apache+tomcat上篇文章,实现了负载均衡,现在我们实现session共享 一.tomcat集群配置,session 同步配置: tomcat1配置  A.修改Engine节点信息: < ...

  7. Tomcat中session共享问题的简单解决办法

    tomcat-redis-session-manager 使用redis配置tomcat共享session 结构图: 分析: 分布式web server集群部署后需要实现session共享,针对 to ...

  8. tomcat memecached session 共享同步问题的解决

    事件缘由:一个主项目“图说美物”,另外一个子功能是品牌商的入驻功能,是跟主项目分开的项目,为了共享登录的用户信息,而实现session共享,俩个tomcat,一个tomcat6,一个tomcat7 w ...

  9. Memcached做Tomcat的session共享

    基于cache DB缓存的session共享 基于memcache/redis缓存的session共享.即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cac ...

随机推荐

  1. XAMPP之Mysql启动失败

    启动XAMPP中的Mysql出现如下: 可能的原因是本地有多个MySQL,所以要在注册表编辑器中将imagePath改成XAMPP中的mysql的地址.(打开注册表编辑器:win+R,输入regedi ...

  2. (译)我为什么用Go语言来做区块链——Syed Jafar Naqvi——Co-Founder/CEO at Karachain

    原文地址:https://medium.com/karachain/why-i-am-building-a-blockchain-in-go-6395a60b24dd Go语言现在常常被用来做去中心化 ...

  3. #define定义数据溢出的问题

    使用合泰单片机做一个小东西,使用 #define TIMER_COUNT (30*60*1000) 时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样.看来是stm32用多了,总以为#d ...

  4. nodejs实现文件上传

    在使用ant-design的upload上传文件时,前端很好实现,那么我们如何实现node服务端呢? 服务端文件上传实现 var express = require('express'); var f ...

  5. 20155307《Java程序设计》实验二实验报告

    一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码(产品预期功能)→ 产品代码(实现预期功能),这种开发方法叫&qu ...

  6. c++ 结构指针和双向链表

    结构指针 为结构指针动态分配内存 结构中的结构 双向链表 结构指针 struct mytime { //char name[256]; int hour;//时 int min; //分 i ...

  7. JavaScript之数组的常用操作函数

    js对数组的操作非常频繁,但是每次用到的时候都会被搞混,都需要去查相关API,感觉这样很浪费时间.为了加深印象,所以整理一下对数组的相关操作. 常用的函数 concat() 连接两个或更多的数组,并返 ...

  8. 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社

    从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社 PPT链接: https://pan.baidu.com/s/1i5Jrr1N 视频链接: https: ...

  9. 【CF833D】Red-Black Cobweb

    [CF833D]Red-Black Cobweb 题面 洛谷 题解 看到这种统计路径的题目当然是淀粉质啦. 考虑转化一下信息设一条路径上有红点\(a\)个,黑点\(b\)个 则\(2min(a,b)\ ...

  10. equals和==方法比较(三)--Long中LongCache源码分析

    下面我们来分析,上篇博客中遗留的问题,为什么下方的两个一个是true,两一个是false那? //true Long l1=123l; Long l2=123l; System.out.println ...