wczwcg  
曾经沧海难为水
公告
  • 今天你开源了吗?

日历
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
统计
  • 随笔 - 0
  • 文章 - 5
  • 评论 - 0
  • 引用 - 0

导航

留言簿

随笔分类

文章分类(5)

文章档案(5)

搜索

  •  

最新评论

 

Tomcat的集群加Apache的负载均衡可以通过两种方式实现。第一种:通过mod_jk动态模块;第二种:通过mod_proxy

 一、通过mod_jk实现

 1. 环境准备

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

   Tomcat 5.5   http://tomcat.apache.org/download-55.cgi

   mod_jk  http://tomcat.apache.org/connectors-doc/

 2. 配置tomcat

    可以是一台机器多个tomcat实例,也可以是多个机器,每台机器一个实例。具体根据机器的性能进行规划。下面以同一机器两个实例为例。

修改每个实例的server.xml

     实例一:

      <Server port="8006" shutdown="SHUTDOWN">

      ...

      <Connector port="8081" maxHttpHeaderSize="8192"

              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

              enableLookups="false" redirectPort="8443" acceptCount="100"

              connectionTimeout="20000" disableUploadTimeout="true" />

      ...

      <Connector port="8010" 

               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

      ...

      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

      ...

      <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"

                 expireSessionsOnShutdown="false"

                 useDirtyFlag="true"

                 notifyListenersOnReplication="true">

            <Membership 

                className="org.apache.catalina.cluster.mcast.McastService"

                mcastAddr="228.0.0.4"  --广播地址,必须相同

                mcastPort="45564"

                mcastFrequency="500"

                mcastDropTime="3000"/>

            <Receiver 

                className="org.apache.catalina.cluster.tcp.ReplicationListener"

                tcpListenAddress="auto"

                tcpListenPort="4001" --监听端口,每个实例必须不同。

                tcpSelectorTimeout="100"

                tcpThreadCount="6"/>

            <Sender

                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"

                replicationMode="pooled"

                ackTimeout="15000"/>

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

                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

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

                      tempDir="/tmp/war-temp/"

                      deployDir="/tmp/war-deploy/"

                      watchDir="/tmp/war-listen/"

                      watchEnabled="false"/>

             <ClusterListener     

                  className="org.apache.catalina.cluster.session.ClusterSessionListener"/>

     </Cluster>

     实例二:

     <Server port="8005" shutdown="SHUTDOWN">

     ...

     <Connector port="8080" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               connectionTimeout="20000" disableUploadTimeout="true" />

     ...

     <Connector port="8009" 

               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

     ...

     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

     ...

     <!-- Include follows if cluster is needed. -->

     <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"

                 expireSessionsOnShutdown="false"

                 useDirtyFlag="true"

                 notifyListenersOnReplication="true">

            <Membership 

                className="org.apache.catalina.cluster.mcast.McastService"

                mcastAddr="228.0.0.4"

                mcastPort="45564"

                mcastFrequency="500"

                mcastDropTime="3000"/>

            <Receiver 

                className="org.apache.catalina.cluster.tcp.ReplicationListener"

                tcpListenAddress="auto"

                tcpListenPort="4002"

                tcpSelectorTimeout="100"

                tcpThreadCount="6"/>

            <Sender

                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"

                replicationMode="pooled"

                ackTimeout="15000"/>

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

                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

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

                      tempDir="/tmp/war-temp/"

                      deployDir="/tmp/war-deploy/"

                      watchDir="/tmp/war-listen/"

                      watchEnabled="false"/>

            <ClusterListener 

                className="org.apache.catalina.cluster.session.ClusterSessionListener"/>

        </Cluster>

   2. 配置Apache

      将下载的mod_jk.so复制到Apache安装目录的modules下。修改httpd.conf文件,增加如下部分:

       #load mod_jk

       LoadModule jk_module modules/mod_jk.so

       #config mod_jk

       JkWorkersFile conf/workers.properties

       JkLogFile logs/mod_jk.log

       JkLogLevel info

     Apacheconfig目录下,新建workers.properties文件,内容如下:

        worker.list=loadbalancer,mystatus

        #first tomcat

        worker.tomcat1.port=8009

        worker.tomcat1.host=localhost

        worker.tomcat1.type=ajp13

        worker.tomcat1.lbfactor=1

        #second tomcat

        worker.tomcat2.port=8010

        worker.tomcat2.host=localhost

        worker.tomcat2.type=ajp13

        worker.tomcat2.lbfactor=1

        #balance worker

        worker.loadbalancer.type=lb

        worker.loadbalancer.balance_workers=tomcat1,tomcat2

        worker.loadbalancer.sticky_session=1

        #balance status

        worker.mystatus.type=status

        worker.mystatus.mount=/user/status/jk

    4. 修改Web Applicationweb.xml文件

       web.xml文件中,增加<distributable />

    5. 启动tomcatApache

       启动后,通过http://localhost/你的应用程序路径,进行访问。

    6. 查看负载均衡状态

       可以通过访问http://localhost/status查看负载均衡相关信息,包括每个服务器的状态。

    7. 其他事项

       可以通过Apache下的logs\error.log文件和logs\mod_jk.log文件查看错误信息,

 二、通过mod_proxy实现

    1. 环境准备

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

   Tomcat 5.5   http://tomcat.apache.org/download-55.cgi

   mod_proxy   apache安装完自带

    2. 配置Tomcat

      配置方法与mod_jk下相同。

    3. 配置Apache

       修改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_http_module modules/mod_proxy_http.so

       ProxyPass / balancer://tomcatcluster/

       <Proxy balancer://tomcatcluster>

          BalancerMember ajp://127.0.0.1:8009 route=tomcat1/

         BalancerMember ajp://127.0.0.1:8010 route=tomcat2/

       </Proxy>

       <!-- balancer manager console -->

       <Location /balancer-manager>

           SetHandler balancer-manager

       </Location>

    4. 修改Web Applicationweb.xml文件

       web.xml文件中,增加<distributable />

    5. 启动tomcatapache

       启动后,通过http://localhost/你的应用程序路径,进行访问。

    6. 查看负载均衡状态

       可以通过访问http://localhost/balancer-manager查看负载均衡相关信息,包括每个服务器的状态。

    7. 其他事项

       可以通过Apache下的logs\error.log文件查看错误信息。

posted on 2009-11-03 22:40 wczwcg 阅读(253) 评论(0)  编辑  收藏 所属分类: java
 
Copyright © wczwcg Powered by: 博客园 模板提供:沪江博客