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