Apache与Tomcat的完全分布式集群配置(负载均衡)

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

分类: Linux 90人阅读 评论(0) 收藏 举报

最近公司要给客户提供一套集群方案,项目组采用了Apache和Tomcat的集群配置,用于实现负载均衡的实现。

由于以前没有接触过Apache,因此有些手生,另外在网上搜寻了很多有关这方面的集群文章,但是没有一篇是可以从头到尾,配置可以成功的,或者是文件不全,解释不清等。

博主本人希望借这个机会,自己总结一份,用于分享使用。

本集群采用ajp的方式来实现,方法简单易懂。实际上对于这种集群的配置,无非就是把需要的软件等下载后,修改相应的配置文件,最后依次启动即可。

这里我把需要的应用软件和相应的配置文件贴出,大家可以对比自己的文件是否匹配。


事先说明下,本人做的是完全分布式集群,也就是真正的在不同的虚拟机上做的操作。并不是在同一台机器上做的,因此如果各位在同一台机器上做该操作的话,不建议采纳。

三台机器:

系统:CentOS 5.x

主节点:192.168.1.101

子节点1:192.168.1.151

子节点2:192.168.1.152


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)在文件的最后需要配置以下文本,用于控制集群的成员。


[html] view plain copy
  1. ProxyPass /images !  

  2. ProxyPass /css !  

  3. ProxyPass /js !  

  4. ProxyRequests Off  

  5. ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID

  6. ProxyPassReverse /test balancer://mycluster/ stickysession=JSESSIONID

  7. <Proxy balancer://mycluster>

  8.     BalancerMember ajp://192.168.1.152:8009/test/ loadfactor=1

  9.     BalancerMember ajp://192.168.1.151:8009/test/ loadfactor=1

  10. </Proxy>


该配置为Apache的反向代理,用于通过apache去访问tomcat项目。test为博主的项目Context,两个BalanceMember是集群中的成员。8009端口是tomcat的ajp端口名。

上述修正:昨天在进行试验的时候疏忽了这块,今天在公司试验的时候才发现。大家一定要注意下,BalancerMember一行中的route=worker1和route=worker2都不能加上,一旦加上的话,就不会通过apache的指定去进行分布的访问了,因此这里一定要去掉。否则的话,只会在一个tomcat容器中进行操作。


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

该文本需要添加在

[plain] view plain copy
  1. <IfModule ssl_module>  

  2. SSLRandomSeed startup builtin  

  3. SSLRandomSeed connect builtin  

  4. </IfModule>  

的上面。


3)最后还需要在


[html] view plain copy
  1. ProxyPass /images !  

  2. ProxyPass /css !  

  3. ProxyPass /js !  

的上面加入下面配置:



[plain] view plain copy
  1. <Location /server-status>  

  2.     SetHandler balancer-manager  

  3.     Order Deny,Allow  

  4.     Deny from all  

  5.     Allow from all  

  6. </Location>  

  7. <Location /balancer-manager>  

  8.     SetHandler balancer-manager  

  9.     Order Deny,Allow  

  10.     Deny from all  

  11.     Allow from all  

  12. </Location>  


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


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

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


3.Tomcat配置文件

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

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

[html] view plain copy
  1. <Enginename="Catalina"defaultHost="localhost"jvmRoute="worker2">

  2.      <!--For clustering, please take a look at documentation at:  

  3.          /docs/cluster-howto.html  (simple how to)  

  4.          /docs/config/cluster.html (reference documentation) -->

  5. <ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"

  6. channelSendOptions="8">

  7. <ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

  8. expireSessionsOnShutdown="false"

  9. notifyListenersOnReplication="true"/>

  10. <ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">

  11. <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

  12. address="228.0.0.4"

  13. port="45564"

  14. frequency="500"

  15. dropTime="3000"/>

  16. <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

  17. address="192.168.1.152"

  18. port="4000"

  19. autoBind="100"

  20. selectorTimeout="5000"

  21. maxThreads="6"/>

  22. <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

  23. <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

  24. </Sender>

  25. <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

  26. <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

  27. </Channel>

  28. <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/>

  29. <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

  30. <DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

  31. tempDir="/tmp/war-temp/"

  32. deployDir="/tmp/war-deploy/"

  33. watchDir="/tmp/war-listen/"

  34. watchEnabled="false"/>

  35. <ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

  36. <ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

  37. </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文件最后加入一段打印,如:


[plain] view plain copy
  1. <%  

  2.      system.out.println("==============");  

  3. %>  


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


你可能感兴趣的:(Apache与Tomcat的完全分布式集群配置(负载均衡))