第一節 負載均衡簡介
一、 負載均衡的定義
負載均衡是由多台服務器以對稱的方式組成一個服務器集合,每台服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。通過某種負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一台服務器上,而接收到請求的服務器獨立地回應客戶的請求。
二、 負載均衡的作用
如果你發現你的Web站點負載量非常大時,應當考慮使用負載均衡技術來將負載平均分攤到多個內部服務器上。如果有多個服務器同時執行某一個任務時,這些服務器就構成一個集群(clustering)。使用集群技術可以用最少的投資獲得接近於大型主機的性能。
三、 類型
目前比較常用的負載均衡技術主要有:
1. 基於DNS的負載均衡
通過DNS服務中的隨機名字解析來實現負載均衡,在DNS服務器中,可以為多個不同的地址配置同一個名字,而最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址。因此,對於同一個名字,不同的客戶機會得到不同的地址,他們也就訪問不同地址上的Web服務器,從而達到負載均衡的目的。
2. 反向代理負載均衡
使用代理服務器可以將請求轉發給內部的Web服務器,讓代理服務器將請求均勻地轉發給多台內部Web服務器之一上,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標准代理方式是客戶使用代理訪問多個外部Web服務器,而這種代理方式是多個客戶使用它訪問內部Web服務器,因此也被稱為反向代理模式。Apusic負載均衡器就屬於這種類型的。
3. 基於NAT的負載均衡技術
網絡地址轉換為在內部地址和外部地址之間進行轉換,以便具備內部地址的計算機能訪問外部網絡,而當外部網絡中的計算機訪問地址轉換網關擁有的某一外部地址時,地址轉換網關能將其轉發到一個映射的內部地址上。因此如果地址轉換網關能將每個連接均勻轉換為不同的內部服務器地址,此後外部網絡中的計算機就各自與自己轉換得到的地址上服務器進行通信,從而達到負載分擔的目的。
第二節 Apusic負載均衡器的安裝使用
一、 使用Apusic負載均衡器的系統結構
本文前面的插圖是一個典型的使用Apusic負載均衡器的負載均衡服務集群的系統結構。
在這個系統中,我們可以看出,Apusic負載均衡器是用Apusic 1.1實現的,也就是說,負載均衡器和其他APUSIC服務器沒有多少區別,不同的是它上面沒有安裝應用系統,並且使用不同的配置文件,它只是專門提供負載均衡服務。客戶通過訪問負載均衡器的Web服務,來訪問整個集群的資源。真正存放Web應用的是服務器1和服務器2,當然還可以更多,只需要修改負載均衡器的配置文件即可添加和刪除,也可以使用負載均衡器的配置工具,詳細內容可參考第三小節"配置"。
用戶請求達到負載均衡器後,負載均衡器將它分配到某個Apusic應用服務器上,讓這個應用服務器為此用戶提供服務。
二、 安裝
負載均衡器和其他APUSIC服務器沒有多少區別,不同的是它上面沒有安裝應用系統,並且使用不同的配置文件。因此它的安裝方法和安裝一個Apusic應用服務器是一樣的,請參考第一章"Apusic Application Server 的安裝配置"。
三、 配置
在APUSIC安裝目錄下找到文件config/loadbalancer.conf,它的內容一般是這樣的:
<CONFIG>
<SERVICE CLASS="com.apusic.logging.ConsoleLogger" NAME="Logger:type=console,name=Log">
<ATTRIBUTE NAME="Filter" VALUE="info,warn,error"/>
</SERVICE>
<SERVICE CLASS="com.apusic.logging.FileLogger" NAME="Logger:type=file,name=Log">
<ATTRIBUTE NAME="Filter" VALUE="info,warn,error"/>
<ATTRIBUTE NAME="MaxFileSize" VALUE="1024"/>
<ATTRIBUTE NAME="LogName" VALUE="logs/loadbalancer.log"/>
</SERVICE>
<SERVICE CLASS="com.apusic.servlet.http.loadbalancer.LoadBalancer">
<ATTRIBUTE NAME="ServerName" VALUE="mycluster"/>
<ATTRIBUTE NAME="ServerPort" VALUE="80"/>
<ATTRIBUTE NAME="BackendServers" VALUE="server1:8080,server2:8080"/>
</SERVICE>
<SERVICE CLASS="com.apusic.servlet.http.tcp.TCPEndpoint" NAME="Endpoint:type=tcp,service=LoadBalancer"/>
<ATTRIBUTE NAME="Port" VALUE="80"/>
</SERVICE>
<SERVICE CLASS="com.apusic.servlet.http.ssl.SSLEndpoint" NAME="Endpoint:type=ssl,service=LoadBalancer"/>
<ATTRIBUTE NAME="Port" VALUE="443"/>
<ATTRIBUTE NAME="KeyStore" VALUE="config/sslserver"/>
<ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>
</SERVICE>
</CONFIG>
大家可以和APUSIC應用服務器的配置文件config/apusic.conf比較一下,可以發現少了一些東西,但多了一個LoadBalancer服務。其中有一個重要的屬性BackendServers定義了集群中的服務器,這是一個用逗號分隔的服務器地址列表,包括主機名和端口號,負載均衡器將根據這個列表采取循環或隨機的策略來選擇服務器。負載均衡器和內部服務器啟動的先後次序無關緊要,負載均衡器將總是選擇目前可用的內部服務器,並周期性地檢測內部服務器是否正常工作。
當用這個配置文件啟動APUSIC應用服務器時,這台服務器就成為一個負載均衡器。
另外,還可以使用負載均衡器的配置工具來增加、刪除或修改它所管理的應用服務器。
四、 運行
啟動命令行為:
java com.apusic.server.Main -config config/loadbalancer.conf
由於剔除了EJB,JMS,JDBC等組件,負載均衡器有更多的資源來處理負載,將客戶的請求轉發到內部服務器上,並將內部服務器的回應轉發給客戶。另外,APUSIC負載均衡器還可以結合其他負載均衡技術,例如基於DNS和基於NAT的負載均衡。以DNS為例,你可以在集群系統中安裝多個 負載均衡器,每個負載均衡器都和內部服務器有連接,並配置DNS,使所有的負載均衡器都映射到同一個域名,這樣當用戶使用域名訪問系統時,DNS會首先將域名映射到其中一個負載均衡器的IP地址,用戶將請求發到指定IP地址的負載均衡器上,而此負載均衡器再將請求轉發到一個內部服務器上.
五、 對Apusic 應用服務器的要求
在使用負載均衡器之前,首先要在集群中所有的服務器上安裝APUSIC應用服務器,安裝方法和在單獨一台服務器上安裝是一樣的,但注意在安裝應用系統時要在所有服務器上都保持一致,如果有條件可以采用一個共享硬盤組。安裝完成後啟動服務器,並測試應用系統能否正常工作。如果只有一台機器,也可以測試APUSIC的集群功能,可以啟動多個服務器進程,但它們的各種服務的偵聽端口都不能有沖突。
第三節 在Apusic負載均衡集群上開發應用系統的特點
利用Apusic 1.1建立的負載均衡集群有一個很重要的特點,APUSIC實現了分布式Session管理,這是實現Web服務器集群的關鍵,由於Web應用被分布到多台服務器上運行,因此保存在Session中的共享數據必須完全保持一致。APUSIC沒有使用共享數據庫來保存Session數據,雖然這種方式能保證Session數據的一致性,但由於Session的變化是很頻繁的,對數據庫將造成很大的壓力,最終將成為整個系統的瓶頸。APUSIC使用一種分布式Session服務,每個服務器管理自己所產生的Session,當Web應用從一台服務器遷移到另一台服務器時,Session也會自動進行遷移,這樣使得對Session的管理被均勻地分布到所有的服務器上,任何一台服務器失效並不會使Session丟失。對應用開發者來說,要保證分布式Session能夠正常工作,在Session中只能保存實現了java.io.Serializable的數據,否則Session將無法完成遷移。
總之,如果你的Web應用中使用了session,它在Apusic負載均衡集群中不受任何影響,可以正常使用,同時,還能享受到Apusic負載均衡集群給您的應用帶來的高度的安全和最大的速度。
摘自:http://www.apusic.com