Apache2+TOMCAT+Mod_JK集羣環境搭建(Win7)

剛好公司要用,網上看了很多感覺寫的都不全,自己查資料,研究幾天,終於弄出來,給大家分享下!希望幫助到更多的人!


需要軟件

  • apache_2.0.55-win32-x86-no_ssl.msi
  • apache-tomcat-7.0.52
  • mod_jk-apache-2.0.55.so

搭建流程

  • 取出下載的mod_jk-apache-2.0.55.so,放到\Apache2\modules\目錄下。
  • 打開httpd.conf, 在末尾加上:
    include “C:\Program Files (x86)\Apache Group\Apache2\conf\mod_jk.conf”,即調用conf目錄下的mod_jk.conf這個配置文件。當然,apache conf目錄下原來是沒有這個文
    件的。我們需要自己新建這個文件。
  • 在conf目錄下新建Mod_jk.conf內容如下:
#加載mod_jk Module     
LoadModule jk_module modules/mod_jk-apache-2.0.55.so     

#指定 workers.properties文件路徑     
JkWorkersFile conf/workers.properties     

#指定那些請求交給tomcat處理,"controller"爲在workers.propertise裏指定的負載分配控制器     
JkMount /*.jsp controller 
  • 接着我們在conf目錄下新建workers.properties內容如下:
 worker.list = controller  #server 列表  
#========tomcat1========  
worker.tomcat1.port=8009   #ajp13 端口號,在tomcat下server.xml配置,默認8009  
worker.tomcat1.host=localhost  #tomcat的主機地址,如不爲本機,請填寫ip地址  
worker.tomcat1.type=ajp13  
worker.tomcat1.lbfactor=2 #server的加權比重,值越高,分得的請求越多  
#worker.tomcat1.redirect = tomcat2
#========tomcat2========  
worker.tomcat2.port=18009   #ajp13 端口號,在tomcat下server.xml配置,默認8009  
worker.tomcat2.host=localhost  #tomcat的主機地址,如不爲本機,請填寫ip地址  
worker.tomcat2.type=ajp13  
worker.tomcat2.lbfactor=1  #server的加權比重,值越高,分得的請求越多  
#worker.tomcat2.redirect = tomcat1
#========controller,負載均衡控制器========  
worker.controller.type=lb  
worker.controller.balanced_workers=tomcat1,tomcat2  #指定分擔請求的tomcat  
worker.controller.sticky_session=1  
  • Tomcat集羣配置

    將2個tomcat分別解壓後,分別打開apache-tomcat-7.0.52 \conf\server.xml文件。

(1) 修改端口:

2個tomcat, 爲了避免端口衝突,其中一個端口使用默認的,而另一個得修改。必須修改的端口如
下:
這裏寫圖片描述
以上3個地方都在前面加上一個“1”.就可以避免2個tomcat端口衝突。(注:這是tomcat6需要修
改的端口。其他版本的tomcat可能不止要修改這些端口。總之衝突的端口均需要修改)

(2) 修改集羣設置:

<Engine><Host>元素下添加以下內容均可。

方便拷貝,我把配置貼出來:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> 
  <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->  
  <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->  
  <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->  
  <Realm className="org.apache.catalina.realm.LockOutRealm"> 
    <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->  
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
  </Realm>  
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
    <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->  
    <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->  
    <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->  
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b"/> 
  </Host>  
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> 
    <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
      <Membership className="org.apache.catalina.tribes.membership.McastService" address="224.0.0.1" port="45564" frequency="500" dropTime="3000"/>  
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4002" autoBind="100" selectorTimeout="5000" maxThreads="6"/>  
      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 
        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 
      </Sender>  
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 
    </Channel>  
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>  
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/>  
    <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 
  </Cluster> 
</Engine>

另外,按照官方文檔裏說明的的默認配置, 元素下的address屬性默認值爲228.0.0.4 . 這個配置在我的系統上始終會出現2個tomcat無法交換數據包的問題。需改成224.0.0.1才能正常使用。重要!!!
需要而外注意的是,2個tomcat裏添加到上面這段配置,其下的Port元
素必需配置成不同的。如其中一個是4001,一個是4002.(tomcat默認可以檢測到4000~4100之
間的端口)。

(3)修改的屬性。

這裏寫圖片描述
2個tomcat, jvmRoute分別配置成tomcat1和tomcat2,即和apache/conf裏
worker.properites配置文件中配置的worker名稱對應。

  • 你要部署的項目集羣配置:
    (1)修改項目中的WEB-INF/web.xml文件,加入如下行:
    這裏寫圖片描述
    所有需要集羣的web項目,其web.xml中都必須添加
    這個定義
    (2) 將tlcom分別部署到2個tomcat中:
    這裏因爲我沿用原來在tomcat上的開發方式,並不直接把項目放到tomcat/webapp目錄下
    (3) 分別啓動兩個tomcat
    可以在tomcat\bin目錄下執行
    來啓動,也可以通過在eclipse中先將server配置好(配置對應的2個tomcat server),在
    eclipse中啓動。
    啓動tomcat1:
    和正常eclipse中啓動一樣,加載插件:
    RONE初始化:
    成功啓動:
    這裏寫圖片描述
    啓動tomcat2:
    啓動過程和tomcat1一樣,值得注意的是,在tomcat2啓動的時候,tomcat1會打印出集羣中加入
    member的提示:
    這裏寫圖片描述

(4) 啓動apache.通過IP訪問apache. 比如我的是 http://10.188.182.43 (這裏80端
口寫不寫是一樣的)。
你會發現可能RONE都登陸不了,或者登陸了頁面都無法正常打開。原因在於我們一開始配置的
Mod_jk.conf文件。文件末尾的請求轉發。我們只轉發了jsp頁面的請求,就是說apache只會把
jsp頁面的請求轉發到2個tomcat上去。因此我們需要修改過濾的規則。我沒有找到資料具體的各
種規則應該怎麼寫,只能寫一個大的過濾:
JkMount /* controller
JkMount /*.do controller
將mod_jk.conf末尾改成上面這樣。重啓apache,你就可以看到RONE登陸界面了

到此完成!謝謝大家!

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