论坛首页 Java企业应用论坛

Apache httpd和Tomcat结合配置web应用 应对互联网用户大量请求

浏览 15249 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-02-04  
摘要:本文阐述如何配置使用apache作为前端web服务器,Tomcat作为后端服务器处理互联网用户的站点请求。

1、软件版本:
  Tomcate 5.5;Apache Httpd 2.2;JDK 1.6;S6240本;WinXP Home Edition操作系统;

2、需求概况:
  对外总共有5个服务:www.paoding.net, passport.paoding.net, office.paoding.net, zhidao.paoding.net, post.paoding.net 。这5个服务分别对应5个web应用。由apache httpd作为互联网接入服务器,在80端口接收对这5个服务的请求。apache httpd再将这5个请求分别对应到不同的后端web服务器(Tomcat)处理。这种架构具有多种好处,其中最大的一条是:能够将负载简单地按功能应用分担到不同的物理机器上。另外还有一些好处,比如便于升级、能够利用apache httpd处理静态文件快速的特点离补java web服务引擎对静态资源相对较弱的缺点,。。。。

3、先行步骤:
    3.1  在C:\WINDOWS\system32\drivers\etc\host文件中,配置以上5个域名映射到本机即127.0.0.1,同时配置service域名,大致如下:
    127.0.0.1       www.paoding.net
    127.0.0.1       passport.paoding.net
    127.0.0.1       office.paoding.net
    127.0.0.1       zhidao.paoding.net
    127.0.0.1       post.paoding.net

    127.0.0.1       www.service.paoding.net
    127.0.0.1       passport.service.paoding.net
    127.0.0.1       office.service.paoding.net
    127.0.0.1       zhidao.service.paoding.net
    127.0.0.1       post.service.paoding.net

    3.2  以passport为例,建立一个普通的web application,创建一个jsp,命名为index.jsp,jsp页面上输出“你好,这是passport系统”简单几个字

4、在tomcat中配置passport应用,并确认可用:
    4.1 $catalina_home/confi/server.xml文件中,增加Host元素,如下内容:

      <Host name="passport.service.paoding.net"  unpackWARs="true" autoDeploy="true"
             xmlValidation="false" xmlNamespaceAware="false"/>

    4.2 $catalina_home/conf/Catalina下创建passport.service.paoding.net目录,并在这个目下下创建名为ROOT.xml的文件,文件内容如下:

        <Context docBase="E:/paoding.net/workspace/Passport/WebContent"
                 privileged="true" antiResourceLocking="false" antiJARLocking="false">
        </Context>

docBase具体配置路径由你的web application路径确定,应根据你的情况进行调整。

   4.3 在浏览器访问:http://passport.service.paoding.net:8080/index.jsp,确认正确浏览到该页面。成功后不要关闭Tomcat服务器

5、配置Apache httpd:
    5.1 找到apach/conf/httpd.conf文件,确认以下这些文字行前面没有"#"注释号:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

    5.2 增加VirtualHost元素,如下:
        NameVirtualHost *:80
        <VirtualHost *:80>
                 ServerName   passport.paoding.net
                 ProxyIOBufferSize 8192
                 ProxyRequests Off
                 ProxyVia Full
                 ProxyPass / http://passport.service.paoding.net:8080/ smax=5 max=20 ttl=120 retry=300
        </VirtualHost>

     5.3 在浏览器中访问http://passport.paoding.net/index.jsp,确认输出的内容与在Tomcat输出内容一致。如果你看到这个访问能够成功,则表示这次试验完全成功。

6 总结

其他的服务配置类似如此。具体网站时,会配置多个服务器,可以将不同的应用分布在不同的服务器当中。[也就是变更host文件的地址映射]
   发表时间:2007-02-04  
你这边只是对不同二级域名做了一个代理的重定向,即针对不同的应用进行了分离,没有真正起到负载均衡的作用!
如果passport.paoding.net域名的流量非常大,本身tomcat还是需要承受相同量的load!
而且apache属于应用层load balance,比起二层,三层,四层的均衡负载,性能低很多!
如果各个域名都是一套系统,不如根据请求进行分发!让tomcat集群可以跨应用处理!这样高流量应用分布到5台中间服务器上,效率可以高很多!
0 请登录后投票
   发表时间:2007-02-04  
