Apache2.2.x+Tomcat6.x+jk2.x做集羣配置


【web開發】★☆之Apache2.2.x+Tomcat6.x+jk2.x做集羣


       在實際項目開發中,當訪問量過大,而客戶又不願意多花錢的情況下,爲保證項目的穩定性,使用開源免費的中間件做集羣是一個不錯的選擇。這就是我寫本博的初衷!


第一步:下載Apache http://httpd.apache.org/download.cgi#apache22如圖所示:

wKioL1NmIjKh_KLQAASiIf3TAUU178.jpg

現在官方給的最新版本就是2.4.9,但是因爲保證穩定性,我採用的是低一個的版本!


第二步:下載mod_jk這個動態庫是Apache的一個可選模塊,用來搭建JVAV 平臺的WEB 服務器時使用

下載地址:

http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/


wKiom1NmIsWBaB5MAASvFE6clLE375.jpg


這裏選擇的是mod_jk-1.2.31-httpd-2.2.3.so,如果http服務器是Apache2.0.X版本,則必須選擇mod_jk-1.2.31-httpd-2.0.52.so每個apache的版本,都會有一個特定的jk與之對應!OK?


第三步:安裝下載好的二進制文件:


安裝Apache也沒有什麼難度,就是在安裝過程中要配置域名、網址和管理員郵箱之類的信息,這個信息完全可以按照提示,然後修改下填入即可,之後想修改的話直接到配置文件中改就行了。除了這個地方,還要保證機器上的80端口沒有被其他程序(如iis)佔用。至於安裝路徑,完全取決於個人愛好。其他的默認就行了。安裝成功後,系統右下角的托盤區會有個圖標,我們可以通過這個啓動apache,如果那個小紅點變成綠色,說明服務已經正常啓動了(如果服務沒有啓動起來,說明安裝過程中的配置有錯誤,建議卸載後重裝)。如果按照默認,端口是80的話,那打開瀏覽器,輸入:http://localhost/ ,應該可以看到 " It works “的字樣。這樣就可以進入下一步了。如圖所示:

wKiom1NmI0GwddbNAAKNnv8vrjY796.jpg


瀏覽器效果如圖所示:

wKioL1NmI7GQeV9gAADGCv0kXLM405.jpg

第四步:現在是核心配置了

在安裝好的Apache中找到httpd.conf文件,如圖:

wKiom1NmI2iRVHFQAAJhAbno5sU301.jpg

在其最下面添加如下一行信息:


wKiom1NmI5GjWDx_AAB4yO8QEP4180.jpg

在conf文件夾中新建mod_jk.conf文件

配置如下:



wKiom1NmJA3y3K64AAE98lO7ds4360.jpg


找到modules文件夾,將下載好的mod_jk-1.2.31-httpd-2.2.3.so文件直接拷貝進去;這裏面有好多的xxx.so;如圖所示:


wKioL1NmJAHilsKBAARSZM-Q6a8619.jpg


conf文件夾中新建workers.properties文件夾,配置如下:


wKioL1NmJCni7vjBAAPJcVbHkdA894.jpg


注:我這裏就用了兩個Tomcat做示範,當然你用多個Tomcat也沒問題,相應的在本機上的port端口不一致,就行,遠程不用管,但是要把host配置成遠程IP地址,就行了!

下面我們就開始配置Tomcat裏面的server.xml文件了,裏面有三個端口,分別是Server,Connector,Connector AJP,這三個端口號都要不一致,在這裏就不敘述了下面可以下載server.xml文件例子。

 裏面兩個核心的配置如下:


wKioL1NmJHmRtqsSAAWqB8t7g3c788.jpg


注:一個是配置負載均衡,一個是配置session複製,保證整個服務器session值是一致的


配置到這裏:基本完成,下面,我們就編寫web項目進行測試:

在新建的web項目中,需要在web.xml文件中添加這條信息,distributable元素來告訴servlet/JSP容器,編寫的應用將在分佈式Web容器中部署!



wKiom1NmJMST9QlRAAMaOanwIek020.jpg


ok,編寫一個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.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>



現在將web應用部署到Tomcat1,Tomcat2中去,記住是加載之後的class文件,然後分別啓動tomcat1,Tomcat2,啓動順序無所謂,最後啓動Apache

在瀏覽器上輸入:http://127.0.0.1/test/test2.jsp如下圖:刷新,後臺訪問,Tomcat1,Tomcat2


wKiom1NmD33h0Ns8AACTGRDKlIk956.jpgwKioL1NmD6zAQRCjAACh0EfWFDc778.jpg


我們發現sessionID是沒有變化的,後臺Tomcat在進行訪問切換,


wKioL1NmECWTOiKvAAZkoY9zWjs527.jpg


我們繼續輸入數據看Tomcat打印的效果:


wKioL1NmJMeSK8XqAAF-XwgO3RI751.jpg

wKiom1NmENTBcpx-AASAYt9PqLU303.jpg





由此可見,我們的集羣最核心的session複製做成功了,保證多個tomcat的session是一致的,基本完成集羣配置,可以使用了,這也是我摸索而來,希望沒有誤導大家。


另外:爲什麼打印出來Server Info : null  也就是IP地址?這一點也是我鬱悶的地方,有朋友看出問題,也可以留言,咱們一起交流!


附,爲保證頁面的圖片大小統一,圖片經過處理,所以分辨率有些不正常!呵呵....


文件下載地址:

源碼,配置文件,Apache,jk,下載!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章