天天看點

Aphache + Tomcat 叢集

apache與tomcat及整合實作負載均衡及叢集(轉)

(1)apache與tomcat的差別:

Apache是一個web伺服器環境程式,可以作為web伺服器使用。不過隻支援靜态網頁,如(asp,php,cgi,jsp)等動态網頁的就顯得無能為力。

如果想讓伺服器也能處理動态頁面,那麼就需要Tomcat。

當處理靜态頁面時,Tomcat不如Apache迅速。Tomcat不象Apache一樣可配置(如:可以作為一個代理伺服器,即loadbalaner)。

Tomcat不象Apache一樣強壯。

基于以上原因,一個現實的網站使用一個Apache作為Web伺服器,為網站的靜态頁面請求提供服務;并使用Tomcat伺服器作為一個Servlet/JSP插件,顯示網站的動态頁面。

apache+tomcat是企業級的應用 ! ---->采用apache+tomcat結合應用 !

1.Apache主要用來解析靜态文本,如html,tomcat也有此功能,但apache能大大提高效率,對于并發數較大的企業級應用,能更好的顯示apache的高效率;

2.Tomcat 用來解析jsp,servlet等,所有的客戶請求首先會發送到apache,如果請求是靜态文本則由apache解析,并把結果傳回給 用戶端,如果是動态的請求,如jsp,apache會把解析工作交給tomcat,由tomcat進行解析(這首先要兩者現實整合),tomcat解析完 成後,結果仍是通過apache傳回給用戶端,這樣就可以達到分工合作,實作負載均衡,提高系統的性能!

(2)用apache實作html和jsp檔案分離通路:

apache在處理靜态頁面及資源檔案(圖檔,CSS檔案)的優勢-->作為圖檔伺服器,将動态頁面請求由apache轉發到應用伺服器tomcat緩解了大并發量下,應用伺服器的壓力。

預設是不需要配置的,也就是說你把需要給tomcat處理的字尾在配置檔案(httpd.conf)中寫好,那麼剩下的就都是apache處理的了。

将要預設處理的html檔案放于apache預設的釋出目錄下即可。

apache所有的配置,都在httpd.conf中。

配置端口:

Listen 80  #Listen 127.0.0.1:8080

DocumentRoot:

應該是定義這個伺服器對外釋出的超文本文檔存放的路徑, --》可以修改為任何其它路徑。

DocumentRoot "F:/loadBalance/apache/Apache2/htdocs"

也可以自定義虛拟容器。如下面第3點。

(3)自定義apache的釋出目錄:

通過修改Apache的配置檔案%APACHE2_HOME%/conf/httpd.conf可以定置自己的Apache伺服器。注意修改該配置檔案前要先停止正在運作的Apache伺服器。

在相應位置增加以下行可以定義自己的檔案系統容器,設定自己的本地檔案系統到網絡空間的映射:

Alias /homepage "D:/heavyz/homepage"

<Directory "D:/heavyz/homepage">

Options Indexes FollowSymLinks -ExecCGI

DirectoryIndex index.php index.html home/index.php home/index.html

Order allow,deny

Allow from all

Deny from enpc.fr

</Directory>

分析:

以上語句通過<Directory>标簽定義了一個檔案系統容器,并使用Alias指令把該容器映射到/homepage的URL上去。通過這裡的設定,不會影響原來的DocumentRoot,或其它的已自定義的檔案系統容器。

在該檔案系統容器中還定義了一系列屬性。對上述配置的解釋如下:

* <Directory "D:/heavyz/homepage"> and </Directory> : 定義本地檔案系統容器,該容器位于D:/heavyz/homepage中。

* Alias /homepage "D:/heavyz/homepage" : 當URL中的路徑名為/homepage時,将映射到該檔案系統容器中。

* Options Indexes FollowSymLinks -ExecCGI : 當搜尋不到預設首頁時,允許列出目錄的内容;允許目錄中的符号鍊;不允許執行CGI腳本。

