0%

tomcat与memcached-session-manager共享session测试

简介

看书刚好看到集群session共享,总觉得只看不做,不能确定这到底是怎么运行的.所以就做了这个测试.有关Memcached-Session-Manager,Memcached,以及集群session共享等相关知识,请自行补充.本次就简单记录下测试过程.
有关其他的方式以及其他的情况,本文不做说明,有需要的话,会再写其他情况和方式下的文章.

环境说明

  • 本机OSX 10.11,tomca7.0.57,memcached-1.4.24
  • 虚拟机Ubuntu16.04,tomca7.0.57,memcached-1.4.24
  • 使用non-sticky sessions(非粘性session)
  • 序列化:使用默认,java进行序列化,由memcached-session-manager.jar这个jar包来提供方法.
  • 有关粘性和非粘性的区别以及序列化等不做解释.

具体步骤

安装jdk,memcached,tomcat

不做详细说明

放jar包

将如下相关jar包分别放置到两台机器的tomcat $CATALINA_HOME/lib/目录中.

修改tomcat配置文件

两台机器分别修改tomcat $CATALINA_HOME/conf/context.xml文件,添加如下代码到Context节点下:

1
2
3
4
5
6
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.110.197:11211,n2:192.168.110.198:11211"
sticky="false"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
/>

部署Web项目到tomcat

新建测试用的web项目,并部署到两台tomcat中.测试代码简单如下:

1
2
3
4
5
<body>
Session ID:<%=session.getId()%> <br>
IP:<%=request.getServerName()%> <br>
Port:<%=request.getServerPort()%>
</body>

启动两台机器的memcached

1
memcached -m 32 -p 11211 -d

启动两台机器的tomcat

查看tomcat信息tail -f catalina.out未报错,看到类似如下信息就启动成功

1
2
3
4
5
6
7
8
信息: --------
- finished initialization:
- sticky: false
- operation timeout: 1000
- node ids: [n1, n2]
- failover node ids: []
- storage key prefix: null
--------

访问测试页面

分别访问两台机器的测试页面:

  • 同一个浏览器
  • 两个浏览器
  • 结束掉一个机器的memcached进程在访问等等

同一个浏览器不同标签页访问192.168.110.197和192.168.110.198 得到的sessionid都是一样的:

1
2
3
4
5
6
7
Session ID:39D5E175513B4496C136F5E1554478CD-n1 
IP:192.168.110.197
Port:8080

Session ID:39D5E175513B4496C136F5E1554478CD-n1
IP:192.168.110.198
Port:8080

关闭ip为197的memcached进程之后,刷新页面:

1
2
3
4
5
6
7
Session ID:39D5E175513B4496C136F5E1554478CD-n2 
IP:192.168.110.197
Port:8080

Session ID:39D5E175513B4496C136F5E1554478CD-n2
IP:192.168.110.198
Port:8080

测试成功.

参考

https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration#introduction

http://laoxu.blog.51cto.com/4120547/1566477

坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub