1. 程式人生 > >Apache+tomcat叢集和負載均衡(httpd.conf,workers.properties,uriworkermap.properties)

Apache+tomcat叢集和負載均衡(httpd.conf,workers.properties,uriworkermap.properties)

用apache和tomcat搭建叢集,實現負載均衡 
一、叢集和負載均衡的概念
(一)叢集的概念
  叢集(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,下載地址是
http://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,下載地址是
http://apache.justdn.org/httpd/binaries/win32/apache_2.2.4-win32-x86-openssl-0.9.8d.msi
3、tomcat,我用的版本是5.5的解壓版本,這裡要注意:不能用安裝的版本,因為一臺機器上裝兩個一樣的tomcat,是會出錯誤的。下載地址是
http://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開發的那個才行。它的下載地址是
http://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的話,那開啟瀏覽器,輸入:
http://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檔案,找到這一行,在裡面加上一句:jvmRoute="s1",即把該句改為:。這裡的s1就是第二步中配置的用於負載均衡的server的名稱。如果該tomcat的埠是第二步中s1用的埠,那這裡就寫s1,第二個tomcat就應該是s2了。
這樣,配置就完成了。
(四)執行
進入兩個tomcat的bin目錄,執行兩個tomcat的startup.bat啟動這兩個 tomcat,然後將apache重新啟動後,執行起來看看效果吧。如果不出意外,兩個tomcat的視窗應該是你一次我一次的列印日誌資訊了,而且此時 session也是共享了的。
到這裡,叢集搭建好了,負載均衡也實現了。

相關推薦

Apache+tomcat叢集負載均衡httpd.confworkers.propertiesuriworkermap.properties

用apache和tomcat搭建叢集,實現負載均衡 一、叢集和負載均衡的概念(一)叢集的概念  叢集(Cluster)是由兩臺或多臺節點機(伺服器)構成的一種鬆散耦合的計算節點集合,為使用者提供網路服務或應用程式(包括資料庫、Web服務和檔案服務等)的單一客戶檢視,同時提供

apache+tomcat叢集負載均衡配置

Apache+tomcat 負載均衡的入門配置這份文件只是一個初步的配置負載均衡的文件,沒有涉及過多的效能優化的東西所以也就不多言了,直接切入主題。 一、準備工作 安裝JDK並配置環境變數。這裡要求至少1.5以上版本。 安裝 apache2.2 。我的安裝目錄為:D:\A

Windows下Apache+Tomcat反向代理負載均衡HTTP

0、資料準備       下載:httpd-2.2.25-win32-x86-openssl-0.9.8y        準備:tomcat 6 1、配置2個tomcat例項 tomcat1 <

Zookeeper實現叢集負載均衡---5Zabbix整合Zookeeper示例

1.前言 上一章主要描述了zabbix整合Zookeeper的方案,本文主要描述zabbix整合Zookeeper示例。 2.整合前置條件 1. 安裝完按成Zabbix,其中包括Java Gateway元件 2. 修改Zook

SpringBoot微服務 +tomcat叢集+Ngnix負載均衡+Mysql主從複製讀寫分離4

四:mysql主從複製,讀寫分離 1.首先把mysql原始碼包檔案拷到兩臺linux伺服器上,然後在兩臺伺服器上安裝Mysql資料庫 安裝 MySQL 1 安裝 ncurses Ncurses 提供字元終端處理庫,包括面板和選單。它提供了

Linux中Apache+Tomcat+JK實現負載均衡群集的完整過程

個人原創,一個字一個字地碼的,尊重版權,轉載請註明出處! 最近在開發的專案需要承受很高的併發量。綜合各種情況,決定使用Apache+Tomcat+JK的方式實現負載均衡,並且作為一個統一的服務還要實現群集(同步Session)。 在網上找了很多資料,都是零零散散的,沒有一個完整的過程。通過幾天的努力,完

注意這幾點輕輕鬆鬆配置 Nginx + Tomcat叢集負載均衡

Tomcat 叢集是當單臺伺服器達到效能瓶頸,通過橫向擴充套件的方式提高整體系統效能的有效手段。Nginx 是一個高效能的 HTTP 和反向代理 web 伺服器,可以通過簡單的配置實現 Tomcat 叢集的負載均衡。 本文使用的 Tomcat 是 8.5.35 版本,Nginx 是 1.14.2 版本。接下來

Nginx+Tomcat 配置實現負載均衡附安裝包

jsp color 一個 網頁 管理 密碼 bin pcr 解壓 實驗目的: Nginx 是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。 其特點是占有內存少,並發能力強,事實上nginx的

zookeeper+dubbo+nginx叢集負載均衡簡單例子

1:服務層面用Dubbo+Zookeeper實現分散式服務,然後Http web層用 Nginx 實現高可用叢集方案,本文記錄下demo例子 2:windows環境,  zk 3臺偽叢集 ,idea,maven 3:zk叢集已搭建好,首先開起zk叢集  cd /bin 目錄下 zkcl

大話叢集負載均衡

在“高併發,海量資料,分散式,NoSql,雲端計算......”概念滿天飛的年代,相信不少朋友都聽說過甚至常與人提起“叢集,負載均衡”等, 但不是所有人都有機會真正接觸到這些技術,也不是所有人都真正理解了這些“聽起來很牛的”技術名詞。下面簡單解釋一下吧。 要了解這些概念首先要了解一下專案架構的演進,我這裡

.net core webapi使用nginx實現叢集負載均衡

第一步:先編寫webapi介面:      介面介紹:     1、介面採用appkey和appsecret     2、訪問的話,在報文頭加上,appkey和sign。       1、sign由請求地址(例如:http://www.xxx.com/api/user/xx/,那麼地址是/api/u

叢集負載均衡”在實戰當中的運用技巧

在“高併發,海量資料,分散式,NoSql,雲端計算……”概念滿天飛的年代,相信不少朋友都聽說過甚至常與人提起“叢集,負載均衡”等,但不是所有人都有機會真正接觸到這些技術,也不是所有人都真正理解了這些“聽起來很牛的”技術名詞。下面簡單解釋一下吧。 叢集(Cluster) 所謂叢集是指一組獨立的計算機系

叢集負載均衡”的通俗版解釋

在“高併發,海量資料,分散式,NoSql,雲端計算……”概念滿天飛的年代,相信不少朋友都聽說過甚至常與人提起“叢集,負載均衡”等,但不是所有人都有機會真正接觸到這些技術,也不是所有人都真正理解了這些“聽起來很牛的”技術名詞。下面簡單解釋一下吧。 叢集(Cluster) 所謂叢集是指一組獨立的計算機系

FastDFS蛋疼的叢集負載均衡(十五)之lvs四層+Nginx七層負載均衡

Interesting things lvs+nginx的拓撲圖 vip:192.168.12.100 lvs-director:192.168.12.4 nginx1:192.168.12.2 nginx

Nginx反向代理Tomcat實現現負載均衡高可用以及利用redis+Session同步會話共享配置詳解

簡介: 一、Redis介紹 redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sortedset --有序集合)和hash(雜湊型別)。與m

叢集負載均衡

在“高併發,海量資料,分散式,NoSql,雲端計算……”概念滿天飛的年代,相信不少朋友都聽說過甚至常與人提起“叢集,負載均衡”等,但不是所有人都有機會真正接觸到這些技術,也不是所有人都真正理解了這些“聽起來很牛的”技術名詞。下面簡單解釋一下吧。 叢集(Cl

apache2.4 + mod_proxy + tomcat7 配置叢集負載均衡

叢集和負載均衡好處自然不用說,概念不理解查百度,這裡介紹下怎麼利用mod_proxy配置叢集和負載均衡。 首先我們來實現tomcat的叢集以及session的複雜 1.解壓tomcat7到cluster的目錄,並命名為apache-tomcat-7.0.

使用zookeeper實現叢集負載均衡

package com.bubble.cluster; import java.net.InetSocketAddress; import java.util.List; import java.util.Random; import java.util.concurre

Nginx的叢集負載均衡

Nginx的叢集和負載均衡 負載均衡配置案例1 設定上游伺服器: # 設定上游伺服器: upstream imgserver{

負載均衡集群介紹,lvs介紹LVS調度算法NAT模式搭建

bottom table all lvs dr 有一個 gen 輪詢 chang 定向 一、負載均衡集群介紹負載均衡集群:簡單地說就是讓多臺服務器均衡地去承載壓力。實現負載均衡的開源軟件有:LVS,keepalived,haproxy,nginx等其中相對於(網絡OSI七層