原本只打算寫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">
第二處:port、redirectPort 注意編碼格式需設置成gbk,不然存在亂碼問題
<Connector port="9001" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9441"
URIEncoding="GBK"/>
第三處:port對應Apache配置文件中配置的port、redirectPort,注意編碼
<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負載均衡(或集羣)