Apache和Tomcat集羣配置

最近在弄服務器,剛開始只是裝載了tomcat,通過域名配置,端口設置,通過主域名訪問,完全沒有問題,但是之後想將2級域名配置的靈活一些,想到用Apache來做。其實配置Apache和Tomcat非常簡單,先要明白他倆之間的關係是關鍵:

  apache:側重於http server  tomcat:側重於servlet引擎,如果以standalone方式運行,功能上與apache等效 , 支持JSP,但對靜態網頁不太理想;  apache是web服務器,tomcat是應用(java)服務器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認爲是apache的擴展,但是可以獨立於apache運行。  換句話說,apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),而這個桶也可以不放在卡車上。

   這個比喻已經非常深刻和形象了,我想你該明白了。

--------------------------------------begin---------------------------------

下面我就將配置的步驟下下來:

準備工作

1、 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
下載地址:
http://apache.etoak.com//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

2、 apache-tomcat-6.0.20.zip(免安裝版-綠色版)
下載地址:
http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip

3、 jdk1.6.0_18
下載地址:
如果只是應用的話,也可以選擇安裝JRE,因爲JRE比較小:)

4   JK:mod_jk-apache-2.2.2.so
下載地址:
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.18/mod_jk-apache-2.2.2.so
注意JK的版本一定要與Apache版本相同。如果你的版本與我的不同,可以去官網下載,有多種版本,適用於各種操作系統,下載適用的既可

 

開始安裝:

  1. 安裝JDK:安裝JDK和配置環境變量,我就不在這多囉嗦了,一開始拿到機器你就應該安裝好了吧。
  2. 安裝Apache:安裝之前,你先要查看一下本機器中的端口情況,如果有佔用80端口的進程,需要關了,因爲Apache要安裝在80端口上,默認訪問,除非你設置到別的端口。安裝好之後,apache會自動啓動,然後你訪問:http://localhost,就可以訪問到apache,頁面:It works!
  3. 安裝Tomcat:其實你可以用綠色版的,不需要特別安裝,關機是配置,最好目錄放在Apache下:比如我的Apache的目錄是:E:\Apache\Apache2.2;而tomcat的位置是:E:\Apache\tomcat\1-apache-tomcat-6.0.35;E:\Apache\tomcat\2-apache-tomcat-6.0.35;這兩個tomcat。
  4. 配置過程:
    1. 修改httpd.conf

      我的Apache安裝在E:\Apache\Apache2.2,找到conf目錄下的httpd.conf,在文件的最後一行添加

      include "E:\Apache\Apache2.2\conf\mod_jk.conf"

    2. 新建mod_jk.conf文件,內容如下:

      1.  

        LoadModule jk_module modules/mod_jk-apache-2.2.2.so
        
        JkWorkersFile conf/workers.properties
        
        #指定那些請求交給tomcat處理,"controller"爲在workers.properties裏指定的負載分配控制器名
        
        JkMount /*.jsp controller
        

    3. 將下載的JK插件mod_jk-apache-2.2.2.so複製到Apache安裝目錄的modules目錄下。
    4. 新建並編輯workers.properties文件,內容如下:
      1. #server 
        
        worker.list = controller 
        
        #========tomcat1======== 
        
        worker.tomcat1.port=8009 
        
        worker.tomcat1.host=localhost 
        
        worker.tomcat1.type=ajp13 
        
        worker.tomcat1.lbfactor = 1 
        
        #========tomcat2======== 
        
        worker.tomcat2.port=8010 
        
        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=false
        
        worker.controller.sticky_session_force=1
        
        #worker.controller.sticky_session=1 
      2. 這裏可以配置任意多個Tomcat2個本地,還可以配置遠程的:
      3. #========tomcat3======== 
        
        worker.tomcat3.port=13009 
        
        worker.tomcat3.host=192.168.0.80
        
        worker.tomcat3.type=ajp13 
        
        worker.tomcat3.lbfactor = 1 
        

        遠程的這個我沒有試,應該是可以的。

配置Tomcat

  1. 要注意的是:tomcat只是8080端口要改,因爲是兩個tomcat,他們的8009端口,還有8005端口需要有區別,第一個是8009,第二個就是8010,下面就3、4就是具體說明:
  2. AJP13的connector的poat和jvmRoute名稱和workers.properties中配置對應。

  3.  

    由於截圖面積有限,還需要保證本地2個本地Tomcat配置server的port,connector爲http1.1的port都不相同。

測試

建立測試項目

建立test項目,需要在項目的web.xml中添加<distributable/>

建立test2.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>

 

這時候,別啓動Apache3Tocmat服務器,這些Tomcat啓動順序隨意,如果有問題,比如:Apache啓動不起來,那你就用cmd來啓動Apache。如:

E:\Apache_Test\Apache2.2\bin>httpd.exe

Syntax error on line 487 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not i
ncluded in the server configuration

 

這個是說:我487行的地址重寫有問題:

RewriteEngine on 這個出錯了

解決方案:在httpd.conf 中,也就是在該文件中查詢:“rewrite_module”這個,發現這個:“#LoadModule rewrite_module modules/mod_rewrite.so”已經被註釋了,將該註釋去掉,打開地址重寫的配置。

重新啓動Apache:

E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 490 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
RewriteCond: bad flag delimiters

490行出現問題,那我把地址重寫的代碼放出來:

487 RewriteEngine on 
488 RewriteCond %{HTTP_HOST} ^aaa.***.com [NC]
489 RewriteRule ^/$ http://aaa.***.com/action/garden [L]\
490 RewriteCond %{HTTP_HOST} ^www.***.com [NC]
491 RewriteRule ^/$ http://www.***.com/action/testyemian [L] 

看發現“\這個符號不應該存在。

將這個去掉,重新啓動。apache啓動成功“http://localhost/”,訪問到

It works!

然後啓動兩個Tomcat;可以先測試單獨的Tomcat的啓動情況,帶上端口就可以訪問了。如果訪問成功,繼續。下面圖片說明一切,你懂得。

然後查看tomcat,兩個tomcat中的值的變化:

兩個不同的tomcat得到了Session複製。

 

以上的測試說明,集羣中的session已經共享,每個集羣對於同一訪問均有相同的session,而且session中存儲的變量也複製了。

目前,就可以了,還有更多的內容如:節點插拔測試,等等稍後繼續。

 

我的這篇博客,是經過了自己親手實現的,因此,如果你有什麼問題,可以給我留言。

歡迎你的轉載,請標明出處:http://blog.csdn.net/vipzyj/article/details/8783750

 

 

 

發佈了33 篇原創文章 · 獲贊 25 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章