之前公司有个项目要做成前后端分离,即:后端、前端各为一个独立的项目,分别部署在不同的服务器上(由于项目比较小,我们就用了tomcat)。前后端通过jsonp的方式进行数据的交互。后端只做业务,前端只做展示。这样的话遇到了一个问题,就是两个系统所部属的服务器不同,那么就会产生两个不同的session,当然这不是我们需要的结果!
这样就要求两个tomcat·共用一个session,网上研究了下,发现可以引用外部缓存(memcached),将session统一放在memcached里面,这样的话,两个tomcat就共用一个session,问题解决了。
下面是我做的一些实验:
1、先做好准备工作:
将要用的的工具找到:memcached.exe、tomcat6
用到的包:memcached-session-manager-1.5.1.jar、memcached-session-manager-tc6-1.5.1.jar、msm-javolution-serializer-1.5.1.jar、javolution-5.5.1.jar、memcached-2.5.jar(全部在附件中,tomcat6网上应该很好找,自己下)
2、安装memcached:
(1)、memcached.exe放在一个路径下(例如:D:\memcached)
(2)、cmd进入到此路径下,执行memcached.exe -d install,即安装memcached服务,完成后再执行memcached.exe -d start,即启动服务,以后memcached将会作为系统的一个服务自动启动。现在去系统服务下看,如果有memcached且已启动,说明安装成功。
3、部署tomcat
这个部署就不用我说了吧,只需解压缩即可。
复制一份,就有了两个服务器。
我这边实验是在一个机器上做的(本来想装个虚拟机的,但是本子太差了,卡死了),所以为了连个tomcat都能跑起来,只能该配置了,把一个tomcat的端口改了:
<Server port="9005" shutdown="SHUTDOWN">:原来是8005
<Connector executor="tomcatThreadPool"
port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> :原来是8080
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />:原来是8009
启动下两个服务器,能一起跑起来,进行下一步。
将上面准备的包全部放在两个tomcat的lib下。
再在context.xml中加上配置:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot;"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"/>
红字即:memcached服务的接口,11211为memcached的默认端口,现在装在本地的所以为localhost:11211。
在同时运行下tomcat,成功启动,说明配置没错,现在就进行测试了:
4、测试:
附件中的test即为测试项目。分别部署在两个tomcat下,启动,在同一个浏览器访问两个不同的项目,根据页面显示的sessionID,发现是一样的,说明成功了:
相关推荐
标题中的“memcached+tomcat7共享session所需要的jar包”是指使用Memcached作为分布式缓存系统,实现Tomcat7服务器间的Session共享。这通常是为了在集群环境中解决Session复制或粘滞会话的问题,提高Web应用的可扩展...
标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...
但这仅限于服务器故障恢复或负载均衡,如果需要在不同服务器间主动共享Session,就需要引入额外的Session存储解决方案,这就是memcached的作用。 Memcached是一个高性能、分布式的内存对象缓存系统,用于存储临时...
在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为应用服务器处理Java Servlet和JSP,而Memcached用于存储和共享Session数据。这个配置可以有效地分发用户请求,提高...
在分布式系统中,尤其是在使用了多个Tomcat实例作为Web服务器的集群环境中,确保用户会话(Session)在各个节点之间共享是至关重要的。Memcached-Session-Manager是解决这个问题的一个优秀解决方案,它允许我们将...
每个Tomcat服务器都可以访问Memcached,从而实现Session共享。这样,用户在不同的服务器之间切换时,Session数据仍然可以保持一致。 使用Memcached实现Session共享的优点是: 1. 提高性能:Memcached可以提高...
在我们的场景中,它负责存储来自多个Tomcat实例的session数据。首先,需要在所有服务器上安装并启动Memcached服务,然后在每个Tomcat的`context.xml`配置文件中,添加一个`MemcachedSessionManager`的`Manager`标签...
在Tomcat集群中,如果不同实例间不能共享session,用户在一台服务器上登录后可能在另一台服务器上失去登录状态,这显然不是我们希望看到的。 实现"memcached+tomcat的session共享"的基本思路是:将Tomcat的session...
标题中提到的"Memcached+tomcat session共享jar",通常是指`memcached-session-manager`这个第三方库,它提供了一个Tomcat的Manager和Store实现,使得Tomcat能够与Memcached进行交互。例如,`mchange-commons-java`...
总的来说,通过memcached与Tomcat共享session,可以有效地在分布式环境中解决Session管理的问题,提高系统的可扩展性和可用性。实现这一功能需要对memcached、Tomcat配置、Java客户端库以及分布式系统原理有一定的...
总的来说,这些jar文件构建了一套完整的解决方案,使得开发者能够在Tomcat服务器上配置和使用Memcached来共享session,从而在多台服务器之间保持用户状态的一致性。通过选择不同的序列化策略(如javolution、kryo或...
本知识点聚焦于如何在Windows环境下,利用Nginx作为反向代理,Memcached进行session共享,以及Tomcat作为Java应用服务器来搭建这样一个集群。这个配置确保了用户在集群中的任何一台服务器上的操作都能被其他服务器...
描述提到“Tomcat7 使用 memcached-session-manager-tc7-1.9.5.jar”,这表明存在一个专门为Tomcat 7设计的Memcached session管理器版本。这个jar包允许Tomcat与Memcached通信,将session数据存储在Memcached中。...
这些jar包包含在"tomcat共享session所需lib"压缩包中,它们包含了如`tc-native`(用于Nginx与Tomcat之间的通信)、`spymemcached`(一个Java Memcached客户端库)等组件。 5. **配置步骤**: - 首先,将压缩包中的...
首先,lvs是Linux内核中的一个模块,它提供了四层负载均衡功能,能够将进来的网络请求分发到后端多个服务器上,以实现服务的扩展和故障隔离。lvs的工作模式主要有三种:Direct Routing(DR)、Network Address ...
MSM是一个Java Servlet Filter,它允许Tomcat将用户的session数据存储在memcached分布式缓存中,从而实现跨多个Tomcat实例的session共享。MSM支持两种模式:Sticky和Non-Sticky。 - **Sticky模式**:在这个模式下...
标题中的“tomcat8memcachedsession共享jar”指的是在Tomcat 8中使用Memcached作为会话管理器的实现,以便在多台服务器之间共享会话数据。这通常是为了提高Web应用的可扩展性和性能,因为Memcached是一个分布式内存...
【标题】"tomcat8+memcached共享session(套装)"所涉及的知识点主要集中在分布式环境中如何通过Memcached实现Tomcat服务器之间的Session共享,以提高Web应用的可扩展性和性能。 【描述】中的内容暗示了这是一个...