在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有:
(1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息
(2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB。tomcat本身的内存中并不存储session
(3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配合nginx/apache实现,将同一用户请求转向到相同的tomcat结点,多结点之间并不共享sesison。优点是实现简单,缺点就是结点故障时,会丢失部分session。一般会配合前两种方式使用。
本文记录使用memcached-session-manager组件搭建nginx+tomcat+memcached实现集群和session共享存储环境的全部过程。
nginx:1.8.0
tomcat两个:6.0.44
memcached集群:1.4.4
memcached-session-manager提供了多种session数据序列化策略:
(1) java序列化:要求待存储的信息实现java.io.Serializable接口;
(2) kryo序列化
(3) javolution
(4) xstream
(5) flexjson
参见:http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies
这里的使用的序列化策略为kryo
(1) 将下面所有依赖的这些jar包放在$TOMCAT_HOME/lib中:
asm-3.2.jar kryo-1.04.jar kryo-serializers-0.11.jar memcached-session-manager-1.8.3.jar memcached-session-manager-tc6-1.8.3.jar minlog-1.2.jar msm-kryo-serializer-1.8.3.jar reflectasm-1.01.jar spymemcached-2.11.1.jar
(2) 两个tomcat分别配置conf/context.xml,增加:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211,n2:localhost:11212" sticky="false" sessionBackupAsync="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
这里使用的策略是session非粘性,memcached使用两个结点的集群
另外,分别配置两个tomcat的HTTP监听端口为7181和7182
(3) nginx配置:
upstream cluster_memcached { server localhost:7181; server localhost:7182; } server { listen 7180; server_name localhost; location / { proxy_pass http://cluster_memcached; } }
这里配置nginx监听端口为7190,并请所有的请求反向代理到7181和7182的tomcat集群.
(4) 测试代码session.jsp:
<%@ page import="java.util.Enumeration" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>session test</title> <% String key = request.getParameter("sessionKey"); String value = request.getParameter("sessionValue"); if(key != null && !"".equalsIgnoreCase(key.trim())) { session.setAttribute(key, value); } %> </head> <body> <form action="session.jsp" method="post"> <input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1"> <input type="submit" value="提交"> </form> <h4>已经存储的session--<%=session.getServletContext().getRealPath("/")%></h4> <table> <tr> <th>key</th> <th>value</th> </tr> <% Enumeration<String> keys = session.getAttributeNames(); while(keys.hasMoreElements()){ String k = keys.nextElement(); String v = (String)session.getAttribute(k); %> <tr> <td><%=k%></td> <td><%=v%></td> </tr> <% } %> </table> </body> </html>
分布式集群高可用session理论性文章:http://tendyming.iteye.com/blog/1815136
相关推荐
Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台服务器之间切换时仍能保持其会话状态。 首先,我们要理解会话保持的重要性。在分布式系统中,用户可能与集群中的任何一台...
Nginx+Tomcat+Memcached集群Session共享实例,Nginx 1.81 + tomcat1 + tomcat2 + Memcached 完整可运行 访问根目录下 test.jsp 可看效果
Nginx+Tomcat+Memcached实现tomcat集群和session共享 tomcat部分
下面我们将详细探讨如何实现Nginx+Tomcat+Memcached的集群和Session共享。 **Nginx** Nginx是一款轻量级的Web服务器/反向代理服务器,以其高效的性能和低内存占用著称。在本场景中,Nginx主要负责以下任务: 1. **...
通过以上配置,我们可以实现一个基于 Nginx、Tomcat 和 Memcached 的高效且可扩展的集群架构,该架构不仅解决了 Session 共享的问题,还大大提高了系统的并发处理能力和稳定性。在实际应用中,还需要结合具体的业务...
兼容Tomcat7 与tomcat8 +memcached做session共享 , 解决了tomcat7与Tomcat8的 java.lang.NoSuchFieldError: attributes 错误。
标题 "Nginx+Tomcat+Memcached集群Session共享" 描述了在分布式环境中如何通过Nginx反向代理服务器、Tomcat应用服务器集群以及Memcached缓存系统来实现Session的共享。这是一个常见的高可用性和负载均衡解决方案。...
【Nginx+Tomcat+Memcached实现Tomcat集群和session共享】 在现代Web应用程序的部署中,为了提高系统的可用性和可扩展性,通常会采用集群技术。将多个Tomcat服务器组成一个集群,通过负载均衡策略分发用户请求,以...
在本篇文章中,我们将深入探讨如何使用Nginx、Tomcat和Memcached-Session-Manager(MSM)来构建一个集群环境,并实现Session共享。这涉及到集群搭建、分布式应用以及缓存管理等多个方面的IT知识。下面将详细展开这些...
标题 "nginx+tomcat+memcached实现session共享" 涉及的是在分布式环境中如何通过组合使用这三种技术来管理用户的会话数据。这个话题对于构建高可用、高性能的Web应用系统至关重要,尤其是在大型网站和企业级应用中。...
本知识点聚焦于如何在Windows环境下,利用Nginx作为反向代理,Memcached进行session共享,以及Tomcat作为Java应用服务器来搭建这样一个集群。这个配置确保了用户在集群中的任何一台服务器上的操作都能被其他服务器...
本教程将深入探讨如何在Windows 7环境下,利用Nginx作为反向代理,Tomcat作为应用服务器,以及Memcached作为分布式缓存来实现session共享。下面将详细阐述每个组件的作用以及配置过程。 1. **Nginx**: Nginx是一...
本文将详细探讨如何使用lvs(Linux Virtual Server)、keepalived、nginx、tomcat以及memcached来实现这一目标。 首先,lvs是Linux内核中的一个模块,它提供了四层负载均衡功能,能够将进来的网络请求分发到后端多...
在Nginx+Tomcat集群中,Memcached用于实现Session共享,避免用户在集群中的不同Tomcat实例间切换时丢失Session数据。当用户登录后,其Session信息会被存储在Memcached中,然后由Nginx确保请求被转发到具有该Session...
在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"Nginx+Tomcat+memcached实现集群部署、负载均衡session共享"是一种常见的解决方案。这个方案结合了Nginx作为反向代理和负载均衡器,Tomcat作为Java应用...
"nginx+tomcat7+memcached所需jar"的组合提供了一种解决方案,利用Memcached作为分布式缓存来实现跨服务器的session共享,提高系统的可扩展性和可用性。这个组合的关键在于`memcached session manager`,它使得...
本主题将详细探讨如何在Windows7环境下,利用Nginx作为负载均衡器,Memcached作为session存储,以及Tomcat作为应用服务器,实现session共享。 **1. Nginx介绍与配置** Nginx是一款高性能的HTTP和反向代理服务器,它...
在Nginx+Tomcat集群中,Memcache负责存储用户session,确保用户在集群中的任何一台Tomcat服务器上都能获取到相同的session信息,实现session共享。 **Tomcat**: Tomcat是Apache软件基金会的Java Servlet和Java...