目标: 利用nginx + memercached + tomcat 实现服务集群session共享
环境配置:
jdk8 tomcat8 memcached-win64-1.4.4-14.zip
预备知识:
官网参考[必读可获取jar包]:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration#configure-memcached-session-manager-as--context-manager
jar包获取捷径:https://download.csdn.net/download/jianeng_love_it/11079167
涉及jar包:
来源自下图:
tomcat context.xml配置(多台tomcat相同的配置):
<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><!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
<!-- ip需要改成自己tomcat服务器的ip -->
</Context>
tomcat webapps/ROOT 下加一个测试页面 session.jsp 内容如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<BR>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
首先启动
memercached
然后启动
2个tomcat
访问测试:使用同一个浏览器访问session.jsp
第一台:http://localhost:8081/session.jsp
第二台:http://localhost:8080/session.jsp
结果:
sessionID 是相同的,端口不一样说明访问的是不同的tomcat。
延伸:
在使用nginx做负载均衡时,同一次会话,轮询访问到多个个tomcat返回的sessionID是一致的。