`
yuelangyc
  • 浏览: 454788 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat+Apache构建WEB集群系统配置

阅读更多
apache+tomcat构建WEB集群系统配置
一、软件准备

        Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本
        Tomcat 6.0 : http://tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件
        注意:由于Apache和Tomcat项目与集群相关的模块均处于持续发展和优化过程中,因此笔者不保证本文配置方法对所有Apache和Tomcat版本均适用。

二、软件安装
        把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。对于已安装IIS的机器,在启动Apache服务之前必须首先停止IIS Admin服务,不然会因为端口冲突而无法启动。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"It works!"的页面就代表Apache已经正常工作了。

        解压tomcat zip文件到两个文件夹,分别为t1和t2,以下均以t1和t2代表两个tomcat服务器。配置JAVA_HOME和CLASSPATH系统环境变量,分别启动t1和t2,确保tomcat可用,然后关闭tomcat。

        本文仅为讲解配置过程,Apache和tomcat均工作在同一台机器上。实际部署时没有任何限制,Apache和单个tomcat可以分别部署在不同的服务器上。

三、Apache配置  
        Apache 2.2集成了mod_jk功能,相对于1.3版本,不需要再进行繁琐的worker.properties配置,配置过程大幅简化。

        首先,在Apache安装目录下找到conf/httpd.conf文件,以文本编辑器打开。

        去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
     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_ftp_module modules/mod_proxy_ftp.so
     LoadModule proxy_http_module modules/mod_proxy_http.so

        向下拉动文档找到<IfModule dir_module>节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。

        继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。

        用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上

<VirtualHost *:80>
          ServerAdmin 管理员邮箱
         ServerName 域名(没有可用IP地址代替)
         ServerAlias localhost
          ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
          ProxyPassReverse / balancer://cluster/
          ErrorLog "logs/lbtest-error.log"
         CustomLog "logs/lbtest-access.log" common
     </VirtualHost>


        这里balancer://是告诉Apache需要进行负载均衡的代理,后面的cluster是集群名,可以随意取,两个日志引擎ErrorLog负责记录错误,CustomLog负责记录所有的http访问以及返回状态,日志名可以自己取,笔者取为lbtest。httpd-vhosts.conf配置完毕,回到httpd.conf,在文档最下面加上
ProxyRequests Off
      <proxy balancer://cluster>
           BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
          BalancerMember ajp://127.0.0.1:9009 loadfactor=1  route=jvm2
     </proxy>
	ProxyRequests Off 


        是告诉Apache需要使用反向代理(利用Apache进行负载均衡必须使用反向代理。
        <proxy balancer://cluster>用于配置工作在tomcat集群中的所有节点,这里的"cluster"必须与上面的集群名保持一致。Apache通过ajp协议与tomcat进行通信,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。route参数对应后续tomcat配置中的引擎路径(jvmRoute)。

        重启Apache服务,如果此时访问http://localhost/将会返回503错误,打开刚才配置的错误日志logs/lbtest-error.log,可以看到错误原因是因为后台服务器没有响应,因为此时tomcat尚未配置和启动。

四、Tomcat配置
        如果仅仅为了配置一个可用的集群,Tomcat的配置将会非常简单。分别打开t1和t2的server.xml配置文件,对于t1,尽量采用默认的设置,而对t2作较大改动以避免与t1冲突。如果t2和t1不在同一台服务器上运行,对于端口就不需做改动。

        首先是配置关闭端口,找到<Server port="8005" shutdown="SHUTDOWN">,t1不变,把t2改为9005。

        下面配置Connector的端口,找到non-SSL HTTP/1.1 Connector,即tomcat单独工作时的默认Connector,保留t1默认配置,在8080端口侦听,而把t2设置为在9080端口侦听。
往下找到AJP 1.3 Connector,
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,这是tomcat接收从Apache过来的ajp连接请求时使用的端口,保留t1默认设置,把t2端口改为9009。注意,这里的端口对应Apache httpd.conf中BalancerMember中配置的ajp连接端口。

      继续向下配置引擎,找到
<Engine name="Catalina" defaultHost="localhost">,去掉这段或改为注释,把上方紧挨的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注释符去掉,对于t2,去掉注释符并把jvm1改为jvm2。这里的jvmRoute对应Apache httpd.conf中BalancerMember中配置的route参数。

        向下找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,打开注释,这里的配置是为了可以在集群中的所有tomcat节点间共享会话(Session)。如果仅仅为了获得一个可用的tomcat集群,Cluster只需要这么配置就可以了,对于更多的Cluster配置笔者将另文解释。

        server.xml的配置修改完毕,下一步需要对具体的应用进行配置。在webapps目录下新建test目录,在test目录下新建test.jsp文件,代码如下:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>"); 
  String dataName = request.getParameter("dataName");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }  
  out.print("<b>Session 列表</b>");  
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="test.jsp" method="POST">
    名称:<input type=text size=20 name="dataName">
     <br>
    值:<input type=text size=20 name="dataValue">
     <br>
    <input type=submit>
   </form>
</body>
</html>

        在test目录下继续新建WEB-INF目录和web.xml,在<web-app>节点下加入<distributable />,这一步非常重要,是为了通知tomcat服务器,当前应用需要在集群中的所有节点间实现Session共享。如果tomcat中的所有应用都需要Session共享,也可以把conf/context.xml中的<Context>改为<Context distributable="true">,这样就不需对所有应用的web.xml再进行单独配置。

        启动t1,待t1启动完成后再启动t2。再次访问http://localhost,可以看到小猫页面。访问http://localhost/test/test.jsp。可以看到包括服务器地址,端口,sessionid等信息在内的页面。

        注意这里的sessionid,与平常的sessionid相比多了小数点和后面的部分,这里的jvm1即处理当前请求tomcat服务器的jvmRoute,通过这里可以知道是集群中的哪一个服务器处理了当前请求。在文本框中输入名称和值,点击按钮,信息就保存到了Session中,并且显示到页面上。不断点击按钮,可以发现输入的信息并未丢失,而且sessionid小数点之前的部分保持不变,而小数点后面的字符不停的变化,表明是由不同的tomcat服务器处理了这些请求。这样就实现了负载均衡,并且集群中的不同节点间可以实现会话的共享。此时如果停止一个tomcat服务器t2,Apache将会自动把后续请求转发到集群中的其他服务器即t1。重启t2后,Apache会自动侦测到t2的状态为可用,然后会继续在t1和t2间进行负载均衡。

        如果需要向集群中增加节点,首先需要对tomcat作类似配置,然后修改Apache httpd.conf,增加BalancerMember,指向新增的tomcat即可。

原文地址:http://zyycaesar.iteye.com/blog/294089
分享到:
评论

相关推荐

    Tomcat+Apache+JK集群

    【标题】"Tomcat+Apache+JK集群"指的是在Web服务器架构中,通过Apache HTTP Server与Tomcat应用服务器结合,并利用JK模块实现负载均衡和高可用性的集群部署方式。这种方式可以提升系统的性能和稳定性,应对高并发...

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

    通过上述详细步骤和配置要点,我们可以构建出一个基于Tomcat、Apache和JK代理模块的高效、稳定的Web服务集群,不仅提高了系统的处理能力,还增强了系统的健壮性和容错性。这种架构在高流量、高并发的互联网应用中...

    tomcat + apache + memcached 集群jar包

    标题中的“tomcat + apache + memcached 集群jar包”揭示了这是一个关于构建分布式系统的技术组合,其中涉及到三个核心组件:Tomcat(一个流行的Java应用服务器)、Apache(一个广泛应用的HTTP服务器)和Memcached...

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

    **Apache+Tomcat+Linux集群和负载均衡**主要指通过Apache作为前端反向代理服务器,Tomcat作为后端应用服务器,同时利用Linux系统强大的稳定性和安全性来构建一个能够有效分发请求、提高响应速度和服务质量的Web应用...

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

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

    apache+tomcat+jk集群

    在“apache+tomcat+jk集群”这一主题中,我们将深入探讨如何通过Apache、Tomcat以及JK模块的结合,实现负载均衡和集群配置,从而提升系统的性能和稳定性。 ### Apache的角色 Apache是一款广泛使用的开源Web服务器...

    Nginx+Tomcat+Redis搭建均衡负载集群

    在构建高性能、高可用性的Web服务时,"Nginx+Tomcat+Redis"的组合是一种常见的架构模式。这个架构利用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用作缓存系统以提升数据访问...

    tomcat7+apache2.2做集群

    在IT行业中,构建一个高效的Web服务环境是至关重要的,特别是在高流量或需要高可用性的场景下。本教程将深入探讨如何使用Apache HTTP Server 2.2.4与Tomcat 7.0.70搭建一个集群环境,实现负载均衡。这个配置能够确保...

    linux+java+tomcat+apache环境搭建.pdf

    Linux+Java+Tomcat+Apache环境搭建涉及到多个环节,包括操作系统的选择、Java开发环境的搭建、Web服务器的配置以及Web应用服务器的配置等。接下来将详细阐述这个过程中的关键知识点。 首先,操作系统选择通常会选择...

    tomcat7+apache2.2集群、负载均衡.rar

    标题中的“tomcat7+apache2.2集群、负载均衡”指的是使用Apache HTTP Server 2.2.16与Tomcat 7.0.41构建的集群环境,通过负载均衡技术来分发请求,提高服务的可用性和响应速度。在这样的集群中,Apache作为前端...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享

    通过以上步骤,我们构建了一个基于Nginx+Tomcat+Memcached的高可用Web服务集群,实现了Session的共享,提高了系统的扩展性和稳定性。在实际运营过程中,还需要关注监控、日志、安全等方面,确保系统的健康运行。

    Nginx+tomcat+redis

    在构建高性能、高可用性的Web服务时,"Nginx+Tomcat+Redis"的组合是一种常见的架构模式。这个架构充分利用了每个组件的优势,以实现高效的数据处理、动态内容渲染和负载均衡。以下是对这套技术栈的详细解释: 1. **...

    tomcat+redis+nginx集群搭建所需jar包

    在构建高性能、高可用性的Web应用系统时,集群配置是一个重要的环节。本压缩包提供了"tomcat+redis+nginx"集群搭建所需的jar包,旨在帮助开发者实现高效的数据缓存和负载均衡。以下将详细讲解这些组件及它们在集群中...

    Nginx+Tomcat+MemCached_集群配置

    在构建高性能、高可用性的Web服务时,常常会采用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为缓存系统。这种组合可以充分利用各自的优势,提升系统的响应速度和处理能力。接下来,...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    在构建高性能、高可用性的Web应用系统时,整合Apache Tomcat、Nginx以及Redis作为会话管理器是一个常见的选择。这个"tomcat-redis-session-manager tomcat+nginx+redis集群所需jar"压缩包提供了在这样的架构中实现...

    Apache+tomcat集群环境配置

    在构建高性能、高可用性的Web应用系统时,Apache与Tomcat的集群配置是常见的解决方案。Apache作为前端服务器,可以通过负载均衡技术将用户请求分发到多个后端的Tomcat实例上,实现请求的分担,同时通过session同步,...

    Apache+Tomcat5.0实现集群

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

    Linux+tomcat6+apache2.4集群部署

    本教程将详细介绍如何在Linux系统上部署一个基于Tomcat6和Apache2.4的集群环境。这个集群部署旨在提高应用程序的性能和稳定性,通过分散请求到多个服务器节点来防止单一故障点。 首先,我们要理解Linux作为操作系统...

    Nginx+Tomcat+Memcached集群

    在构建高性能、高可用性的Web服务时,"Nginx+Tomcat+Memcached集群"是一种常见的架构模式。这种架构利用了Nginx的反向代理和负载均衡能力,Tomcat作为Java应用服务器处理业务逻辑,而Memcached作为分布式内存缓存...

Global site tag (gtag.js) - Google Analytics