日期:2014-05-16  浏览次数:20760 次

linux下apache tomcat 通过mod_proxy负载均衡

?

第一章. 背景简介?
对于大多数企业应用,都希望能做到7*24小时不间断运行。要保持如此高的可用性并非易事,比较常见的做法是将系统部署到多台机器上,每台机器都对外提供同样的功能,这就是集群。系统变为集群时,除了要求系统能够支持水平伸缩外,还要解决两个问题:?
1, 如何均衡地访问到提供业务功能的机器。?
2, 如何保证当机器出现问题时,用户能自动跳转到另外的机器,不影响使用。?
常用的负载均衡技术有硬件和软件两种,本示例常用软件的技术实现。软件也有很多实现技术,如基于apache的mod_jk以及mod_proxy等。基于mod_jk的蛮复杂的,好坏我没做过测试,有人说很好,有人说是淘汰货。不过apache自己提供了mod_proxy 这种方式,我觉得也蛮简单吧,所有我就选用mod_proxy的方式。?
实现集群的应用最重要的是处理用户Session的问题,一般有三种策略:?
1, Session复制?
2, Session Sticky?
3, 基于Cache的集中式Session?
本文使用的是Tomcat 7.0.2应用服务器,用的方法是Session复制。?

第二章. 配置环境?
1, JDK1.7,请自行下载安装,搞Java的一般都装有的吧,哈哈。?
2, Apache 2.4.6
3, Tomcat 7.0.2,目前也是最新的版本。
4, 我这里是在centos 6.2(64bit)上的

?

第三章: 操作步骤?

  1. 安装Apache基本模块

? 配置conf/httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块??

1.  LoadModule proxy_module modules/mod_proxy.so    
2.  LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    
3.  LoadModule proxy_balancer_module modules/mod_proxy_balancer.so    
4.  LoadModule proxy_connect_module modules/mod_proxy_connect.so    
5.  LoadModule proxy_ftp_module modules/mod_proxy_ftp.so    
6.  LoadModule proxy_http_module modules/mod_proxy_http.so   

?


负载均衡部分:

?

?

<VirtualHost *:80>
    ServerName www.i-css.cn
    ServerAlias i-css.cn *i-css.cn
    ProxyRequests Off

    ProxyPass / balancer://cn/ stickySession=JSESSIONID|jsessionid
    #ProxyPassReverse / balancer://cn/
    ErrorLog "logs/cn_error.log"
    CustomLog "logs/cn_access.log" common
</VirtualHost>
<proxy balancer://cn>
    BalancerMember ajp://192.168.1.173:8009 loadfactor=1 route=s173_cn smax=5 max=20 ttl=120 retry=300 timeout=15
    BalancerMember ajp://192.168.1.183:8009 loadfactor=1 route=s183_cn smax=5 max=20 ttl=120 retry=300 timeout=15
    ProxySet lbmethod=bytraffic
</proxy>

?

?

这里是我的负载均衡在apache中的配置。你可以直接放在httpd.conf 里面,也可以放在相关的子配置文件中,反正我是写vhost.conf里面的。后面我们会逐条介绍其中的意义和配置的。

?

<proxy balancer://cn>
    BalancerMember ajp://192.168.1.173:8009 loadfactor=1 route=s173_cn smax=5 max=20 ttl=120 retry=300 timeout=15
    BalancerMember ajp://192.168.1.183:8009 loadfactor=1 route=s183_cn smax=5 max=20 ttl=120 retry=300 timeout=15
    ProxySet lbmethod=bytraffic
</proxy>

这里,我配置了一个负载均衡节点balancer://cn,其中包含了两个服务ajp://192.168.1.173:8009ajp://192.168.1.183:8009,这里是来源于两个独立的内网ip的服务。这里使用的AJP的转发方式,当然,使用HTTP也可以。不过在性能和稳定性方面。AJP比HTTP具有明显的优势。

?