Tomcat基于MSM+Memcached实现Session共享
简述
上一篇文章,分别演示了session sticky 和 session cluster来实现会话保持的问题,但是它们缺点都不少,实际中用的很少,所以这篇文章我们还是通过Tomcat来演示一下实际中用得比较多的session server。
实验拓扑如下,为了减少实验中机器数量,就把Memcached和Tomcat放在同一台机器上了,实际中应该是要分开的。
实验步骤
在node3,4上面安装配置Tomcat,提供测试的网页应用程序,node2上安装配置nginx。到这里的配置和上篇文章讲过,具体配置可以参考上篇文章。
在node3和node4上安装Memcached,yum install memcached libmemcached -y`
然后下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
memcached-session-manager-${version}.jar
memcached-session-manager-tc${6,7,8}-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar
分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
<Context path="/test" docBase="test" reloadable="true">
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" #使用的会话管理器
memcachedNodes="n3:172.16.47.103:11211,n4:172.16.47.104:11211" #成员
failoverNodes="n3"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #忽略的资源
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" #序列化工具
/>
</Context>
可以看到,Session ID一直没有变化,基于Session server的会话绑定实现了。
注:在配置好Tomcat,验证的时候遇到一个坑,其实是自己疏忽了:时间没有同步,结果验证的时候,session id一直在变,后来把时间同步后,结果正常。
我的个人站点iLurker.cn
个人站点:www.ilurker.cn