Tomcat5.5集群配置 |
---|
來源:不詳 (2006-07-10 17:49:51) |
網(wǎng)絡(luò)上有好多關(guān)于 Tomcat 集群配置的文章,但有些是以 Tomcat 4 為基礎(chǔ)的,有的并不是講的很清楚,自己摸索了半天,試驗成功了,現(xiàn)把簡要過程寫出來,讓你在幾分鐘內(nèi)體驗一下 Tomcat Cluster 。 一、配置環(huán)境 下載和安裝 JRE 1.5 最新版 (1.5.06) 下載和安裝 Tomcat 最新版 (5.5.12),假定安裝目錄為 C:\Program Files\Apache Software Foundation\Tomcat 5.5 二、使 Tomcat 集群配置生效 修改 Tomcat 安裝目錄\conf\server.xml ,把 Server/Service/Engine/Host 下的 Cluster 結(jié)點前后的注釋符(<!-- 和 -->)刪除,并保存 三、配置第二個 Tomcat 實例 在 C:\Program Files\Apache Software Foundation\ 下新建目錄 Tomcat 5.5 Instance1 將 C:\Program Files\Apache Software Foundation\Tomcat 5.5 目錄下的全部內(nèi)容復(fù)制到 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1 修改新實例的服務(wù)器配置文件 (C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\server.xml),把其中的 Server/Service/Connector 的端口更改,以避免和第一個沖突(8080 -> 9080,8009 -> 9009,8443 -> 9443) 修改 Cluster/Receiver 結(jié)點的 tcpListenPort 端口(此端口用于 Session 復(fù)制),以避免和第一個沖突(4001 -> 4002) 注:Tomcat Cluster 默認(rèn)使用多播來建立成員關(guān)系,即兩個實例的多播的地址和端口一樣,就可以互相認(rèn)為是同一個 Cluster 的成員。 四、啟動驗證兩個 Tomcat 實例能否正常工作 直接用程序菜單里的 Monitor Tomcat 來啟動第一個實例(或在服務(wù)器里啟動) 第二個實例啟動稍微麻煩一些,在 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\Bin 下建一個 startup.bat ,用如下 java 命令來啟動: "C:\Program Files\Java\j實re1.5.0_06\bin\java.exe" -jar .\bootstrap.jar -Dcatalina.home="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Dcatalina.base="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\endorsed" -Djava.io.tmpdir="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\temp" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\logging.properties" start 看起來挺長,其實主要是第二個實例的安裝目錄太長的緣故,直接執(zhí)行此批處理就可以啟動第二個實例,如果配置正確,應(yīng)該可以看到集群管理器啟動,并和第一個實例 建立成員關(guān)系的信息。 五、寫一個簡單Web應(yīng)用,能顯示和設(shè)置 Session 屬性值,以供測試 如果有開發(fā)工具,新建一個 Web App ,假設(shè)為 TomcatDemo 新增 index.jsp ,加入如下代碼: <%@ page contentType="text/html; charset=UTF-8" import="java.util.*"%> <html><head><title>Cluster App Test</title></head> <body> Server Info: <%out.print(request.getLocalAddr() + " : " + request.getLocalPort());%> <% out.println("<br> ID " + session.getId()); // 如果有新的 Session 屬性設(shè)置 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); } %> <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> 以上代碼主要是顯示服務(wù)器信息和 Session 值,并包含一個 Form ,可以隨時新建一個 Session 屬性值 修改此用應(yīng)用的 Web.xml ,加入 distributable 屬性,表示 Tomcat 要為此 Web 應(yīng)用復(fù)制 Session <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> 將應(yīng)用打包成 WAR 文件,分別上現(xiàn)兩個實例的 Tomcat Manager 來部署 (如果沒有 Java 開發(fā)工具,可以直接建立一個 TomcatDemo 的目錄,用 Notepad 將如上的內(nèi)容復(fù)制并保存成 index.jsp,然后在此目錄下新建子目錄 WEB-INF,再用 Notepad 新建一 Web.xml 文件,將上面的代碼復(fù)制保存,然后將此目錄壓縮成 Zip 文件,再把后綴改成 .war ,或利用 jar 命令來創(chuàng)建 .war 文件) 六、測試 Tomcat 集群和 Session 復(fù)制的是否工作 在 IE 中打開第一個實例中的 TomcatDemo (http://localhost:8080/TomcatDemo),在 Form 里隨便設(shè)置一個 Session 屬性,如 MyName = foo 將 IE 地址欄中的地址修改為第二個實例中的 TomcatDemo(http://localhost:9080/TomcatDemo),刷新,就可以看到注意到 SessionID 不變, MyName 的屬性值已有了 同樣,如果在第二實例中設(shè)置的值,在第一個實例的頁面中也能看到 注意:必須在同一個 IE 窗口中進行如上測試,以保證是同一個 Session ,如果是兩個窗口,則 Session 可能不同,也互相看不到 Session 復(fù)制的結(jié)果。 七、其它工作 上述只實現(xiàn)了 Session 復(fù)制,而沒有實現(xiàn) Load Balance(負(fù)載均衡),這可以利用 Apache 等來實現(xiàn),網(wǎng)上有很多相關(guān)文章,可能參考) (http://www.fanqiang.com) |