在前两博文的基础上,实现基于memcached的session共享。采用Windows10操作系统。
1. 搭建Tocat集群(参考第一篇博文)。
2. 搭建nginx反向代理服务器(参考第二篇博文)。
3. 搭建memcached缓存系统。memcached 官网没有给出基于windows系统的安装包,这个大家可以再网上搜索。有很多人自己buiild的基于windows系统的memchaed.
安装很简单,直接解压到安装路径下,然后用管理员身份到安装路径下在CMD中执行“memcached.exe -d install”,并执行“memcached.exe -d start”启动memcached.
本文不在描述具体安装过程。接下来讨论利用MSM来实现Tomcat集群的session共享。
1. 下载具体的依赖包,并导入到tomcat的lib下面(本人放在D:\D\apache-tomcat-8.5.30-tomcat1\lib和D:\D\apache-tomcat-8.5.30-tomcat2\lib)。因为序列化方式不一样,导入的依赖包也不一样。
我采用的是javolution方式(kyro序列化方式一直没有测试成功,可能是导入的依赖包版本不match,后续会继续研究),采用javolution方式所需要的依赖包如下:
javolution-5.4.3.jar
memcached-session-manager-2.1.0.jar
memcached-session-manager-tc8-2.1.0.jar
msm-javolution-serializer-2.1.0.jar
spymemcached-2.11.1.jar
把这些依赖包放到tomcat的lib目录下。
2. 修改tomcat的context.xml文件
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
failoveNodes="n1"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout="100"
lockingMode="auto"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>
3. 准备测试脚本
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<body>
<% out.println("hello, This is Tomcat1");
out.println("<br>SESSION ID:" + session.getId()+"<br>"); %>
</body>
</html>
以上1,2,3步在两台tomcat上面都需要做。
4. 启动memched,tomcat1,tomcat2,和nginx.
5. 测试结果如下


由结果可以看出,两次请求被转发到了两台tomcat,但是他们的sesssion ID是没有变化的,也就是实现了session共享。
最后,欢迎大家指正,讨论。
来源:oschina
链接:https://my.oschina.net/u/4270238/blog/4074459