`
dqm926
  • 浏览: 28124 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

memcached实现多个tomcat 共享一个session

 
阅读更多

       之前公司有个项目要做成前后端分离,即:后端、前端各为一个独立的项目,分别部署在不同的服务器上(由于项目比较小,我们就用了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,发现是一样的,说明成功了:

 

 

 

 

  • 大小: 30.1 KB
  • 大小: 33.8 KB
2
0
分享到:
评论
7 楼 Technoboy 2013-04-24  
freezingsky 写道
chenzhou123520 写道
freezingsky 写道
memcached这一块的使用,能否写得再详细些。

这就是通常所说的Memcached-session-manager,可以参见这篇文章:http://chenzhou123520.iteye.com/blog/1650212

我有一个疑问,由于你把session交到外部缓存来管理,那么会话的超时及相关控制,是否会有所不同?差异在哪里呢?

以tomcat为例,默认,由tomcat管理session(org.apache.catalina.session.StandardManager类)。tomcat支持可插入式session管理,当使用第三方缓存进行session管理时,session的设置完全取决于第三方缓存。会话的超时及其他操作,也都有第三方缓存控制。这主要应用要分布式session集群。
6 楼 freezingsky 2013-04-24  
chenzhou123520 写道
freezingsky 写道
memcached这一块的使用,能否写得再详细些。

这就是通常所说的Memcached-session-manager,可以参见这篇文章:http://chenzhou123520.iteye.com/blog/1650212

我有一个疑问,由于你把session交到外部缓存来管理,那么会话的超时及相关控制,是否会有所不同?差异在哪里呢?
5 楼 dqm926 2013-04-24  
hiskyrisa 写道
楼主,用你的例子调通了,赞一个。
我再多请教一个问题啊,不知道楼主是否了解这种方式的缺点。

memcached其实我也不是很了解,其实它很强大,一般的都是用来做数据缓存的。我推荐你看篇文档(http://www.open-open.com/lib/view/open1328604498889.html),上面讲得很详细。
4 楼 hiskyrisa 2013-04-23  
楼主,用你的例子调通了,赞一个。
我再多请教一个问题啊,不知道楼主是否了解这种方式的缺点。
3 楼 gnomewarlock 2013-04-23  
自己种Cookie,用CookieID去在MC里找对应的SessionObject。
2 楼 chenzhou123520 2013-04-23  
freezingsky 写道
memcached这一块的使用,能否写得再详细些。

这就是通常所说的Memcached-session-manager,可以参见这篇文章:http://chenzhou123520.iteye.com/blog/1650212
1 楼 freezingsky 2013-04-23  
memcached这一块的使用,能否写得再详细些。

相关推荐

    memcached+tomcat7共享session所需要的jar包

    标题中的“memcached+tomcat7共享session所需要的jar包”是指使用Memcached作为分布式缓存系统,实现Tomcat7服务器间的Session共享。这通常是为了在集群环境中解决Session复制或粘滞会话的问题,提高Web应用的可扩展...

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...

    tomcat中Nginx+memcached实现session共享

    但这仅限于服务器故障恢复或负载均衡,如果需要在不同服务器间主动共享Session,就需要引入额外的Session存储解决方案,这就是memcached的作用。 Memcached是一个高性能、分布式的内存对象缓存系统,用于存储临时...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享

    在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为应用服务器处理Java Servlet和JSP,而Memcached用于存储和共享Session数据。这个配置可以有效地分发用户请求,提高...

    Memcached-Session-Manager多tomcat实现session共享配置

    在分布式系统中,尤其是在使用了多个Tomcat实例作为Web服务器的集群环境中,确保用户会话(Session)在各个节点之间共享是至关重要的。Memcached-Session-Manager是解决这个问题的一个优秀解决方案,它允许我们将...

    多台tomcat服务的session共享 memcached

    每个Tomcat服务器都可以访问Memcached,从而实现Session共享。这样,用户在不同的服务器之间切换时,Session数据仍然可以保持一致。 使用Memcached实现Session共享的优点是: 1. 提高性能:Memcached可以提高...

    nginx tomcat memcached 集群 session共享

    在我们的场景中,它负责存储来自多个Tomcat实例的session数据。首先,需要在所有服务器上安装并启动Memcached服务,然后在每个Tomcat的`context.xml`配置文件中,添加一个`MemcachedSessionManager`的`Manager`标签...

    memcached+tomcat的session共享

    在Tomcat集群中,如果不同实例间不能共享session,用户在一台服务器上登录后可能在另一台服务器上失去登录状态,这显然不是我们希望看到的。 实现"memcached+tomcat的session共享"的基本思路是:将Tomcat的session...

    Memcached+tomcat session共享jar 和tomcat xml配置

    标题中提到的"Memcached+tomcat session共享jar",通常是指`memcached-session-manager`这个第三方库,它提供了一个Tomcat的Manager和Store实现,使得Tomcat能够与Memcached进行交互。例如,`mchange-commons-java`...

    memcached tomcat 共享session

    总的来说,通过memcached与Tomcat共享session,可以有效地在分布式环境中解决Session管理的问题,提高系统的可扩展性和可用性。实现这一功能需要对memcached、Tomcat配置、Java客户端库以及分布式系统原理有一定的...

    memcached tomcat session 共享所需jar

    总的来说,这些jar文件构建了一套完整的解决方案,使得开发者能够在Tomcat服务器上配置和使用Memcached来共享session,从而在多台服务器之间保持用户状态的一致性。通过选择不同的序列化策略(如javolution、kryo或...

    Windows + Nginx + Memcached + Tomcat 集群 session共享

    本知识点聚焦于如何在Windows环境下,利用Nginx作为反向代理,Memcached进行session共享,以及Tomcat作为Java应用服务器来搭建这样一个集群。这个配置确保了用户在集群中的任何一台服务器上的操作都能被其他服务器...

    tomcat8 memcached session共享jar包

    描述提到“Tomcat7 使用 memcached-session-manager-tc7-1.9.5.jar”,这表明存在一个专门为Tomcat 7设计的Memcached session管理器版本。这个jar包允许Tomcat与Memcached通信,将session数据存储在Memcached中。...

    nginx+tomcat+memcached服务架构实现session共享所需jar包

    这些jar包包含在"tomcat共享session所需lib"压缩包中,它们包含了如`tc-native`(用于Nginx与Tomcat之间的通信)、`spymemcached`(一个Java Memcached客户端库)等组件。 5. **配置步骤**: - 首先,将压缩包中的...

    lvs+keepalived+nginx+tomcat+memcached实现服务负载均衡及session共享

    首先,lvs是Linux内核中的一个模块,它提供了四层负载均衡功能,能够将进来的网络请求分发到后端多个服务器上,以实现服务的扩展和故障隔离。lvs的工作模式主要有三种:Direct Routing(DR)、Network Address ...

    Tomcat+memcached+Nginx实现session共享

    MSM是一个Java Servlet Filter,它允许Tomcat将用户的session数据存储在memcached分布式缓存中,从而实现跨多个Tomcat实例的session共享。MSM支持两种模式:Sticky和Non-Sticky。 - **Sticky模式**:在这个模式下...

    tomcat8memcachedsession共享jar

    标题中的“tomcat8memcachedsession共享jar”指的是在Tomcat 8中使用Memcached作为会话管理器的实现,以便在多台服务器之间共享会话数据。这通常是为了提高Web应用的可扩展性和性能,因为Memcached是一个分布式内存...

    tomcat8+memcached共享session(套装)

    【标题】"tomcat8+memcached共享session(套装)"所涉及的知识点主要集中在分布式环境中如何通过Memcached实现Tomcat服务器之间的Session共享,以提高Web应用的可扩展性和性能。 【描述】中的内容暗示了这是一个...

Global site tag (gtag.js) - Google Analytics