galaxystar 写道
你这边只是对不同二级域名做了一个代理的重定向,即针对不同的应用进行了分离,没有真正起到负载均衡的作用!
如果passport.paoding.net域名的流量非常大,本身tomcat还是需要承受相同量的load!
而且apache属于应用层load balance,比起二层,三层,四层的均衡负载,性能低很多!
如果各个域名都是一套系统,不如根据请求进行分发!让tomcat集群可以跨应用处理!这样高流量应用分布到5台中间服务器上,效率可以高很多!


超大型网站很多都要做特别处理,没有一成不变的通用套路。在负载方面不仅仅要做应用方面的分离,还要把同样的应用部署在不同的物理机器上,通过共享架构实现(可能使用hash将同类型数据存放在不同的共享服务器中,参考memcached)数据共享,或失效通知的方式达到数据一致。

但是,利用apache 或lighttpd等和tomcate/resin之类的结合也是很常见的,能够大大提升性能的,以及进行负载分担,做起来非常简单,“性价比”高。大多数互联网站均可以采用类似的技术。

当然对于超大型,偶瞄了楼上的文章,列出一些参考目录如下(原创的?ZT?):


1、使用负载均衡技术建设高负载的网络站点
2、负载均衡技术全攻略
3、讨论:负载均衡服务器宕机怎么办?!


对了,楼上的,你具体使用什么技术分发请求?
0 请登录后投票
   发表时间:2007-02-04  
基于IP分发,LVS应该比较流行的!
均衡负载里,我认为缓存动态内容也是提升高负载的诀窍之一!
我使用ESI,基于squid解析esi,做到缓存动态内容!
其中,缓存载体,我也喜欢memcache!

我的那些文章是从CSDN转的!怕收藏链接,以后找不到了,直接copy过来了,赖得加转载!呵呵!
0 请登录后投票
   发表时间:2007-02-07  
Windows xp Home?大量请求?

JDK 6.0也过于新,用于生产系统?

我看你的架构是个实验系统吧?
0 请登录后投票
   发表时间:2007-02-07  
frankiehuang 写道
Windows xp Home?大量请求?

JDK 6.0也过于新,用于生产系统?

我看你的架构是个实验系统吧?



示例性给出一个东西,同时告知示运行的环境,应该是一种起码的道德。
可以把xp home换成你喜欢的操作系统,jdk换成你认为ok的版本,对本帖子内容没有任何影响。

这种架构不是什么实验系统,实实在在的在现实中普遍被使用。
[几百万用户的网站使用类似这种架构用的好好的]
[不一定是apache,同时apache也不是最好的;同时前后服务器之间连接还有其他文章可做]

了解高效的Web服务器和java web服务器的各自优缺点,以及帖子中阐述的一些其他特性,你就知道这是一种不错选择, not 纸面谈兵

JDK6.0为什么不能用于“生产系统”,给点具体的理由?   或者请你给出升级jdk时你遇到的具体困难,这里肯定有人帮你搞定。
0 请登录后投票
   发表时间:2007-05-26  
能不能给的全一点啊,你说的有点粗糙,对于刚接触的人,配置很难成功,希望能写的全点,我按照这个配置,不成功啊,还有要注意哪些,谢谢了!
0 请登录后投票
   发表时间:2007-05-26  
这5个网站session如何共享呢?
0 请登录后投票
   发表时间:2007-05-27  
jdk 6.0还是很稳定的吧,我们已经用了好几个月了。
7x24小时在线系统,千万级访问量,没因为jdk发生过什么问题
0 请登录后投票
   发表时间:2007-05-27  
不明白你在应用前面放一个apache干嘛用
不同应用的请求直接访问不同的服务器不就行了
流量大的时候,一个apache是无法满足性能需求的
另外一个慢的应用就可能使所有应用不能访问
也许是我太笨,没看懂楼主的方案,呵呵
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics