tomcat+apache入門做集群
源於網絡一、集群和負載均衡的概念
(一)集群的概念
集群(Cluster)是由兩台或多台節點機(服務器)構成的一種鬆散耦合的計算節點集合,為用戶提供網絡服務或應用程序(包括數據庫、Web服務和文件服務等)的單一客戶視圖,同時提供接近容錯機的故障恢複能力。集群係統一般通過兩台或多台節點服務器係統通過相應的硬件及軟件互連,每個群集節點都是運行其自己進程的獨立服務器。這些進程可以彼此通信,對網絡客戶機來說就像是形成了一個單一係統,協同起來向用戶提供應用程序、係統資源和數據。除了作為單一係統提供服務,集群係統還具有恢複服務器級故障的能力。集群係統還可通過在集群中繼續增加服務器的方式,從內部增加服務器的處理能力,並通過係統級的冗餘提供固有的可靠性和可用性。
(二)集群的分類
1、高性能計算科學集群:
以解決複雜的科學計算問題為目的的IA集群係統。是並行計算的基礎,它可以不使用專門的由十至上萬個獨立處理器組成的並行超級計算機,而是采用通過高速連接來鏈接的一組1/2/4 CPU的IA服務器,並且在公共消息傳遞層上進行通信以運行並行應用程序。這樣的計算集群,其處理能力與真正超級並行機相等,並且具有優良的性價比。
2、負載均衡集群:
負載均衡集群為企業需求提供更實用的係統。該係統使各節點的負載流量可以在服務器集群中盡可能平均合理地分攤處理。該負載需要均衡計算的應用程序處理端口負載或網絡流量負載。這樣的係統非常適合於運行同一組應用程序的大量用戶。每個節點都可以處理一部分負載,並且可以在節點之間動態分配負載,以實現平衡。對於網絡流量也如此。通常,網絡服務器應用程序接受了大量入網流量,無法迅速處理,這就需要將流量發送給在其它節點。負載均衡算法還可以根據每個節點不同的可用資源或網絡的特殊環境來進行優化。
3、高可用性集群:
為保證集群整體服務的高可用,考慮計算硬件和軟件的容錯性。如果高可用性群集中的某個節點發生了故障,那麼將由另外的節點代替它。整個係統環境對於用戶是一致的。
實際應用的集群係統中,這三種基本類型經常會發生混合與交雜。
(三)典型集群
科學計算集群:
1、Beowulf
當談到 Linux 集群時,許多人的第一反映是 Beowulf。那是最著名的 Linux科學軟件集群係統。實際上,它是一組適用於在 Linux 內核上運行的公共軟件包的通稱。其中包括流行的軟件消息傳遞 API,如“消息傳送接口”(MPI) 或“並行虛擬機”(PVM),對 Linux 內核的修改,以允許結合幾個以太網接口、高性能網絡驅動器,對虛擬內存管理器的更改,以及分布式進程間通信 (DIPC) 服務。公共全局進程標識空間允許使用 DIPC 機製從任何節點訪問任何進程。
2、MOSIX
Beowulf類似於給係統安裝的一個支持集群的外掛軟件,提供了應用級的集群能力。而MOSIX是徹底修改Linux的內核,從係統級提供了集群能力,它對應用而言是完全透明的,原有的應用程序,可以不經改動,就能正常運行在MOSIX係統之上。集群中的任何節點都可以自由地加入和移除,來接替其它節點的工作,或是擴充係統。MOSIX 使用自適應進程負載均衡和內存引導算法使整體性能最大化。應用程序進程可以在節點之間實現遷移,以利用最好的資源,這類似於對稱多處理器係統可以在各個處理器之間切換應用程序。由於MOSIX通過修改內核來實現集群功能,所以存在兼容性問題,部分係統級應用程序將無法正常運行。
負載均衡/高可用性集群
3、LVS(Linux Virtual Server)
這是一個由國人主持的項目。
它是一個負載均衡/高可用性集群,主要針對大業務量的網絡應用(如新聞服務、網上銀行、電子商務等)。
LVS是建立在一個主控服務器(通常為雙機)(director)及若幹真實服務器(real-server)所組成的集群之上。real-server 負責實際提供服務,主控服務器根據指定的調度算法對real-server進行控製。而集群的結構對於用戶來說是透明的,客戶端隻與單個的IP(集群係統的虛擬IP)進行通信,也就是說從客戶端的視角來看,這裏隻存在單個服務器。
N54537Real-server可以提供眾多服務,如ftp, http, dns, telnet, nntp, smtp 等。主控服務器負責對Real-Server進行控製。客戶端在向LVS發出服務請求時,Director會通過特定的調度算法來指定由某個Real- Server來應答請求,而客戶端隻與Load Balancer的IP(即虛擬IP,VIP)進行通信。
其他集群:
現在集群係統可謂五花八門,絕大部分的OS開發商,服務器開發商都提供了係統級的集群產品,最典型的是各類雙機係統,還有各類科研院校提供的集群係統。以及各類軟件開發商提供的應用級別的集群係統,如數據庫集群,Application Server 集群,Web Server集群,郵件集群等等。
(四)負載均衡
1、概念
由於目前現有網絡的各個核心部分隨著業務量的提高,訪問量和數據流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的服務器設備根本無法承擔。在此情況下,如果扔掉現有設備去做大量的硬件升級,這樣將造成現有資源的浪費,而且如果再麵臨下一次業務量的提升時,這又將導致再一次硬件升級的高額成本投入,甚至性能再卓越的設備也不能滿足當前業務量增長的需求。
針對此情況而衍生出來的一種廉價有效透明的方法以擴展現有網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性的技術就是負載均衡(Load Balance)。
2、特點和分類
負載均衡(Server Load Balance)一般用於提高服務器的整體處理能力,並提高可靠性,可用性,可維護性,最終目的是加快服務器的響應速度,從而提高用戶的體驗度。
負載均衡從結構上分為本地負載均衡(Local Server Load Balance)和地域負載均衡(Global Server Load Balance)(全局負載均衡),一是指對本地的服務器群做負載均衡,另一是指對分別放置在不同的地理位置、有不同的網絡及服務器群之間作負載均衡。
地域負載均衡有以下的特點:
(1)解決網絡擁塞問題,服務就近提供,實現地理位置無關性
(2)對用戶提供更好的訪問質量
(3)提高服務器響應速度
(4)提高服務器及其他資源的利用效率
(5)避免了數據中心單點失效
3、負載均衡技術主要應用
(1)DNS負載均衡最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。
(2)代理服務器負載均衡 使用代理服務器,可以將請求轉發給內部的服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用代理服務器將請求均勻轉發給多台服務器,從而達到負載均衡的目的。
(3)地址轉換網關負載均衡 支持負載均衡的地址轉換網關,可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的。
(4)協議內部支持負載均衡 除了這三種負載均衡方式之外,有的協議內部支持與負載均衡相關的功能,例如HTTP協議中的重定向能力等,HTTP運行於TCP連接的最高層。
(5)NAT負載均衡 NAT(Network Address Translation 網絡地址轉換)簡單地說就是將一個IP地址轉換為另一個IP地址,一般用於未經注冊的內部地址與合法的、已獲注冊的Internet IP地址間進行轉換。適用於解決Internet IP地址緊張、不想讓網絡外部知道內部網絡結構等的場合下。
(6)反向代理負載均衡普通代理方式是代理內部網絡用戶訪問internet上服務器的連接請求,客戶端必須指定代理服務器,並將本來要直接發送到internet上服務器的連接請求發送給代理服務器處理。反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給 internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。反向代理負載均衡技術是把將來自internet上的連接請求以反向代理的方式動態地轉發給內部網絡上的多台服務器進行處理,從而達到負載均衡的目的。
(7)混合型負載均衡在有些大型網絡,由於多個服務器群內硬件設備、各自的規模、提供的服務等的差異,我們可以考慮給每個服務器群采用最合適的負載均衡方式,然後又在這多個服務器群間再一次負載均衡或群集起來以一個整體向外界提供服務(即把這多個服務器群當做一個新的服務器群),從而達到最佳的性能。我們將這種方式稱之為混合型負載均衡。此種方式有時也用於單台均衡設備的性能不能滿足大量連接請求的情況下。
二、搭建集群和實現負載平衡
(一)前期準備
我的係統用的是windowsXP專業版,我要做的是,用一個apache和多個(這裏以兩個作為示例)tomcat,通過jk方式,構造一個集群。以下是要首先準備的東西:
1、jdk,我用的版本是jdk1.5.0_06,下載地址是https://192.18.108.216/ECom/EComTicketServlet/BEGIND597A309654D73D910E051D73D539D5F/-2147483648/2438196255/1/852050/851882/2438196255/2ts+/westCoastFSEND/jdk-1.5.0_13-oth-JPR/jdk-1.5.0_13-oth-JPR:3/jdk-1_5_0_13-windows-i586-p.exe
2、apache,我用的版本是2.2.4,下載地址是https://apache.justdn.org/httpd/binaries/win32/apache_2.2.4-win32-x86-openssl-0.9.8d.msi
3、tomcat,我用的版本是5.5的解壓版本,這裏要注意:不能用安裝的版本,因為一台機器上裝兩個一樣的tomcat,是會出錯誤的。下載地址是https://apache.mirror.phpchina.com/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25.zip
4、jk,這個jk的版本,本來有兩個的,但是版本2已經被廢棄掉了,目前可用的jk版本是1.2.25。每個apache的版本,都會有一個特定的jk與之對應,所以這裏要用的jk也必須是為apache-2.2.4開發的那個才行。它的下載地址是https://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.25/mod_jk-apache-2.2.4.so
有了這四樣東西,我們就可以開始做集群了。
(二)安裝
1、相信需要看這篇文章的人,JDK的安裝一定不會陌生,這裏不在贅述。隻是需要提醒一下:環境變量別忘記配置了。
2、安裝apache也沒有什麼難度,就是在安裝過程中要配置域名、網址和管理員郵箱之類的信息,這個信息完全可以按照提示,然後修改下填入即可,之後想修改的話直接到配置文件中改就行了。除了這個地方,還要保證機器上的80端口沒有被其他程序占用。至於安裝路徑,完全取決於個人愛好。其他的默認就行了。安裝成功後,係統右下角的托盤區會有個圖標,我們可以通過這個啟動apache,如果那個小紅點變成綠色,說明服務已經正常啟動了(如果服務沒有啟動起來,說明安裝過程中的配置有錯誤,建議卸載後重裝)。如果按照默認,端口是80的話,那打開瀏覽器,輸入:https://localhost/ ,應該可以看到 " It works “的字樣。這樣就可以進入下一步了。
3、解壓縮tomcat,記得要做兩份。這裏不妨將兩個tomcat命名為:tomcat- 5.5.25_1和tomcat-5.5.25_2,其實這兩個文件夾中的東西是完全一樣的。但是我為了在同一台機器上做集群,那就要保證兩個 tomcat運行起來不會在端口上起衝突。進入tomcat-5.5.25_1/conf目錄,用文本編輯器打開並修改server.xml,將該 tomcat的默認8080端口改為8088(其實沒必要改,我改這個是因為我機器上還有其他tomcat占用著8080端口)。然後進入tomcat- 5.5.25_2/conf目錄,同樣將8080修改掉,至於改成多少沒多大關係,隻要不占用其他程序的端口,應該不會出什麼問題。這樣,tomcat就算安裝好了。
4、jk這東西是一個連接模塊,不用安裝,直接將mod_jk-apache-2.2.4.so這個文件拷貝到apache安裝目錄下的modules文件夾下麵就行了。
這樣,安裝完成,下麵開始配置。
(三)配置
這個地方才是搭建集群的關鍵所在,我也會盡我的可能寫的詳細點。
1、配置tomcat
為防止衝突,進入第二個tomcat主目錄,然後進入conf目錄,打開server.xml修改配置。主要是修改端口,我這裏把所有的端口信息,都在原有基礎上加1000,即原端口是8009,我改為9009。當然,你不必和我一樣,隻要保證不衝突就 OK!這些配置在apache的配置中可能會用到。
2、配置apache
(1)進入apache的主目錄,然後進入conf文件夾,用文本編輯器打開httpd.conf,在該文件末尾加上如下幾行:
### 加載 mod_jk 模塊
LoadModule jk_module modules/mod_jk-apache-2.2.4.so
### 配置 mod_jk
JkWorkersFile conf/workers.properties #加載集群中的workers
JkMountFile conf/uriworkermap.properties #加載workers的請求處理分配文件
JkLogFile logs/mod_jk.log #指定jk的日誌輸出文件
JkLogLevel warn #指定日誌級別
(2)不要改變目錄,新建一個文件:workers.properties,該文件用來配置web容器的信息。該文件的內容如下:
# worker列表
worker.list=controller, status
#第一個server的配置,server名為s1
#ajp13 端口號,在tomcat下server.xml配置,默認8009
worker.s1.port=8009
#tomcat的主機地址,如不為本機,請填寫ip地址
worker.s1.host=localhost
worker.s1.type=ajp13
#server的加權比重,值越高,分得的請求越多
worker.s1.lbfactor=1
#第二個server的配置,server名為s2
worker.s2.port=9009
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.lbfactor=1
#server名為controller,用於負載均衡
worker.controller.type=lb
worker.retries=3 #重試次數
#指定分擔請求的server列表,用逗號分隔
worker.controller.balanced_workers=s1,s2
#設置用於負載均衡的server的session可否共享 有不少文章說設置為1是可以的,但是我是設置為0才可以的
worker.controller.sticky_session=0
#worker.controller.sticky_session_force=1
worker.status.type=status
(3)不要改變目錄,新建一個文件:uriworkermap.properties,文件內容如下:
/*=controller #所有請求都由controller這個server處理
/jkstatus=status #所有包含jkstatus請求的都由status這個server處理
!/*.gif=controller #所有以.gif結尾的請求都不由controller這個server處理,以下幾個都是一樣的意思
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller
這裏的"!”類似於java中的"!”,是“非”的意思。
這樣,apache一塊就配置好了。
3、再修改tomcat配置:這裏兩個tomcat都要配置。
仍然是打開第一步中的那個server.xml文件,找到<Engine name="Catalina" defaultHost="localhost">這一行,在裏麵加上一句:jvmRoute="s1",即把該句改為:<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">。這裏的s1就是第二步中配置的用於負載均衡的server的名稱。如果該tomcat的端口是第二步中s1用的端口,那這裏就寫s1,第二個tomcat就應該是s2了。
這樣,配置就完成了。
(四)運行
進入兩個tomcat的bin目錄,執行兩個tomcat的startup.bat啟動這兩個 tomcat,然後將apache重新啟動後,運行起來看看效果吧。如果不出意外,兩個tomcat的窗口應該是你一次我一次的打印日誌信息了,而且此時 session也是共享了的。
到這裏,集群搭建好了,負載均衡也實現了。
來源:https://xieliang43.iteye.com/blog/575264
最後更新:2017-04-02 16:48:11