(一)環境說明 (1)服務器有4臺,一臺安裝apache,三臺安裝tomcat (2)apache2.0.5五、tomcat5.5.1五、jk2.0.四、jdk1.5.6或jdk1.4.2 (3)ip配置,一臺安裝apache的ip爲192.168.0.88,三臺安裝tomcat的服務器ip分別爲192.168.0.1/2/4 (二)安裝過程 (1)在三臺要安裝tomcat的服務器上先安裝jdk (2)配置jdk的安裝路徑,在環境變量path中加入jdk的bin路徑,新建環境變量JAVA_HOME指向jdk的安裝路徑 (3)在三臺要安裝tomcat的服務器上分別安裝tomcat,調試三個tomcat到可以正常啓動 (4)tomcat的默認WEB服務端口是8080,默認的模式是單獨服務,個人三個tomcat的WEB服務端口修改成7080/8888/9999 修改位置爲tomcat的安裝目錄下的conf/server.xml 修改前的配置爲 <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 修改後的配置爲 <Connector port="7080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 依次修改每一個tomcat的監聽端口(7080/8888/9999) (5)分別測試每一個tomcat的啓動是否正常 http://192.168.0.1:7080 http://192.168.0.2:8888 http://192.168.0.4:9999 (三)負載均衡配置過程 (1)在那臺要安裝apache的服務器上安裝apache2.0.55,個人安裝路徑爲默認C:\Program Files\Apache Group\Apache2 (2)安裝後測試apache可否正常啓動,調試到可以正常啓動http://192.168.0.88 (3)下載jk2.0.4後解壓縮文件 (4)將解壓縮後的目錄中的modules目錄中的mod_jk2.so文件複製到apache的安裝目錄下的modules目錄中,個人爲C:\Program Files\Apache Group\Apache2\modules (5)修改apache的安裝目錄中的conf目錄的配置文件httpd.conf,在文件中加LoadModule模塊配置信息的最後加上一句LoadModule jk2_module modules/mod_jk2.so (6)分別修改三個tomcat的配置文件conf/server.xml,修改內容以下 修改前 <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"> --> <!-- Define the top level container in our container hierarchy --> <Engine name="Catalina" defaultHost="localhost"> 修改後 <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). --> <!-- You should set jvmRoute to support load-balancing via AJP ie :--> <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1"> <!-- Define the top level container in our container hierarchy <Engine name="Catalina" defaultHost="localhost"> --> 將其中的jvmRoute="jvm1"分別修改成jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3" (7)而後重啓三個tomcat,調試可以正常啓動。 (8)在apache的安裝目錄中的conf目錄下建立文件workers2.propertie,寫入文件內容以下 # fine the communication channel [channel.socket:192.168.0.1:8009] info=Ajp13 forwarding over socket #配置第一個服務器 tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名稱一致 debug=0 lb_factor=1 #負載平衡因子,數字越大請求被分配的概率越高 # Define the communication channel [channel.socket:192.168.0.2:8009] info=Ajp13 forwarding over socket tomcatId=tomcat2 debug=0 lb_factor=1 # Define the communication channel [channel.socket:192.168.0.4:8009] info=Ajp13 forwarding over socket tomcatId=tomcat3 debug=0 lb_factor=1 [status:] info=Status worker, displays runtime information. [uri:/jkstatus.jsp] info=Display status information and checks the config file for changes. group=status: [uri:/*] info=Map the whole webapp debug=0 (9)在三個tomcat的安裝目錄中的webapps創建相同的應用,我和應用目錄名爲TomcatDemo,在三個應用目錄中創建相同 WEB-INF目錄和頁面index.jsp,index.jsp的頁面內容以下 <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); // 若是有新的 Session 屬性設置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("<b>Session 列表</b>"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="index.jsp" method="POST"> 名稱:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html> (10)重啓apache服務器和三個tomcat服務器,到此負載 均衡已配置完成。測試負載均衡先測試apache,訪問http://192.168.0.88/jkstatus.jsp 可否正常訪問,並查詢其中的內容,有三個tomcat的相關配置信息和負載說明,訪問http://192.168.0.88/TomcatDemo/index.jsp看可以運行, 能運行,則已創建負載均衡。 (四)tomcat集羣配置 (1)負載均衡配置的條件下配置tomcat集羣 (2)分別修改三個tomcat的配置文件conf/server.xml,修改內容以下 修改前 <!-- <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled" ackTimeout="5000"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> </Cluster> --> 修改後 <!-- modify by whh --> <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled" ackTimeout="5000"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> </Cluster> <!-- modify by whh --> 將集羣配置選項的註釋放開便可,如上。 (3)重啓三個tomcat。到此tomcat的集羣已配置完成。 (五)應用配置 對於要進行負載和集羣的的tomcat目錄下的webapps中的應用中的WEB-INF中的web.xml文件要添加以下一句配置 <distributable/> 配置前 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>TomcatDemo</display-name> </web-app> 配置後 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>TomcatDemo</display-name> <distributable/> </web-app> tomcat集羣和負載均衡的實現(session同步)補充 由於tomcat的session同步功能須要用到組播,windows默認狀況下是開通組播服務的,可是linux默認狀況下並無開通,能夠經過指令打開route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,若是須要服務器啓動時即開通組播需在/etc/sysconfig/static-routes文件內加入eht0 net 224.0.0.0 netmask 240.0.0.0。具體組播概念請查閱CCNP相關內容。