Linux下Apache与Tomcat的彻底分布式集群配置(负载均衡)

三台机器:css

系统:CentOS 5.xhtml

主节点:192.168.1.101linux

子节点1:192.168.1.151web

子节点2:192.168.1.152apache

相关阅读:tomcat

Linux下Apache与多个Tomcat 集群负载均衡 http://www.linuxidc.com/Linux/2012-01/51731.htm session

Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htmapp

实例详解Tomcat组件安装+Nginx反向代理Tomcat+Apache使用mod_jk和mod_proxy反向代理和负载均衡 http://www.linuxidc.com/Linux/2013-06/85290.htm负载均衡

CentOS 6.3利用Apache来作集群实现负载均衡 http://www.linuxidc.com/Linux/2013-03/81623.htmdom

1. 须要用到的软件:(具体安装步骤无需描述)

 apache 2.2.25  安装在主节点上    /opt/apache2


apache-tomcat-6.0.37 安装在子节点1和子节点2上  /opt/apache-tomcat-6.0.37

 


2.配置文件

apache安装后,须要注意三个地方须要修改:

1)ServerName localhost:80  该localhost为本地主机名,该主机名为hosts文件所显示的名字,配置错误的话,会出现  httpd:Could not reliably determine.......错误。

2)在文件的最后须要配置如下文本,用于控制集群的成员。

ProxyPass /images !
ProxyPass /css !
ProxyPass /js !

ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID

ProxyPassReverse /test balancer://mycluster/ stickysession=JSESSIONID
<Proxy balancer://mycluster>
    BalancerMember ajp://192.168.1.152:8009/test/ route=worker1 loadfactor=1
    BalancerMember ajp://192.168.1.151:8009/test/ route=worker2 loadfactor=1
</Proxy>
SetHandler balancer-manager

该配置为Apache的反向代理,用于经过apache去访问tomcat项目。test为博主的项目Context,两个 BalanceMember是集群中的成员,分别是worker1和worker2。该名称须要与后面的tomcat的server.xml文件中的名称 相一致。8009端口是tomcat的ajp端口名。

最后的下面balancer-manager是用于查看负载均衡运行状况的路径配置。

该文本须要添加在

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

的上面。

3)最后还须要在

ProxyPass /images !
ProxyPass /css !
ProxyPass /js !

的上面加入下面配置:

<Location /server-status>
     SetHandler balancer-manager
     Order Deny,Allow
     Deny from all
     Allow from all
</Location>

<Location /balancer-manager>

     SetHandler balancer-manager
     Order Deny,Allow
     Deny from all
     Allow from all

</Location>

有的朋友在网上找到的文章,配置的都正确,可是最后发现服务均可以启动,而且能够访问,可是没有实现负载均衡的效果,只是在单个节点上运行。

本人也是遇到了这种问题,最后找了很长时间,才发现须要引入上面配置。

至此为止,apache的配置就完成了,下面进行tomcat的配置。

3.Tomcat配置文件

首先说一点,Tomcat也只是配置一个文件,就是server.xml。而且里面的端口无需改动,由于是在真正的分布式中来实现的。只须要修改一个地方,就是Engine节点。

在以前的Engine节点上,加入一个属性jvmRoute,值是刚才咱们提到的worker1或worker2,具体配置以下:

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

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
     
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
 channelSendOptions="8">
     
  <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.1.152"
                      port="4000"
                      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>

上面的配置是咱们提到的worker2的配置,是在子节点2上配置的,若是在子节点1上,则只须要将其改为worker1,另外还要把Receiver的address修改为当前所在机器的IP地址。

最后把所要操做的项目放到tomcat的webapp下,另外项目自己的web.xml文件中,须要引入<distributable/>元素。

至此为止,Tomcat的配置也完成了。

4.启动测试

启动的顺序在网上看到五花八门,本人本身测试是须要先启动Apache,而后依次启动Tomcat子节点。

测试的地址  http://192.168.1.101:80/test

测试查看的负载均衡状况地址   http://192.168.1.101:80/balancer-manager

测试方法:咱们能够在项目的index.jsp文件最后加入一段打印,如:

<%
      system.out.println("==============");
%>

这样的话,咱们开启两个tomcat的控制台去观察,若是在经过apache访问web地址之后,两个节点的控制台是交替打印的,则说明配置成功。

相关文章
相关标签/搜索