1. 前言
Memcache除了可以做Hibernate的二级缓存外,还可以做很多很多事情。在互联网应用中,往往通过它作为缓存解决方案来保存数据,进而减少数据库的负载,而在分布式系统中,Session在不同Node中的复制,是一个比较常见的问题啦。而且在分布式系统中还要实现Session的修复,就是其中一个Node宕机了,另一个Node立即可以接管宕机Node的所有Session信息,Memcache又可以当做分布式系统的Session解决方案。
2. 使用Memcache的原因
作为分布式Session复制解决方案有很多,可以借助Web容器自身进行互相发心跳,监听、复制,也可以借助第三方工具进行Session托管。前者在配置上比较麻烦,各位详细请看http://suhuanzheng7784877.iteye.com/blog/987062。
那个是使用Web容器自身的Session共享机制,这就有几个问题。第一,就是配置文件有点冗长,若Node较多的情况下,每个Server都得一坨一坨地摆在那里。第二,就是每个Node都得知道其他Node的存在,好进行心跳监听,以便进行Session的复制,消耗的性能相对来说比较大一些,因此还是采用一个集中式的中间件比较好,将Web的Session托管出去,想要的时候尽管去中间件取就行了。当然了,如果采用黏着性访问,比如使用mod_jk这种黏着性访问,就不会跨越Node,Session也不用随时进行复制。但是对于mod_jk进行Node宕机的Session恢复和proxy一样都是使用底层的Web容器进行的,所以依然有缺点。总的来说Memcached作为分布式的托管Session的方案还是比较得当的。
3. 配置环境
大体配置也还是Apache+mod_Proxy模块+Tomcat6的配置,各位请参考http://suhuanzheng7784877.iteye.com/blog/987062即可。咱们这里只说不同的地方。
Apache的配置完全相同,在此不再赘述。
之后下载Memcache的tomcat插件,请查看附件~
之后修改Tomcat Node1的配置文件{Tomcat_Home}\conf\context.xml的内容,在<Context>节点下面添加内容如下
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
copyCollectionsForSerialization="false"
/>
英文都比较简单就不解释了,唯一注意的一点就是那个工厂类是de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory。对于Tomcat6,使用这个类,对于其他版本的Tomcat实现类有细微差异。之后另一个配置文件{Tomcat_Home}\conf\server.xml的内容和原始Tomcat的差不多,仅仅在<Engine>节点上做个小小的变化,标示集群的Node名称
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
|
另一个Tomcat Node配置和这个配置差不多,不再赘述。
4. 测试
下面我们依然在2个Node上部署好原先那个helloWeb的工程,工程简单,就一个首页。
先开启memcache服务,之后在开启2个Tomcat服务。
效果如下
关闭node1,输入框中输入5,5,效果如下
证明Session继续生效。关闭浏览器后,再重新打开,因为SessionID变了,所以从Session中取不到任何数据了。还要声明一点就是放入Session要想存储对象必须实现序列化接口。
iteye新版本用起来好像怪怪的~~~~
分享到:
相关推荐
在分布式系统中,Session管理是一个重要的挑战,尤其是在高并发、多服务器环境下的Web应用。Memcached,作为一个高性能、分布式的内存对象缓存系统,被广泛用于解决这个问题。本篇文章将详细探讨如何使用Memcached...
- **tomcat7-session-manager-memcached**:这是Tomcat7的一个Session管理器实现,它将默认的Session存储机制替换为使用Memcached。 3. **配置Tomcat**:在Tomcat的`conf/catalina.properties`文件中,添加以下...
分布式 Session 方案是指在分布式系统中,为了解决 Session 问题而采用的方法。 Session 是 Web 应用程序中保存用户信息的机制,当用户请求时,服务器需要记录用户的信息,以便在后续请求中使用。然而,在分布式系统...
在分布式系统中,session共享是一个重要的问题,因为用户在访问不同的服务器节点时,需要保持登录状态和其他会话信息的一致性。Memcached作为一个高性能的分布式内存对象缓存系统,常被用来解决这个问题。 描述中...
- **Redis Session存储实现:** Redis作为常用的集中式存储解决方案之一,其Session存储实现是分布式系统中不可或缺的一部分。通过阅读Redis相关源码,理解如何高效地存储和检索Session数据。 - **Nginx负载均衡...
在IT行业中,尤其是在分布式系统和Web应用开发领域,session共享是一个关键问题,特别是在集群环境中。当使用多个服务器来处理用户请求时,确保用户的session数据在所有服务器之间保持一致至关重要。"memcached+...
`memcached-session-manager`通过将用户的session数据存储在Memcached服务器上,而不是每个单独的Tomcat实例的内存中,实现了跨服务器的session共享。这意味着无论用户请求哪个服务器,他们的session数据都能被正确...
在分布式系统中,Session共享是一个非常重要的问题。多台Tomcat服务的Session共享是指在多台Tomcat服务器之间共享用户会话信息,以便在用户在不同的服务器之间切换时,能够保持会话的一致性。Memcached是一种高性能...
在J2EE session管理中,Memcached可以作为集中式的session存储,替代默认的基于cookie或本地服务器内存的session存储方式。 实现步骤如下: 1. **配置Memcached服务器**:首先,你需要安装并运行一个Memcached服务...
在构建分布式系统时,有效地管理用户会话(session)是至关重要的。本教程将深入探讨如何在Windows 7环境下,利用Nginx作为反向代理,Tomcat作为应用服务器,以及Memcached作为分布式缓存来实现session共享。下面将...
标题中的“memcached tomcat 共享session”指的是在分布式环境中,使用memcached作为缓存系统来实现Tomcat服务器间的...实现这一功能需要对memcached、Tomcat配置、Java客户端库以及分布式系统原理有一定的理解。
6. **容错与故障转移**:由于 Memcached 是分布式系统,如果一个节点失效,memcached-session-manager 可以自动切换到其他可用节点,提供了一定程度的容错能力。 7. **扩展性**:随着Web应用规模的扩大,只需添加更...
Memcached管理Session资源是一种高效的Web应用session持久化策略,主要利用分布式缓存系统Memcached来存储和管理HTTP会话数据。这种方式可以解决单个服务器或集群中session共享的问题,提高系统的可扩展性和可用性。...
**标题解析:** "memcached(十一)memcached-session-manager" 这个标题指的是一个关于memcached缓存系统与...通过这个教程,读者将能够掌握如何利用memcached作为session存储机制,提升Web应用的效率和可靠性。
在构建分布式系统时,有效地管理用户会话(session)是至关重要的一步。"nginx+tomcat+memcached"服务架构是一种常见的解决方案,它利用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为...
3. **Memcached**:是一个开源的、高性能、分布式内存对象缓存系统,用于存储session数据,使得所有Tomcat实例可以访问同一份session信息。 4. **Tomcat**:Apache Tomcat是Java Servlet和JavaServer Pages(JSP)的...
分布式会话是指在分布式系统中,用户的会话状态能够在集群中的所有节点间共享和同步。这样,无论用户请求发送到哪台服务器,都能获取到正确的会话信息,确保用户体验的一致性。 在Java开发中,常见的分布式Session...
传统的Tomcat会话管理机制可能会导致性能瓶颈,特别是在大型分布式系统中。为了解决这个问题,开发人员常常采用第三方解决方案,如将Session数据存储到内存缓存系统,如memcached。这就是"Tomcat memcached Session...
为了优化这个问题,我们可以使用`memcached-session-manager`,它是一个专门为Tomcat设计的插件,使得Tomcat能够将用户的session数据存储在Memcached服务器上,实现session的分布式管理。 本文将详细介绍如何在...
为了解决这个问题,我们可以使用分布式缓存系统,如memcached,来实现session的共享和同步。在本场景中,我们将探讨如何在Tomcat 7.52版本中集成memcached,以实现在多个Tomcat实例之间的session共享。 首先,我们...