* DirectoryIndex index.php index.html home/index.php home/index.html : 按照列出的四個本地URL搜尋預設首頁,最先找到的檔案作為首頁傳回。(即若URL:http://localhost/homepage,則會先搜尋預設首頁,若查不到相應的預設首面,則根據第二點配置,顯示homepage目前目錄的檔案清單)

* Order allow,deny : Order規定了HTTP客戶的通路權限。先允許再禁止(allow,deny)表明allow中允許的通路權限優先級低于deny中禁止的通路權限。

* Allow from all : 先允許來自任何地方的HTTP客戶的通路請求。

* Deny from enpc.fr : 再禁止域名為enpc.fr的HTTP客戶的通路請求(國立路橋學校ENPC的主機不允許通路該頁面),對于這些客戶,伺服器傳回403 Forbidden資訊。注意Order中定義了deny的優先級高于allow,故該指令将生效。

假設在本地檔案系統上存在檔案D:\heavyz\homepage\index.html,重新啟動Apache伺服器,并通路頁面:http://localhost/homepage将可以通路到上述檔案(前提是你不在ENPC的網絡内)。

---------------------------------------------------------------------

(4)目前比較常用的負載均衡技術主要有:

1. 基于DNS的負載均衡

通過DNS服務中的随機名字解析來實作負載均衡,在DNS伺服器中,可以為多個不同的位址配置同一個名字,而最終查詢這個名字的

客戶機将在解析這個名字時得到其中一個位址。是以,對于同一個名字,不同的客戶機會得到不同的位址,他們也就通路不同位址

上的Web伺服器,進而達到負載均衡的目的。

2. 反向代理負載均衡 (如Apache+JK2+Tomcat這種組合)

使用代理伺服器可以将請求轉發給内部的Web伺服器,讓代理伺服器将請求均勻地轉發給多台内部Web伺服器之一上,進而達到負載

均衡的目的。這種代理方式與普通的代理方式有所不同,标準代理方式是客戶使用代理通路多個外部Web伺服器,而這種代理方式

是多個客戶使用它通路内部Web伺服器,是以也被稱為反向代理模式。

3. 基于NAT(Network Address Translation)的負載均衡技術 (如Linux Virtual Server,簡稱LVS)網絡位址轉換為在内部位址和外部位址之間進行轉換,以便具備内部位址的計算機能通路外部網絡,而當外部網絡中的計算機通路

位址轉換網關擁有的某一外部位址時,位址轉換網關能将其轉發到一個映射的内部位址上。是以如果位址轉換網關能将每個連接配接均勻轉換為不同的内部伺服器位址,此後外部網絡中的計算機就各自與自己轉換得到的位址上伺服器進行通信,進而達到負載分擔的目的。

(5)Apache,Tomcat負載均衡和叢集:

1.對請求的處理又有兩種不同的方式:負載平衡、狀态複制(即叢集).

負載平衡:

每台伺服器都是獨立的,隻是對請求的負載進行平衡,而不對狀态(SESSION)進行複制。

狀态複制(叢集):先進行負載平衡,再在各伺服器間複制應用狀态。

2.apache負載均衡的原理:

1).mod_jk負載平衡原理:

使用mod_jk預設的以輪循方式進行平衡負載,假設有四個伺服器節點,有10個請求,則

第一個節點會得到1,5,9請求;

第二個節點會得到2,6,10請求;

第三個節點會得到3,7請求;

第四個節點會得到4,8請求;

2).Mod_JK2負載均衡與故障複原:

Apache httpd是當成web伺服器,使用mod_jk2将請求傳送給Tomcat,就可以使用mod_jk2的負載均衡與容錯功能。

帶有 mod_jk2的Apache(httpd)可以做的事情包括:

A、将請求配置設定至一或多個Tomcat執行個體上你可以在mod_jk2的workers.properties檔案中,設定許多Tomcat執行個體,并賦于每個執行個體一個lb_factor值,以作為請求配置設定的權重因子。

B、偵測Tomcat執行個體是否失敗當Tomcat執行個體的連接配接器服務不再響應時,mod_jk2會及時偵測到,并停止将請求送給它。其他的Tomcat 執行個體則會接受失效執行個體的負載。

C、偵測Tomcat執行個體在失效後的何時恢複因連接配接器服務失效,而停止将請求配置設定給Tomcat執行個體之後,mod_jk2會周期性地檢查是否已恢複使用性,并自動将其加入現行的Tomcat執行個體池中。

