`

Apache+tomcat实现高可用WEB集群

 
阅读更多

 

概述

本文是企业高可用架构之一:APACHE+TOMCAT实现高可用WEB集群。

 

Apache+tomcatJ2EE领域最常见和低成本的高可用集群实现方式,同时也是应用最广泛的WEB-HA实现方式之一。本文结合工作经验和学习所得,简单介绍APACHE+TOMCAT集群的各种使用方式,并进行简单对比。当然,干这行都知道,架构选择就像找老婆:没有最好的,只有最合适的。

 

目标:

支持故障转移(或主备,扩展性不佳),保证故障转移后,对前端用户透明,无感知(状态不变化),同时为提高性能支持复制均衡。

 

APACHE主要负责:负载均衡(LoadBalancer),故障转移(Failover,主备(指TOMCAT的主备,一般没有使用)

TOMCAT负责:SESSION复制和SESSION共享

 

散装介绍

 

以下散装介绍,是想到什么写什么,没有特别的梳理,主要介绍些关键的概念和逻辑。

 

APACHE最为最老牌的WEB服务器,提供了2种方式与TOMCAT实现集群。Mod_jkproxyMod_jk配置较复杂,一般是老版本在使用,目前一般常用的是proxy方式,本文以proxy进行介绍。

ProxyAPACHE提供的代理网关模块,支持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

参数值:根据后端服务器的SESSIONID字段名称配置,COOKIES|[URL],前部分表示COOKIES方式,后面部分表示不支持COOKIES的客户端使用的URL方式的字段名称。

TOMCAT配置一般为:JSESSIONID|jsessionid

 

sticky session中文叫粘性会话,实现一个用户的同一会话的多次请求使用同一台后端服务器支持,简答的说就是前端用户通过浏览器打开界面到关闭浏览器之间的所有请求都由一台TOMCAT服务,这种方式只实现了会话级别的负载均衡。APACHE+TOMCATsticky session一般通过AJP方式代理。

1. 用户首次请求APACHE时,APACHE通过负载均衡算法找出服务的后端TOMCAT服务器,修改SESSIONIDSESSIONID.routeroute表示后端TOMCAT的唯一标志。

2. TOMCAT处理完成后,RESPONSESET-COOKIES)给客户端浏览器。

3. 客户端浏览器下次请求的时候带上该SESSIONIDAPACHE通过请求中的SESSIONIDroute选择对应的后端TOMCAT进行服务,实现复制均衡的同时保证SESSION可以。

缺点:

一点正在服务的后端TOMCAT宕机,那么改用户的SESSION丢失。

解决:

TOMCAT使用会话复制或会话共享。

 

 

TOMCAT

 

是否需要使用SESSION

一般对应前端应用型的网站或管理系统是需要SESSION来保存当前用户的状态的,对应以HTTP(如REST,SOAP等)协议为基础提供接口或服务的系统,因为每次请求都是原子的,不用考虑SESSION的问题。

 

如果不需要SEESIONTOMCAT端配置很简单,根据APACHE端的代理选择,如果是HTTP直接代理,那么TOMCAT无需任何其他集群相关配置;如果是AJP方式,需要分别在各个TOMCATserver.xml文件中的< Engine>节点增加属性jvmRoute,设置APACHE端配置的对应的标志,如:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

 

 

 

session复制

session复制解释起来很简单,就是一旦一个TOMCAT节点产生了SESSION,就复制到其他TOMCAT节点,保证由于前段APACHE负载均衡分发用户请求道其他节点时,能正常使用SESSION

TOMCAT默认的集群方式就是使用多播进行SESSION复制,但是消耗很大,在2TOMCAT组成的集群效果还可以,但是节点越多消耗越大,效率越低。这也是业内称这种方案为实验室方案的原因。

支持通过和异步方式的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共享存储SESSIONmemcached的实现,并提供了多种方式和序列话模式。

 

如果前端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实现高可用网站或管理系统集群

 

使用sticky session实现会话级别的负载均衡和故障转移

TOMCAT不做SESSION的复制或共享,一旦节点宕机或失效,改节点当前服务的所有用户SESSION丢失

对于对SESSION丢失影响不大的系统可以考虑,配置简单,资源消耗小,一定程度上实现高可用。如:内部管理系统(非营运系统)比较适合

 

详细配置:http://zp820705.iteye.com/blog/1377732

 

 

方案三: APACHE(proxy) + TOMCAT(session复制)实现高可用网站或管理系统集群

Apache端可选使用sticky session配置负载均衡,是否配置sticky只是影响负载均衡的粒度。

l Apache端配置故障转移.

Tomcat端使用官方文档描述的cluster配置,通过多播实现内存方式的session复制,可选使用同步复制和异步复制。

 

对于对SESSION强依赖的系统,并且对系统处理能力要求不是太高,只考虑2TOMCAT作为后端服务的主备方式的情况,这是一种简答的配置。不适合太多的TOMCAT节点,节点越多,复制SESSION的代价会几何方式增加。如:适合小型网站,管理系统,小型业务系统。

 

详细配置:http://zp820705.iteye.com/blog/1377754

 

方案四: APACHE(proxy_ajp_stickysession) + TOMCAT(msm_sticky)实现HA

 

Apache端使用AJP方式连接后端TOMCAT,启用sticky,实现会话级别的负载均衡。

l APACHE端配置支持后端TOMCAT节点的故障转移。

l 可选的APACHE通过keepalived实现2apache的主备配置,实现apache服务器的高可用

l TOMCAT端使用memcached session manager实现SESSION的共享存储和访问。

l memcached session manager采用sticky方式配置,实现memcachedfailover,确保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)。

 

计划:后续继续介绍基于KEEPALIVED+LVSHA方案

分享到:
评论
1 楼 美丽的小岛 2012-08-07  
你好,请问一下,除了使PROXY代理本身负载均衡算法。可以使用自己定义的算法吗?

相关推荐

    apache+tomcat+jk 均衡负载和集群

    Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...

    apache + tomcat + mod_jk集群

    Apache、Tomcat以及mod_jk模块组成的集群架构是一种常见的高性能Web服务器和应用服务器组合,用于处理高并发和负载均衡的场景。在这个配置中,Apache作为前端服务器,通过mod_jk模块与后端的Tomcat应用服务器进行...

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    linux下apache+tomcat实现集群

    - 可以使用Keepalived或Heartbeat等工具实现高可用性,当一台Tomcat服务器故障时,Apache可以自动将流量切换到其他健康服务器。 4. **测试和优化**: - 使用curl或者浏览器访问Apache,观察是否正确将请求分发到...

    Apache + Tomcat 实现简单集群

    总之,Apache + Tomcat集群的实现是一个涉及多方面技术的过程,需要对Web服务器、应用服务器以及负载均衡原理有深入理解。通过这样的集群设置,开发者能够构建出一个强大而灵活的Web服务环境,以应对不断增长的用户...

    Apache+Tomcat实现负载均衡及集群(session同步)--五、session同步(3)使用memcache

    通过以上步骤,你就可以利用memcache实现Apache+Tomcat的session同步,从而构建一个高效且具有高可用性的Web服务集群。需要注意的是,虽然memcache提供了一种简单的方法来处理session同步,但在大型系统中,你可能还...

    Apache+Tomcat5.0实现集群

    通过集成Apache和Tomcat,可以构建一个高效且可扩展的Web服务器集群,实现负载均衡和session复制功能。 集群技术的主要目标是提高系统的可用性和性能,通过将工作负载分散到多个服务器上,避免单点故障,并提高处理...

    Apache+Tomcat集群

    Apache+Tomcat集群是一种常见的Web服务器和应用服务器集群架构,用于提高网站的可用性和可扩展性。Apache作为前端服务器,负责接收客户端的HTTP请求,并根据配置的负载均衡策略将这些请求转发给后端的多个Tomcat实例...

    Apache+Tomcat+Linux集群和负载均衡

    在IT领域,Apache+Tomcat+Linux集群与负载均衡技术是实现高可用性、高性能Web服务的重要手段之一。本文将围绕这一主题展开详细讨论,涵盖关键技术概念、配置流程及注意事项等内容。 #### 一、概述 **Apache+Tomcat...

    Apache+Tomcat+6高级编程

    4. **负载均衡与集群**:介绍了如何通过Apache的负载均衡策略(如mod_proxy_balancer模块)分散请求到多个Tomcat实例,实现高可用性和容错性。同时,讨论了Tomcat的集群配置,使得多台Tomcat能够共享会话状态。 5. ...

    apache+tomcat+memcached

    - 在Apache+Tomcat集群中,Memcached Session Manager (MSM)负责在多个Tomcat实例之间同步和存储Session数据,实现高可用性。 4. 粘性与非粘性Session - 粘性Session:用户的请求被定向到特定的Tomcat实例,如果...

    Linux_Apache+Tomcat+jk

    该集群不仅具备负载均衡功能,还能实现高可用性,即当某个Tomcat实例发生故障时,其会话数据能够自动迁移至集群中的其他实例,保证服务的连续性。这种配置方式非常适合于处理大量并发请求的应用场景,能够显著提升...

    Aapche+Tomcat实现服务数据集群

    * 高可用性:如果一个Tomcat实例宕机,其他Tomcat实例可以继续处理请求,从而实现高可用性。 * 扩展性:可以根据需要添加更多的Tomcat实例,以满足不断增长的访问请求。 Aapche+Tomcat实现服务数据集群可以解决...

    apache+tomcat集群技术总结

    集群技术在IT行业中扮演着至关重要的角色,尤其是在构建高可用性和可扩展性的Web服务时。Apache和Tomcat的组合是实现这一目标的常见选择,因为Apache作为HTTP服务器负责前端的负载均衡,而Tomcat作为Java应用服务器...

    APACHE(proxy_ajp_stickysession) + TOMCAT实现高可用网站或管理系统集群

    标题中的“APACHE(proxy_ajp_stickysession) + TOMCAT实现高可用网站或管理系统集群”是指通过Apache HTTP服务器的Proxy_AJP模块配合Tomcat的stickysession特性,来构建一个高可用的Web服务集群。这样的集群可以提高...

    apache+tomcat集群

    Apache 和 Tomcat 集群是企业级 web 应用部署的一种常见模式,它通过将多个 Tomcat 实例与 Apache HTTP 服务器结合,实现高可用性和负载均衡。Apache 作为前端服务器,负责接收客户端请求,并根据配置策略将请求分发...

    Apache+Tomcat负载均衡与集群配置详解

    Apache+Tomcat负载均衡与集群配置是提升Web应用性能和高可用性的重要手段。这篇文章将详细介绍如何使用Apache作为前端负载均衡器,与多台Tomcat服务器配合构建集群环境。 首先,我们要理解负载均衡的基本概念,它是...

Global site tag (gtag.js) - Google Analytics