Web開(kāi)發(fā):Apache2.2.x+Tomcat6.x+jk2.x做集群配置
在實(shí)際項(xiàng)目開(kāi)發(fā)中,當(dāng)訪問(wèn)量過(guò)大,而客戶又不愿意多花錢的情況下,為保證項(xiàng)目的穩(wěn)定性,使用開(kāi)源免費(fèi)的中間件做集群是一個(gè)不錯(cuò)的選擇。這就是我寫(xiě)本博的初衷!
第一步:下載Apache 》http://httpd.apache.org/download.cgi#apache22如圖所示:
現(xiàn)在官方給的最新版本就是2.4.9,但是因?yàn)楸WC穩(wěn)定性,我采用的是低一個(gè)的版本!
第二步:下載mod_jk(這個(gè)動(dòng)態(tài)庫(kù)是Apache的一個(gè)可選模塊,用來(lái)搭建JVAV 平臺(tái)的WEB 服務(wù)器時(shí)使用)
下載地址:
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/
這里選擇的是mod_jk-1.2.31-httpd-2.2.3.so,如果http服務(wù)器是Apache2.0.X版本,則必須選擇mod_jk-1.2.31-httpd-2.0.52.so,每個(gè)apache的版本,都會(huì)有一個(gè)特定的jk與之對(duì)應(yīng)!OK?
第三步:安裝下載好的二進(jìn)制文件:
安裝Apache也沒(méi)有什么難度,就是在安裝過(guò)程中要配置域名、網(wǎng)址和管理員郵箱之類的信息,這個(gè)信息完全可以按照提示,然后修改下填入即可,之后想修改的話直接到配置文件中改就行了。除了這個(gè)地方,還要保證機(jī)器上的80端口沒(méi)有被其他程序(如iis)占用。至于安裝路徑,完全取決于個(gè)人愛(ài)好。其他的默認(rèn)就行了。安裝成功后,系統(tǒng)右下角的托盤區(qū)會(huì)有個(gè)圖標(biāo),我們可以通過(guò)這個(gè)啟動(dòng)apache,如果那個(gè)小紅點(diǎn)變成綠色,說(shuō)明服務(wù)已經(jīng)正常啟動(dòng)了(如果服務(wù)沒(méi)有啟動(dòng)起來(lái),說(shuō)明安裝過(guò)程中的配置有錯(cuò)誤,建議卸載后重裝)。如果按照默認(rèn),端口是80的話,那打開(kāi)瀏覽器,輸入:http://localhost/ ,應(yīng)該可以看到 " It works “的字樣。這樣就可以進(jìn)入下一步了。如圖所示:
瀏覽器效果如圖所示:
#p#
第四步:現(xiàn)在是核心配置了
在安裝好的Apache中找到httpd.conf文件,如圖:
在其最下面添加如下一行信息:
在conf文件夾中新建mod_jk.conf文件夾
配置如下:
找到modules文件夾,將下載好的mod_jk-1.2.31-httpd-2.2.3.so文件直接拷貝進(jìn)去;這里面有好多的xxx.so;如圖所示:
在conf文件夾中新建workers.properties文件夾,配置如下:
注:我這里就用了兩個(gè)Tomcat做示范,當(dāng)然你用多個(gè)Tomcat也沒(méi)問(wèn)題,相應(yīng)的在本機(jī)上的port端口不一致,就行,遠(yuǎn)程不用管,但是要把host配置成遠(yuǎn)程IP地址,就行了!
下面我們就開(kāi)始配置Tomcat里面的server.xml文件了,里面有三個(gè)端口,分別是Server,Connector,Connector AJP,這三個(gè)端口號(hào)都要不一致,在這里就不敘述了下面可以下載server.xml文件例子。
里面兩個(gè)核心的配置如下:
注:一個(gè)是配置負(fù)載均衡,一個(gè)是配置session復(fù)制,保證整個(gè)服務(wù)器session值是一致的
配置到這里:基本完成,下面,我們就編寫(xiě)web項(xiàng)目進(jìn)行測(cè)試:
在新建的web項(xiàng)目中,需要在web.xml文件中添加這條信息,distributable元素來(lái)告訴servlet/JSP容器,編寫(xiě)的應(yīng)用將在分布式Web容器中部署!
ok,編寫(xiě)一個(gè)jsp進(jìn)行測(cè)試了,網(wǎng)上大部分都是這樣測(cè)試的,我這里也用這種方法測(cè)試:
- <%@ 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 屬性設(shè)置
- String dataName = request.getParameter("dataName");
- if (dataName != null && dataName.length() > 0) {
- String dataValue = request.getParameter("dataValue");
- session.setAttribute(dataName, dataValue);
- }
- out.println("<b>Session 列表</b><br>");
- System.out.println("============================");
- 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="test2.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>
現(xiàn)在將web應(yīng)用部署到Tomcat1,Tomcat2中去,記住是加載之后的class文件,然后分別啟動(dòng)tomcat1,Tomcat2,啟動(dòng)順序無(wú)所謂,最后啟動(dòng)Apache
在瀏覽器上輸入:http://127.0.0.1/test/test2.jsp如下圖:刷新,后臺(tái)訪問(wèn),Tomcat1,Tomcat2
我們發(fā)現(xiàn)sessionID是沒(méi)有變化的,后臺(tái)Tomcat在進(jìn)行訪問(wèn)切換,
我們繼續(xù)輸入數(shù)據(jù)看Tomcat打印的效果:
由此可見(jiàn),我們的集群最核心的session復(fù)制做成功了,保證多個(gè)tomcat的session是一致的,基本完成集群配置,可以使用了,這也是我摸索而來(lái),希望沒(méi)有誤導(dǎo)大家。
另外:為什么打印出來(lái)Server Info : null 也就是IP地址?這一點(diǎn)也是我郁悶的地方,有朋友看出問(wèn)題,也可以留言,咱們一起交流!
附,為保證頁(yè)面的圖片大小統(tǒng)一,圖片經(jīng)過(guò)處理,所以分辨率有些不正常!呵呵....
文件下載地址: