由于项目服务器用的阿里云的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..jar
memcached-session-manager-tc7-1.9..jar
minlog-1.2.jar
msm-kryo-serializer-1.8..jar
reflectasm-1.01.jar
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>中增加如下内容:

<Manager
className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:xxxxxx:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
sessionBackupAsync="false"
sessionBackupTimeout=""
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="">
<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="">
<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。

最新文章

  1. CyclicBarrier ------仿真赛马游戏
  2. css之图片路径
  3. c++异常捕获
  4. PyCharm4注册码--软件安装
  5. ORM(三)QuerySet查询字段操作
  6. 解决object at 0x01DB75F0
  7. 删除 github 相应仓库下的文件(不删除仓库)
  8. react router @4 和 vue路由 详解(一)vue路由基础和使用
  9. cocos设置 相机矩阵和投影矩阵 源码浅析
  10. svn的上传冲突问题
  11. 【开源.NET】 轻量级内容管理框架Grissom.CMS(第二篇前后端交互数据结构分析)
  12. 《Python》 面向对象三大特性之多态、封装
  13. SendTo MD5 - imsoft.cnblogs
  14. 去除adb传输中的^M
  15. 2018.07.22 洛谷P1967 货车运输(kruskal重构树)
  16. ubuntu移植jsoncpp到Android平台(转)
  17. 使用c++实现一个FTP客户端(三)
  18. 【CF962E】Byteland, Berland and Disputed Cities
  19. centos 7 删除 virbr0 虚拟网卡virsh net-list
  20. .NET程序下载获得的ContentLength=-1

热门文章

  1. python基础知识你学会了多少
  2. 生产环境rails console spring自动启动的问题
  3. Ubuntu16.04安装TFTP服务,完成开发板下载文件
  4. C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别
  5. leetcode-744-Find Smallest Letter Greater Than Target(改进的二分查找)
  6. Could not connect to &#39;192.168.80.145&#39; (port 22): Connection failed的解决办法(远程连不上xshell)
  7. flex datagrid checkbox选中项目
  8. 20155211 《Java程序设计》实验四 Android程序设计
  9. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
  10. Wiki版产品需求---产品需求文档到底是谁的?产品到底是谁的?