3).實踐證明,在各應用伺服器之間不需要狀态複制的情況下,負載平衡可以達到性能的線性增長及更高的并發需求。

3 叢集原理:

叢集方式也是使用這種方法進行平衡。Tomcat中的叢集原理是通過多點傳播的方式進行節點的查找并使用TCP連接配接進行會話的複制。

叢集與負載均衡的優缺點:

不足:

叢集不同于負載平衡的是,由于叢集服務需要在處理請求之間不斷地進行會話複制,複制後的會話将會慢慢變得龐大,是以它的資

源占用率是非常高的,如果在并發量大的應用中,複制的會話大小會變得相當大,而使用的總記憶體更是會迅速升高。

優點:

但叢集的會話複制,增加了系統的高可用性。由于在每台伺服器都儲存有使用者的Session資訊,如果伺服器群中某台當機,應用可以自動切換到其它伺服器上繼續運作,而使用者的資訊不會丢失,這提高了應用的冗錯性。

具體采用負載平衡還是叢集,這要看應用的需求了。

(6)Apache,Tomcat負載均衡和叢集配置:

0,環境說明

Apache :apache_2.0.55 1 個

Tomcat: apache-tomcat-5.5.17 (zip版) 2個

mod_jk:: mod_jk-apache-2.0.55.so 1個

第一部分:實作負載均衡

負載均衡,就是apache将客戶請求均衡的分給tomcat1,tomcat2....去處理

1.下載下傳,安裝apche,tomcat

http://httpd.apache.org/ 下載下傳Apache 2.0.55

http://tomcat.apache.org/download-55.cgi 下載下傳tomcat5.5 zip版本(解壓即可,綠色版)

http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/ 下載下傳mod_jk,注意和 apache版本比對

本文附件中,以有apache_2.0.55+mod_jk-apache-2.0.55.so。可直接下載下傳使用。

安裝apache:

此處注意,如果你本機已經裝了iis并且占用80端口,務必先在服務中将iis停止或禁用。

軟體預設安裝即可。安裝過程中設定Network Domain和Server Name為localhost,設定你的email(可任意設定)位址,下方會讓你選擇only for the current user或for all users。預設選擇for all users。這樣Apache就會占用80端口,并且做為一個系統服務開機自運作。

安裝完成之後,你在浏覽器中輸入http://localhost,将會看到Apache的成功頁面.此時 Apache,已經運作,你可以在視窗的托盤看到他的圖示,輕按兩下圖示,在彈開的視窗選擇"Open Apache Monitor",點Stop,停止Apaceh服務,因為下面要安裝Tomcat和JK.

JK的安裝:

把mod_jk_2.0.55.so拷貝到d:\Apache \Apache2\modules\下.(可以修改名稱為mod_jk.so),還需在httpd.conf中加上關于mod_jk的配置。

LoadModule jk_module modules/mod_jk.so

以上安裝全部完成後,打開cmd指令提示符,運作d:\Apache\Apache2\bin\Apache.exe -t 你将會看到"Syntax OK",表示Apache配置正常.這個指令非常有用,下面在繼續配置Apache的時候還會再次用到。

2.修改Apache配置檔案http.conf

在apache安裝目錄下conf目錄中找到http.conf

在檔案最後加上下面一句話就可以了

include "E:\ide\apache\Apache2\conf\mod_jk.conf"

2. http.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

也可以根據需要添加,如:

JkMount /servlet/* controller

JkMount /*.do controller

3. 在http.conf同目錄下建立 workers.properties檔案,内容如下

worker.list = controller #server 清單,不加tomcat節點

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

worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,預設8009

worker.tomcat1.host=localhost #tomcat的主機位址,如不為本機,請填寫ip位址

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1 #server的權重比重,值越高,分得的請求越多

#worker.jboss1.cachesize=10

#worker.jboss1.cache_timeout=600

#worker.jboss1.socket_keepalive=1

#worker.jboss1.socket_timeout=300 

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

worker.tomcat2.port=9009 #ajp13 端口号,在tomcat下server.xml配置,預設8009

worker.tomcat2.host=localhost #tomcat的主機位址,如不為本機,請填寫ip位址

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1 #server的權重比重,值越高,分得的請求越多