概述
本文是企业高可用架构之一:APACHE+TOMCAT实现高可用WEB集群。
Apache+tomcat是J2EE领域最常见和低成本的高可用集群实现方式,同时也是应用最广泛的WEB-HA实现方式之一。本文结合工作经验和学习所得,简单介绍APACHE+TOMCAT集群的各种使用方式,并进行简单对比。当然,干这行都知道,架构选择就像找老婆:没有最好的,只有最合适的。
目标:
支持故障转移(或主备,扩展性不佳),保证故障转移后,对前端用户透明,无感知(状态不变化),同时为提高性能支持复制均衡。
APACHE主要负责:负载均衡(LoadBalancer),故障转移(Failover),主备(指TOMCAT的主备,一般没有使用)
TOMCAT负责:SESSION复制和SESSION共享
散装介绍
以下散装介绍,是想到什么写什么,没有特别的梳理,主要介绍些关键的概念和逻辑。
APACHE最为最老牌的WEB服务器,提供了2种方式与TOMCAT实现集群。Mod_jk和proxy。Mod_jk配置较复杂,一般是老版本在使用,目前一般常用的是proxy方式,本文以proxy进行介绍。
Proxy是APACHE提供的代理网关模块,支持http,ftp等多种协议的正向和反向代理。
请参考官方文档: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
关于正向代理和返现代理请参考:http://zp820705.iteye.com/blog/1337414
Apache_proxy通过反向代理与TOMCAT结合,包括以下几种方式:
http直接代理
支持负载均衡,支持failover,不支持粘性会话(sticky session,我没有测试通过)
ajp代理
支持负载均衡,支持failover,支持粘性会话(sticky session)
PROXY代理负载均衡算法:
参数:lbmethod
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
proxy 故障转移
参数:nofailover
Off 默认,表示支持
On 表示不支持
sticky session
参数:stickysession
参数值:根据后端服务器的SESSION的ID字段名称配置,COOKIES|[URL],前部分表示COOKIES方式,后面部分表示不支持COOKIES的客户端使用的URL方式的字段名称。
TOMCAT配置一般为:JSESSIONID|jsessionid
sticky session中文叫粘性会话,实现一个用户的同一会话的多次请求使用同一台后端服务器支持,简答的说就是前端用户通过浏览器打开界面到关闭浏览器之间的所有请求都由一台TOMCAT服务,这种方式只实现了会话级别的负载均衡。APACHE+TOMCAT的sticky session一般通过AJP方式代理。
1. 用户首次请求APACHE时,APACHE通过负载均衡算法找出服务的后端TOMCAT服务器,修改SESSIONID为SESSIONID.route,route表示后端TOMCAT的唯一标志。
2. 在TOMCAT处理完成后,RESPONSE(SET-COOKIES)给客户端浏览器。
3. 客户端浏览器下次请求的时候带上该SESSIONID,APACHE通过请求中的SESSIONID的route选择对应的后端TOMCAT进行服务,实现复制均衡的同时保证SESSION可以。
缺点:
一点正在服务的后端TOMCAT宕机,那么改用户的SESSION丢失。
解决:
TOMCAT使用会话复制或会话共享。
TOMCAT:
是否需要使用SESSION?
一般对应前端应用型的网站或管理系统是需要SESSION来保存当前用户的状态的,对应以HTTP(如REST,SOAP等)协议为基础提供接口或服务的系统,因为每次请求都是原子的,不用考虑SESSION的问题。
如果不需要SEESION,TOMCAT端配置很简单,根据APACHE端的代理选择,如果是HTTP直接代理,那么TOMCAT无需任何其他集群相关配置;如果是AJP方式,需要分别在各个TOMCAT的server.xml文件中的< Engine>节点增加属性jvmRoute,设置APACHE端配置的对应的标志,如:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
session复制
session复制解释起来很简单,就是一旦一个TOMCAT节点产生了SESSION,就复制到其他TOMCAT节点,保证由于前段APACHE负载均衡分发用户请求道其他节点时,能正常使用SESSION。
TOMCAT默认的集群方式就是使用多播进行SESSION复制,但是消耗很大,在2台TOMCAT组成的集群效果还可以,但是节点越多消耗越大,效率越低。这也是业内称这种方案为实验室方案的原因。
支持通过和异步方式的SESSION复制,也支持持久化SESSION到公共存储或数据库(我没有测试过,只是官方文档上提到过)
参考官方文档:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
可以与sticky session结合。
session共享
session共享是TOMCAT服务器只创建一次SESSION,保存到共享设备(磁盘,数据库,或公共缓存),与其他节点共享SESSION访问,要求保证并发情况下的事务性,实现任意节点宕机后,其他节点可以正常的继续为前端用户服务。相对SESSION复制,消耗小很多,性能较高,特别对横向扩展TOMCAT节点支持较好。应用最广的是使用分布式缓存系统memcached保存TOMCAT会话。
开源组件:memcached session manager(msm)提供了完整TOMCAT共享存储SESSION到memcached的实现,并提供了多种方式和序列话模式。
如果前端apache的负载均衡使用sticky session方式,msm可以支持memcached的主备,保证memcached的高可用。如果你需要确保SESSION的高可用的话,这是一个不错的选择。
参考:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
APACHE+TOMCAT 的HA方案
方案一: APACHE_proxy_http代理 + TOMCAT实现平台接口服务
特点:
1. 作为平台接口服务,不考虑SESSION相关问题,每次请求都是原子操作。
2. APACHE作为负载均衡和故障转移,负载均衡不使用stickysession,算法可以根据实际情况选择,2.2后选择bybusiness较好。
3. TOMCAT需做任务特殊的配置
注意:
如果TOMCAT节点需要使用重定向(307)到TOMCAT直接访问则删除ProxyPassReverse配置。一般情况是TOMCAT节点有大IO操作可以使用307重定向到TOMCAT节点IP(独立IP和带宽)和端口,分离大数据流和业务流
ProxyPassReverse指令请参考:http://zp820705.iteye.com/blog/1337414
详细配置:http://zp820705.iteye.com/blog/1347417
方案二: APACHE(proxy_ajp_stickysession) + TOMCAT实现高可用网站或管理系统集群
l 使用sticky session实现会话级别的负载均衡和故障转移
l TOMCAT不做SESSION的复制或共享,一旦节点宕机或失效,改节点当前服务的所有用户SESSION丢失
对于对SESSION丢失影响不大的系统可以考虑,配置简单,资源消耗小,一定程度上实现高可用。如:内部管理系统(非营运系统)比较适合
详细配置:http://zp820705.iteye.com/blog/1377732
方案三: APACHE(proxy) + TOMCAT(session复制)实现高可用网站或管理系统集群
l Apache端可选使用sticky session配置负载均衡,是否配置sticky只是影响负载均衡的粒度。
l Apache端配置故障转移.
l Tomcat端使用官方文档描述的cluster配置,通过多播实现内存方式的session复制,可选使用同步复制和异步复制。
对于对SESSION强依赖的系统,并且对系统处理能力要求不是太高,只考虑2台TOMCAT作为后端服务的主备方式的情况,这是一种简答的配置。不适合太多的TOMCAT节点,节点越多,复制SESSION的代价会几何方式增加。如:适合小型网站,管理系统,小型业务系统。
详细配置:http://zp820705.iteye.com/blog/1377754
方案四: APACHE(proxy_ajp_stickysession) + TOMCAT(msm_sticky)实现HA
l Apache端使用AJP方式连接后端TOMCAT,启用sticky,实现会话级别的负载均衡。
l APACHE端配置支持后端TOMCAT节点的故障转移。
l 可选的APACHE通过keepalived实现2台apache的主备配置,实现apache服务器的高可用
l TOMCAT端使用memcached session manager实现SESSION的共享存储和访问。
l memcached session manager采用sticky方式配置,实现memcached的failover,确保memcached高可用。
该方案主要可以用于中型或大型WEB系统。在架构的各层都考虑了高可用。是比较完善的廉价解决方案之一。可以支持多个TOMCAT节点,对TOMCAT节点的扩容的非常方便。可以使用在对可靠性要求比较高的WEB业务系统,如对外业务支撑,业务处理系统,中大型业务型网站等。
详细配置:http://zp820705.iteye.com/blog/1377785
方案五: APACHE(proxy) + TOMCAT(msm_nosticky)实现HA
本方案与方案4类似,不同之处在于msm使用noticky方式,没有对memcached考虑failover。对于对SESSION可靠性要求不是特别高的WEB系统(其实也蛮高的可靠性了)可以采用该方案。比较适合内容型网站(如:新闻内网站,丢了SESSION问题不大,只要可以继续访问就OK)。
相关推荐
Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...
Apache、Tomcat以及mod_jk模块组成的集群架构是一种常见的高性能Web服务器和应用服务器组合,用于处理高并发和负载均衡的场景。在这个配置中,Apache作为前端服务器,通过mod_jk模块与后端的Tomcat应用服务器进行...
Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...
在Linux环境下,构建Apache与Tomcat的集群是提高Web服务可扩展性和高可用性的重要手段。这个集群配置通常涉及到负载均衡、故障转移以及资源优化。本文将深入探讨如何在Red Hat 5操作系统上实现这样的集群配置。 ...
总之,Apache + Tomcat集群的实现是一个涉及多方面技术的过程,需要对Web服务器、应用服务器以及负载均衡原理有深入理解。通过这样的集群设置,开发者能够构建出一个强大而灵活的Web服务环境,以应对不断增长的用户...
通过以上步骤,你就可以利用memcache实现Apache+Tomcat的session同步,从而构建一个高效且具有高可用性的Web服务集群。需要注意的是,虽然memcache提供了一种简单的方法来处理session同步,但在大型系统中,你可能还...
通过集成Apache和Tomcat,可以构建一个高效且可扩展的Web服务器集群,实现负载均衡和session复制功能。 集群技术的主要目标是提高系统的可用性和性能,通过将工作负载分散到多个服务器上,避免单点故障,并提高处理...
在IT领域,Apache+Tomcat+Linux集群与负载均衡技术是实现高可用性、高性能Web服务的重要手段之一。本文将围绕这一主题展开详细讨论,涵盖关键技术概念、配置流程及注意事项等内容。 #### 一、概述 **Apache+Tomcat...
Apache+Tomcat集群是一种常见的Web服务器和应用服务器集群架构,用于提高网站的可用性和可扩展性。Apache作为前端服务器,负责接收客户端的HTTP请求,并根据配置的负载均衡策略将这些请求转发给后端的多个Tomcat实例...
4. **负载均衡与集群**:介绍了如何通过Apache的负载均衡策略(如mod_proxy_balancer模块)分散请求到多个Tomcat实例,实现高可用性和容错性。同时,讨论了Tomcat的集群配置,使得多台Tomcat能够共享会话状态。 5. ...
- 在Apache+Tomcat集群中,Memcached Session Manager (MSM)负责在多个Tomcat实例之间同步和存储Session数据,实现高可用性。 4. 粘性与非粘性Session - 粘性Session:用户的请求被定向到特定的Tomcat实例,如果...
该集群不仅具备负载均衡功能,还能实现高可用性,即当某个Tomcat实例发生故障时,其会话数据能够自动迁移至集群中的其他实例,保证服务的连续性。这种配置方式非常适合于处理大量并发请求的应用场景,能够显著提升...
通过将Apache和Tomcat结合,可以实现负载均衡和高可用性。 在这个解决方案中,我们使用Apache作为反向代理服务器,将HTTP请求转发给多个Tomcat实例,每个Tomcat实例处理不同的请求,从而实现负载均衡。这种架构可以...
集群技术在IT行业中扮演着至关重要的角色,尤其是在构建高可用性和可扩展性的Web服务时。Apache和Tomcat的组合是实现这一目标的常见选择,因为Apache作为HTTP服务器负责前端的负载均衡,而Tomcat作为Java应用服务器...
标题中的“APACHE(proxy_ajp_stickysession) + TOMCAT实现高可用网站或管理系统集群”是指通过Apache HTTP服务器的Proxy_AJP模块配合Tomcat的stickysession特性,来构建一个高可用的Web服务集群。这样的集群可以提高...
Apache+Tomcat负载均衡与集群配置是提升Web应用性能和高可用性的重要手段。这篇文章将详细介绍如何使用Apache作为前端负载均衡器,与多台Tomcat服务器配合构建集群环境。 首先,我们要理解负载均衡的基本概念,它是...
Apache 和 Tomcat 集群是企业级 web 应用部署的一种常见模式,它通过将多个 Tomcat 实例与 Apache HTTP 服务器结合,实现高可用性和负载均衡。Apache 作为前端服务器,负责接收客户端请求,并根据配置策略将请求分发...