`
kalogen
  • 浏览: 879958 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tomcat负载均衡和集群环境的搭建

阅读更多

注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁。下面就是我用我们真实的项目去实现这个过程。同时修复这过程中一些问题。以下的所有步骤均为亲自测试,截图也是真实的。

 

注2:要完成集群和负载均衡配置,最简单步骤为完成所有标有下划线的操作。无下划线的部分为对操作的解释或是额外的说明。

 

1.   准备条件:

 

材料

本次搭建所用具体版本

Apache

Apache 2.2.15    (用于分发请求)

Tomcat  N

apache-tomcat-6.0.26.zip  2  (根据需求准备N个免安装的tomcat

Mod_jk

mod_jk-1.2.30-httpd-2.2.3.so (注意,这个需要和apache的版本匹配。2.2.3mod_jk用于匹配Apache 2.2.X版本)

用于部署的项目

Tlcom 1.2.6 sp3

 

 

材料

下载地址

Apache2.2

http://httpd.apache.org/download.cgi

Tomcat6.0.26

http://tomcat.apache.org/download-60.cgi

Mod_jk-1.2.30

http://tomcat.apache.org/download-connectors.cgi

 

 

2.   安装apache tomcat

 

apache安装到硬盘上, 然后将2tomcat解压。(这里的安装和解压不限定具体目录,安装和解压到某个目录下即可)。

这里我将apache2.2安装到D:\Apache Software Foundation\2tomcat也解压到同一个目录下。

接着检查apache是否能正常启动。



3.   apache 配置负载均衡

 

1取出下载的mod_jk-1.2.30-httpd-2.2.3.so。将其放置到Apache2.2\modules目录下。

2打开Apache2.2\conf\ httpd.conf文件。在其末尾添加上一行:

 

include "D:\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

 

即调用conf目录下的mod_jk.conf这个配置文件。当然,apache conf目录下原来是没有这个文件的。我们需要自己新建这个文件。

 

3conf目录下新建Mod_jk.conf内容如下:

 

#加载mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so

#指定 workers.properties文件路径

JkWorkersFile conf/workers.properties

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器

JkMount /*.jsp controller

 

2行中的mod_jk-1.2.30-httpd-2.2.3.so,就是我们之前放到modules目录下的那个.so文件。这里的名字就根据放进去的实际名字来写。版本不同,名字也就不一样。当然,mod_jk-1.2.30-httpd-2.2.3.so这个文件允许自己重命名。重命名后,只要在这里相应的配置上重命名后的名字,不会影响这个插件的功能。

 

4行中conf/workers.properties文件也是不存在的,也需要我们自己建立。这个文件的作用是对用于均衡负载的 负载器进行具体的登记。(比如我们用的2tomcat.换句话说,workers.properties就是对几个worker的登记表。我们的2tomcat就作为2worker被登记在这个文件中。而具体要如何进行登记,下面再具体说。

 

6行的作用就是配置apache对哪些请求进行转发。这里我按照网络上的教程,配置了对所有jsp页面的请求的转发。那么,当有jsp请求到达apache时,apache就会根据当时的负载情况,从worker中挑出负载低的那个worker,将这个jsp请求转发给他。(这里需要注意,当部署到tomcat上的项目有更多类型的请求的时候,需要在这里配置更多的请求规则)。而controller会在workers.peroperties中被配置。总的来说,转发规则的格式如下:

 

JkMount + 过滤请求类型 + 处理器

 

 

4)接着,我们conf目录下新建workers.properties内容如下:

 

worker.list = controller,tomcat1,tomcat2 #server 列表

#========tomcat1========

worker.tomcat1.port=8009 #ajp13 端口号,在tomcatserver.xml配置,默认8009

worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat1.type=ajp13 #定向包协议

worker.tomcat1.lbfactor = 1  #server的加权比重,值越高,分得的请求越多

worker.tomcat1.redirect = tomcat2

#========tomcat2========

worker.tomcat2.port=18009  #ajp13 端口号,在tomcatserver.xml配置,默认8009

worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat2.type=ajp13 #定向包协议

worker.tomcat2.lbfactor = 1  #server的加权比重,值越高,分得的请求越多

worker.tomcat2.redirect = tomcat1

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat

worker.controller.sticky_session=1

 

第一行,worker.list,列出了worker的列表。Tomcat1, tomcat2就是我们为2tomcat的命名。而controller相当于包工头。他负责对2个(或者更多)的worker进行负载分配。在上面提到的Mod_jk.conf文件中配置的对jsp请求的处理器就是controller.在这里再由controller具体将任务分配给某一个tomcat.

下面几行就是分别对worker的配置。Port, host等属性都需要根据tomcat的实际配置来填。

实际上,这里对tomcat还有一个属性可以进行配置,即worker.tomcat2.activation = disabled 。就是对某一个tomcat的活动性进行禁用。这句配置的意思是,负载均衡启动的时候,其实负载都到tomcat1上面去。Tomcat2默认不参与负载。当tomcat1当掉的时候,通过worker.tomcat1.redirect = tomcat2 ,tomcat2就会自己启动起来,接替tomcat1继续工作。当然,这样就和负载均衡没有关系了。

 

5)到此,对apache的配置基本告一段落。如果集群中有更多的tomcat的话,请在worker.properties中进行配置。(注:当有6tomcat进行集群的时候,为了提高性能, worker.properties中的 redirectactivation就可以起到作用。我们可以对tomcat两两配对,两两互相设置redirect,两个其中一个设置activation. 形成3对,这样,就可以处理意外宕机的情况,保证6台集群可以继续运行下去。)

 

 

4.   Tomcat集群配置

2tomcat分别解压后,分别打开apache-tomcat-6.0.26 \conf\server.xml文件。

 

(1)  修改端口:

2tomcat, 为了避免端口冲突,其中一个端口使用默认的,而另一个得修改。必须修改的端口如下

 

 

 


 

 

 

以上3个地方都在前面加上一个“1.就可以避免2tomcat端口冲突。(注:这是tomcat6需要修改的端口。其他版本的tomcat可能不止要修改这些端口。总之冲突的端口均需要修改)

 

 

(2)  修改集群设置:

<Engine><Host>元素下添加以下内容均可。

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">

                     <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="224.0.0.1"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="auto"

                      port="4001"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>

 

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>

               

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>

 

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

       </Cluster>

 

 

按照apache tomcat官方文档上面的说法,对于tomcat6要做集群的话,只需要将<Engine>元素下的

<!--

  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

-->

的注释符号去掉,启用这句配制就可以正常使用集群了。不过由于我搭建的测试环境2tomcat是在同一台机子上面,因此只启用这个<Cluster>的话,这个元素下的默认Receiver port就会冲突。因此必须补全这些配置。

另外,按照官方文档里说明的<Cluster>的默认配置,<Membership>元素下的address属性默认值为228.0.0.4 .  这个配置在我的系统上始终会出现2tomcat无法交换数据包的问题。需改成224.0.0.1才能正常使用。

需要而外注意的是2tomcat里添加到上面这段<Cluster>配置,其<Receiver>下的Port元素必需配置成不同的。如其中一个是4001,一个是4002.tomcat默认可以检测到40004100之间的端口)。

 

 

3修改<Engine>的属性。



 

 

2tomcat, jvmRoute分别配置成tomcat1tomcat2,即和apache/confworker.properites配置文件中配置的worker名称对应。

 

 

5.   Tlcom 集群配置:

 

(1)    修改tlcomweb.xml,添加 <Context distributable="true" />

 


 

 

所有需要集群的web项目,其web.xml中都必须添加<Context distributable="true" />

这个定义

 

(2)    tlcom分别部署到2tomcat中:

这里因为我沿用原来在tomcat上的开发方式,并不直接把项目放到tomcat/webapp目录下,而是通过rone.xmltlcom.xml两个配置文件放到apache-tomcat-6.0.26 A\conf\Catalina\localhost目录下

 

 


 

 

(3)    分别启动两个tomcat

可以在tomcat\bin目录下执行


 来启动,也可以通过在eclipse中先将server配置好(配置对应的2tomcat server),在eclipse中启动。

 

启动tomcat1:

 

和正常eclipse中启动一样,加载插件:

 

RONE初始化:

 

成功启动:

 

 


 

 

启动tomcat2:

启动过程和tomcat1一样,值得注意的是,在tomcat2启动的时候,tomcat1会打印出集群中加入member的提示:

 

 


 

(4)    启动apache.通过IP访问apache. 比如我的是  http://10.188.182.43 (这里80端口写不写是一样的)

你会发现可能RONE都登陆不了,或者登陆了页面都无法正常打开。原因在于我们一开始配置的Mod_jk.conf文件。文件末尾的请求转发。我们只转发了jsp页面的请求,就是说apache只会把jsp页面的请求转发到2tomcat上去。因此我们需要修改过滤的规则。我没有找到资料具体的各种规则应该怎么写,只能写一个大的过滤:

JkMount /* controller

JkMount /*.do controller

mod_jk.conf末尾改成上面这样。重启apache,你就可以看到RONE登陆界面了

 

(5)    测试:


 

我们进行一下传输配置的验证。可以看到tomcat2consol开始打印信息。那么这次操作负载均衡器就把请求发送到tomcat2上面去了。


 

验证完成


 

直接把tomcat2停止掉。可以在tomcat1的控制台中看到关于集群成员关闭的信息:

 

 


 

不要刷新页面,直接再次点击“全部验证”。可以看到,tomcat1上开始了验证业务。页面上没有出现异常,登陆用户的session也还在。业务处理透明地从tomcat2上转移到了tomcat1上去了。

 

 


 

 

 

 

6.   非本地访问apache

 我这里会出现本地可以正常通过http://10.188.182.43/rone/portal访问apache,而从别的PC无法访问的情况。经检查是windows防火墙的配置问题。当然,我们不能直接去禁用防火墙,只能为防火墙新建一条规则开放80端口在可信的网络域中。

分享到:
评论
4 楼 kalogen 2013-01-08  
估计部署在某个端口下吧,仔细检查一下发布的配置文件
3 楼 shitou_pengju 2012-12-30  
我把实际的项目部署到tomcat下之后,输入任何一个tomcat端口才可运行,直接输入http://localhost/newbbs(newbbs为项目名),包404错。不知道是哪里错了,请指教,呵呵
2 楼 zengzhiyuanlhl 2012-03-13  
1 楼 kalogen 2010-10-14  
apache服务器和tomcat服务器集群 workers.properties 之fail_on_status


workers.properties 文件内容:

worker.list=workers,lymTomcat,supportTomcat

worker.lymTomcat.type=ajp13
worker.lymTomcat.host=192.168.1.129
worker.lymTomcat.port=8007
worker.lymTomcat.lbfactor=100
worker.lymTomcat.fail_on_status=-500,-503,404

worker.supportTomcat.type=ajp13
worker.supportTomcat.host=192.168.1.129
worker.supportTomcat.port=8009
worker.supportTomcat.lbfactor=100
worker.supportTomcat.fail_on_status=500,503,-404

worker.workers.type = lb
worker.workers.balance_workers=lymTomcat,supportTomcat
worker.workers.sticky_session = true
worker.workers.sticky_session_force = false


这句话是很关键的“worker.supportTomcat.fail_on_status=500,503,404”,通过这句话控制了lymTomcat出现500、503或404错误时让客户访问另外一个tomcat服务器上的同一个项目。
注意在负载平衡下面的员工的worker.xxx.fail_on_status的值不能相同,如果lymTomcat的值为500,503,-404 则supportTomcat的值必须和他相反,如上面配置。

相关推荐

    实现基于nginx的tomcat负载均衡和集群配置

    本篇文章将详细讲解如何使用Nginx作为反向代理服务器来实现对Tomcat应用服务器的负载均衡和集群配置。 首先,我们需要理解Nginx和Tomcat的角色。Nginx是一款高性能的HTTP和反向代理服务器,常用于处理静态内容和...

    nginx+tomcat负载、集群简单搭建

    本文将详细介绍如何在Windows环境下进行Nginx+Tomcat负载均衡及集群的搭建过程,适合初学者参考。 #### 二、准备工作 1. **下载Nginx** - 访问官方下载页面:[http://nginx.org/en/download.html]...

    Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现

    本教程将探讨如何在Windows环境下,利用Nginx作为反向代理和负载均衡器,与Tomcat应用服务器配合,搭建一个负载均衡和集群环境。这种配置能够提升系统的稳定性和处理能力,确保即使在服务器压力大的情况下,也能为...

    Windows+Nginx+Tomcat搭建负载均衡和集群的tomcat压缩包

    本教程将探讨如何在Windows环境中利用Nginx作为反向代理服务器,与多个Tomcat实例配合,搭建一个负载均衡和集群的系统。这个压缩包包含多个版本的Tomcat,即qdky-tomcat-6.0.44.6、qdky-tomcat-6.0.44.5、qdks-...

    Tomcat负载均衡集群配置

    【标题】:“Tomcat负载均衡集群配置” 在Java Web应用开发中,Tomcat是一个广泛使用的开源Servlet容器。当面临高并发访问或者需要提高系统可用性和容错性时,单个Tomcat服务器可能无法满足需求,这时就需要搭建...

    Nginx+Tomcat高性能负载均衡集群搭建(模板).zip

    在构建高性能Web服务时,Nginx...综上所述,通过Nginx+Tomcat的架构,我们可以创建一个高效的负载均衡集群,提供高可用性、可扩展性和性能优化。在实际操作中,还需要根据具体业务需求和环境调整配置,以达到最佳效果。

    Linux下安装与配置基于nginx的tomcat负载均衡和集群(通过cookie分发请求)

    以上步骤概括了在Linux环境下使用Nginx搭建基于cookie的Tomcat负载均衡和集群的基本流程。实际操作中,还需要根据具体环境和应用需求进行微调,确保系统的高效和可靠性。记住,负载均衡不仅关乎硬件资源,更涉及软件...

    windows配置Tomcat_负载均衡_集群

    通过以上步骤,我们可以在Windows环境下成功配置出Tomcat集群及Apache的负载均衡功能,从而提高Web服务的可靠性和性能。这种配置尤其适用于高并发访问的场景,能够有效分散请求压力,提高系统的稳定性和用户体验。

    Nginx实现tomcat与weblogic集群的负载均衡及故障处理

    实现Tomcat负载均衡的步骤如下: 1. **配置Tomcat多实例**:首先,我们需要在一台服务器上部署多个Tomcat实例,确保每个实例使用不同的端口号以避免冲突。这可以通过复制Tomcat目录并修改`server.xml`文件中的端口...

    Linux平台Apache高可用双机集群Tomcat负载均衡集群配置手册[定义].pdf

    以上步骤详细介绍了如何在Linux环境下构建Apache双机高可用集群和Tomcat负载均衡集群。确保每一步都正确执行,以实现高可用性和负载均衡,提升Web服务的稳定性和效率。在实际操作过程中,可能需要根据实际情况对配置...

    Linux下Nginx+Memcached+Tomcat负载均衡集群服务搭建所需jar包

    总结,构建Linux下Nginx+Memcached+Tomcat的负载均衡集群服务,需要深入了解每个组件的工作原理,正确配置和整合这些组件,以实现高效、稳定的Web服务。同时,不断优化和调整集群策略,以适应业务的增长和变化。

    Tomcat集群和负载均衡.txt

    为了搭建Tomcat集群并实现负载均衡,我们需要准备以下环境: 1. **硬件资源**: - 4台服务器,其中1台安装Apache,另外3台安装Tomcat。 - 每台服务器的具体IP地址分别为:安装Apache的服务器IP为192.168.0.88;...

    Linux环境搭建 Apche+Tomcat 集群负载均衡

    本方案的目标是在Linux环境下构建一套基于Apache+Tomcat的负载均衡集群,该集群由一个Apache服务器和多个Tomcat服务器组成。Apache作为前端代理服务器,负责接收用户的HTTP请求,并根据请求类型将其转发给后端的...

    Nginx+Tomcat负载均衡配置教程

    ### Nginx+Tomcat负载均衡配置教程 #### 一、Nginx 安装与配置 **1. 下载并安装Nginx** - **下载Nginx**:前往Nginx官方网站下载适合您操作系统的最新版本。推荐下载稳定版以确保运行稳定。 - **解压文件**:将...

    Windows+Nginx+Tomcat搭建负载均衡和集群的nginx压缩包

    总的来说,通过Windows+Nginx+Tomcat搭建的负载均衡集群方案,可以提高服务的可用性和响应速度,同时降低单点故障的风险。不过,实际部署时,还应考虑SSL/TLS加密、安全配置、故障切换机制等更多细节,以提供更完善...

    搭建apache(静态资源)+tomcat(动态网页)负载均衡服务器集群.zip_tomcat分布式

    在搭建Apache和Tomcat的负载均衡集群时,有以下关键步骤: 1. **安装与配置Apache**:首先在各服务器节点上安装Apache HTTP服务器,然后进行必要的配置,包括设置虚拟主机,以及启用模块如mod_proxy、mod_proxy_...

    Tomcat+apache+mod_jk实现负载均衡和集群配置

    【负载均衡集群】是分布式系统中的一个重要概念,它旨在通过分散网络流量,使得多台服务器共同承担服务压力,提高系统的可用性和响应速度。在本文中,我们将深入探讨如何使用Apache Web服务器结合Tomcat应用服务器,...

Global site tag (gtag.js) - Google Analytics