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地址之後,兩個節點的控制檯是交替打印的,則說明配置成功。

相關文章
相關標籤/搜索