1. 程式人生 > >tomcat+apache實現負載均衡叢集

tomcat+apache實現負載均衡叢集

1,使用負載均衡叢集原因

當開發一個流量小,併發量不大的系統的時候,負載均衡叢集沒什麼大的意義。反之則意義重大。

使用apache+tomcat配置負載均衡叢集流程如下:使用者傳送請求到Web伺服器(也就是apache) apache 根據定義規則進行http轉發到不同的tomcat伺服器 。同時要保證各個tomcat伺服器之間的訊息共享(非常重要!如在tomcat改變某一個記憶體值的同時要更新到每一臺伺服器上)實現實時訊息同步 。

 

具體步驟如下:

 1.下載JDK 並且配置好

 2.下載Apache應用 網址:http://archive.apache.org/dist/httpd/binaries/win32/apache_2.0.55-win32-x86-no_ssl.msi

3 .下載mod_jk(用於連線apache和tomcat) 網址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/mod_jk-apache-2.0.55.so

4.下載 tomcat 7 (tomcat8沒試過。)

注意,apache版本要和mod_jk版本一致。

 

2,開始配置負載均衡

(1)安裝配置好tomcat伺服器;

(2)安裝配置號兩個或者以上的tomcat伺服器(用於測試叢集)

(3)在apache的httpd.cfg下配置加上include conf/mod_jk.conf

#<VirtualHost *:80>
#    ServerAdmin [email protected]
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
include conf/mod_jk.conf

(4)把下載的mod_jk 複製到D:\xxxxxx\Apache2\modules 路徑下

(5)在conf資料夾下新建mod_jk.conf:

#載入mod_jk Module   注意檔名根據實際情況而填

LoadModule jk_module modules/mod_jk.so

#指定 workers.properties檔案路徑

JkWorkersFile conf/workers.properties

#指定那些請求交給tomcat處理,"controller"為在workers.propertise裡指定的負載分配控制器 

JkMount /*.do controller

JkMount /*WEB-INF controller

JkMount /*j_spring_security_check controller

JkMount /*.action controller

JkMount /servlet/* controller

JkMount /*.jsp controller

JkMount /*.do controller

JkMount /*.action controller

JkMount /* controller

#如果想所有的訪問都交給負載均衡器,那就 JkMount /* controller

 

(6)在同路徑下(在conf資料夾下)新建workers.properties 

#server 列表

worker.list = controller,tomcat1,tomcat2

#========tomcat1========

worker.tomcat1.port=8010

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1

#========tomcat2========

worker.tomcat2.port=8011

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

#========controller,負載均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2    #指定分擔請求的tomcat

worker.controller.sticky_session=1

 

解釋一下:

workers.properties中已經配置了埠和各個tomcat,從埠找到服務。

sticky_session   sticky_session_force          含義 
     true                   false                         SESSION會複製,有粘性 
     true                   true                          SESSION會複製,有粘性 
     false                  false                        SESSION不會複製,無粘性 
     false                  true                         SESSION不會複製,無粘性
worker.controller.sticky_session,設定為1或true使用粘著session,設定為0或false不使用粘著session。如果sticky_session設為true時,建議sticky_session_force設為false,此引數表明如果叢集中某臺伺服器在多次請求沒有響應後,將轉發當前的請求到其它伺服器上處理;sticky_session=false時,影響比較大,會導致轉發到其它伺服器上的請求,找不到原來的session,所以如果此時請求中有讀取session中某些資訊的話,就會導致應用的null異常。sticky_session、sticky_session_force的預設值分別為true,false。

worker.controller.sticky_session_force=true,始終轉發到session建立的伺服器上。

(7)修改兩個tomcat的ajp13埠號(和上面myworker.properties)必須一一對應 並且修改兩個tomcat中的開啟埠號和服務埠號,以免重複

以上基本完成tomcat叢集的基本配置 現在要做最重要的session共享; 。

 

(8)開啟兩個tomcat配置

<!--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"/>

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>註釋去掉。這裡的session共享有很多做法,可以查詢網上。

(9)8在自己應用服務的web.xml中 <web-app> 模組下加入<distributable />

 

 

(10)這樣就搭建ok了,可以去試試。