Apache+Tomcat部署負載均衡(或集羣)

原本只打算寫Tomcat集羣部署,簡化Apache和Tomcat整合過程的。後來想了想,這樣不便於沒有用過Apache的朋友來學習本文內容。因而乾脆加大篇幅,讓對Apache不瞭解的朋友能對Apache有個初步的認識,阿帕奇。javascript

若是對集羣概念不瞭解,能夠看一下以前寫的一篇:WebLogic部署集羣和代理服務器 這篇對集羣的概念解釋的比較細緻,與weblogic集羣的不一樣之處在於,它對各個子服務器上應用的部署,是由weblogic容器自動完成的。而tomcat則須要手動去拷貝項目。css

 

1、負載均衡網絡拓撲圖。html

 

1、Apache服務器的安裝及配置。java

1.先網上下載Apache服務器安裝版,雙擊安裝,直接下一步下一步不須要作任何配置。web

2.安裝好之後打開安裝目錄,找到conf目錄打開spring

 

1.手動建立兩個文件apache

 

mod_jk.conf
#================從這裏複製================
#加載mod_jk Module   注意文件名根據實際狀況而填
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so


#指定 workers.properties文件路徑
JkWorkersFile conf/workers.properties

#指定那些請求交給tomcat處理,"controller"爲在workers.propertise裏指定的負載分配控制器   
JkMount /*.do controller
JkMount /*WEB-INF controller
JkMount /*j_spring_security_check controller
JkMount /*.action controller
JkMount /servlet/* controller
JkMount /*.jsp controller
JkMount /*.do controller
JkMount /*.action controller
JkMount /* controller
#================文件內容================

 

 

workers.properties

#================從這裏複製================
#server 列表
worker.list = controller,tomcat1,tomcat2

#========tomcat1========
worker.tomcat1.port=9101
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1

#========tomcat2========
worker.tomcat2.port=9102
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1

#========controller,負載均衡控制器======== 
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=0
#================到這裏截止================

 

2.修改httpd.conf文件內容tomcat

打開httpd.conf文件,最後一行加上:Include conf/mod_jk.conf服務器

Apache默認端口是80,若是須要改端口直接找到該文件下Listen 80字段,把這個80改掉就能夠了。網絡

3.添加mod_jk-1.2.31-httpd-2.2.3.so插件

下載mod_jk-1.2.31-httpd-2.2.3.so文件添加到modules文件夾下。這個so文件是配置負載均衡必需要用到的插件。

 

配到這裏Apache這塊就不用去動了。

 

 

3、Tomcat服務器的安裝及配置。

1.下載tomcat後直接解壓獲得。

2.打開conf文件夾下的server.xml文件修改如下內容保證兩臺tomcat的相應端口不衝突:

第一處:port

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

 

第二處:portredirectPort  注意編碼格式需設置成gbk,不然存在亂碼問題

<Connector port="9001" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="9441" 

   URIEncoding="GBK"/>

 

 

 

 

第三處:port對應Apache配置文件中配置的portredirectPort,注意編碼

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

替換成:

<Connector port="9101" protocol="AJP/1.3" redirectPort="9441"
    URIEncoding="GBK
    minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
    acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
    useURIValidationHack="false" ompression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

/>

 

 

 

第四處:jvmRoute對應Apache配置文件中配置的tomcat

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

 

 

第五處:只改藍色標記的port

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">下面添加如下字段:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
                  channelSendOptions="6"> 
              <Manager className="org.apache.catalina.ha.session.BackupManager" 
                    expireSessionsOnShutdown="false" 
                    notifyListenersOnReplication="true" 
                    mapSendOptions="6"/> 
           <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
            <Membership className="org.apache.catalina.tribes.membership.McastService" 
                         bind="127.0.0.1" 
                         address="228.0.0.4" 
                         port="45564" 
                         frequency="500" 
                         dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" selectorTimeout="100" maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/> </Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>

 

 

4、應用部署及運行

1.將項目拷貝到全部tomcat下的webapps文件夾下。

2.找到tomcat服務器bin目錄下的startup.bat文件,雙擊啓動tomcat

3.啓動完全部tomcat以後啓動Apache:直接點擊圖標啓動

 

 

 

5、session複製

打開項目中WEB-INF文件夾下的web.xml文件,倒數第二行加入<distributable/>

 

 

5、測試頁

建立如下文件放到項目中,用於測試負載均衡和session複製

文件名:Test.jsp

 1 <%@ page contentType="text/html; charset=GBK" %>
 2 <%@ page import="java.util.*" %>   
 3 <html><head><title>Cluster App Test</title></head>   
 4 <body>   
 5 
 6 <%     
 7    System.out.println("SessionID:"  + session.getId());    
 8 %>   
 9 
10 Server Info:    
11 
12 <%    
13 out.println(request.getServerName() + " : " + request.getServerPort()+"<br>");%>   
14 
15 <%    
16   out.println("<br> ID " + session.getId()+"<br>");  // 若是有新的 Session 屬性設置    
17 
18   String dataName = request.getParameter("dataName");    
19 
20   if (dataName != null && dataName.length() > 0) {    
21      String dataValue = request.getParameter("dataValue");    
22      session.setAttribute(dataName, dataValue);    
23   }    
24 
25   out.print("<b>Session 列表</b><br>");      
26   Enumeration e = session.getAttributeNames();    
27 
28   while (e.hasMoreElements()) {    
29      String name = (String)e.nextElement();    
30      String value = session.getAttribute(name).toString();    
31      out.println( name + " = " + value+"<br>");    
32      System.out.println( name + " = " + value);    
33    }    
34 %>   
35 
36   <form action="test.jsp" method="POST">   
37     名稱:<input type=text size=20 name="dataName">   
38      <br>   
39     數值:<input type=text size=20 name="dataValue">   
40      <br>   
41     <input type=submit>   
42    </form>   
43 </body>   
44 </html> 

 

這是Apache+Tomcat部署負載均衡(或集羣),若是有在同一臺電腦上部署多組集羣的需求的話,還須要在配置上作一些改動。能夠參考個人另外一篇文章:同臺電腦部署多組Tomcat負載均衡(或集羣)

相關文章
相關標籤/搜索