`

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代理本身负载均衡算法。可以使用自己定义的算法吗?

相关推荐

    nginx+tomcat高可用、高性能jsp集群

    目的:搭建高可用、高性能的jsp集群 二、初始化系统 #init system 系统环境: CentOS 5.5(定制安装) 组件: Base Development Libraries Development Tools Editors Text-based Internet ./init_system.sh #此脚本...

    系统架构设计-负载均衡和高可用(Apache反向代理多种模式/KEEPALIVED+LVS)

    目录: 负载均衡技术介绍 什么是负载均衡? 负载均衡算法原理 负载均衡应用模式 高可用的系统设计 什么是系统高可用性? 高可用的模式 ... Apache+Tomcat 高可用WEB集群 Keepalived +LVS 高可用应用集群

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求: 1、 Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡。 2、 为系统设定 Session 超时时间,包括 Apache 和 tomcat 3...

    keepalived 安装手册.docx

    javaweb高可用+负载均衡-服务器集群(keepalived+apache+tomcat)生产环境部署手册 所用技术:1高可用集群keepalived。2负载均衡集群apache。3tomcat服务。4生产环境的日常维护脚本 真实生产环境在用的技术架构,亲...

    基于Docker容器的Web集群设计与实现

    针对完全虚拟化技术不能快速部署Web集群及自适应动态扩容的问题。本文提出了一种基于Docker容器组建Web集群的设计方案。该方案主要采用了Docker容器引擎打包Web应用环境镜像生成应用容器,并利用Nginx对业务流量进行...

    Web应用的负载均衡、集群、高可用(HA)解决方案

    本文来自于csdn,本文主要介绍了7个相关的组件,关键概念及术语,常用Web集群方案,高可用(HA)和session共享等。——它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip...

    用apache和tomcat搭建集群(负载均衡)

     集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。集群系统...

    Linux云计算运维-全集

    Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 Kubernetes云计算实战 ...部署高可用集群 构建可视化数据分析系统-ELK 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM

    Linux运维工程师私人笔记,全部MD格式

    Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 ...部署高可用集群 构建可视化数据分析系统-ELK 计算机网络基础 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM

    Linux云计算运维笔记

    Ansible自动化运维平台 CI和CD代码管理平台 Docker容器实战部署 ...部署高可用集群 构建可视化数据分析系统-ELK 计算机网络基础 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM

    java开源包3

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包4

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包1

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包11

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包2

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包6

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包5

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包10

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

Global site tag (gtag.js) - Google Analytics