網絡的普及使各類電子商務、電子政務網站的流量劇增,系統(tǒng)瓶頸問題日益嚴重,直接影響了用戶請求的響應時間,在高峰期有的請求甚至被拒絕。面對這種情況,一般來說有兩種解決方案:一是升級硬件、購買性能更好的服務器等,但花費較多,而且效果不一定很理想,顯然不是最好的解決方案;二是利用集群技術,在原有的硬件投資基礎上,添加幾臺新的服務器,組建負載均衡集群系統(tǒng)。集群計算模式是比較經濟的計算模式,允許用戶把普通商用硬件系統(tǒng)組成機群,并根據(jù)需要隨時增加新的硬件。既提高了系統(tǒng)的性能,同時也降低了成本。本文簡要地討論了一個用于企業(yè)Web服務的集群系統(tǒng)的設計思路,并給出了重點模塊的設計與實現(xiàn)過程。
1.集群技術
集群技術是一種計算機系統(tǒng)之間連接的方式,運用它可以將分散的計算系統(tǒng)連接起來完成原來單獨節(jié)點的計算系統(tǒng)無法完成的任務。最早的集群系統(tǒng)就是出于這樣的并行處理的目的出現(xiàn)的。但是隨著計算機性能的快速發(fā)展和網絡不安全因素的增加,系統(tǒng)的穩(wěn)定性和可靠性是主要面臨解決的問題。于是開始使用集群方式將兩臺以上的設備連接起來,當整個集群系統(tǒng)中發(fā)生單點或局部多點故障時,集群中其他的計算機將自動來接替出故障的設備。最典型的例子就是雙機熱備份,兩臺一樣的計算機系統(tǒng),使用集群軟件連接起來,其中一臺作為另一臺的備份,當主機系統(tǒng)崩潰時,另一臺來接替它的任務。除此以外,利用集群系統(tǒng)的高并行性能進行復雜的科學、工程計算,也是非常有經濟價值的做法。
集群技術可以有效地解決開放系統(tǒng)的穩(wěn)定、抗壓和負載平衡問題,建立一個集群系統(tǒng)的主要目的在于:
(1)現(xiàn)有的應用得以保障。
(2)提高性價比。
(3)實現(xiàn)資源共享。
(4)提高靈活性和可擴展性。
(5)增強實用性和容錯性。
(6)靈活的可伸縮性。
2.設計目標及系統(tǒng)架構
設計一個基于Linux的集群系統(tǒng),它能夠不斷監(jiān)視集群中各臺服務器的負載狀況,并且將來自外網的Web請求轉發(fā)到內部網中的某一臺實際服務器上執(zhí)行。具體來說,擁有以下的功能:
(1)服務轉發(fā)。能接受來自外部網中的多種基于TCP/IP的服務請求,并將它們轉發(fā)到當前負載最輕的機器上執(zhí)行。
(2)動態(tài)負載平衡。平衡器能夠監(jiān)視內部網中的實際服務器的負載狀況并且找到負載最輕的機器。
(3)連接持續(xù)性。來自外網的同一客戶的所有請求必須轉發(fā)到內網中的同一臺服務器上進行處理。
該集群系統(tǒng)由調度機、服務器1、服務器2以及服務器N等機器組成。其中調度機作為內網和外網的接口。能夠接收外網的用戶請求.并將此用戶請求發(fā)送到服務器1到服務器N中的某臺機器上,當服務器處理完該請求以后,就將處理完的結果發(fā)送給調度機,然后再由調度機將結果返回給外部網的用戶。試驗環(huán)境中外網中的客戶機器的IP地址為211.80.248.100,調度機有兩個IP地址,一個是外網的211.80.248.99。一個是內網的192.168.1.1。調度機上運行的操作系統(tǒng)內核為Linux2.2.x。內部網中有N臺服務器,IP地址分別為192.168.1.2、192.168.1.3.。.192.168.1.N,上面運行的操作系統(tǒng)也是Linux操作系統(tǒng).都將192.168.1.1設為網關.并且都增加了通往211.80.248.0網絡的路由。負載調度的目的就是將客戶發(fā)向調度機的請求按照內網機器當前負載的情況分發(fā)到各個服務器上。
系統(tǒng)實現(xiàn)了IP級的負載平衡。當外網客戶向調度機發(fā)送一個請求時,在調度機的IP層對此請求的目標地址進行替換.將目標地址替換為內網中負載最輕的服務器的IP地址。然后將此請求再次轉發(fā)出去。當內網中的服務器處理完請求后.將處理結果發(fā)往調度機,調度機再次在IP層將目標地址替換為發(fā)出請求的外網中的客戶的IP地址。然后將回應轉發(fā)給客戶。
系統(tǒng)主要分為IP偽裝模塊、IP端口轉發(fā)模塊和調度模塊。其中IP端口轉發(fā)模塊的實現(xiàn)比較簡單。只需在Linux的某個內核文件中增加適當?shù)霓D發(fā)規(guī)則,并調用IP偽裝模塊的功能就能實現(xiàn),因此文中沒有詳細介紹該模塊。
3.IP偽裝
IP地址中的那些私有地址是無法直接與Internet上的機器通訊的,如果它們想與Internet上的機器通訊,需要采用網絡地址翻譯(NAT)機制。IP偽裝機制實際上就是一種M-1的動態(tài)網絡地址翻譯,它能夠將多個內網中的IP地址映射到一個與Internet相連接的外網IP地址上,這樣無法直接與Internet上的機器通訊的內網機器就可以通過這臺映射機器與外界進行聯(lián)絡。網絡地址端口翻譯是對網絡地址翻譯的一種擴展。它將許多網絡地址以及TCP/UDP端口翻譯為一個IP地址和TCP/UDP端口,本集群系統(tǒng)采用的就是網絡地址端口翻譯機制。為了使Linux支持IP偽裝,必須重新編譯Linux內核并安裝、激活IP偽裝模塊。
IP偽裝模塊的主要工作包括:
(1)接收內網發(fā)向外網的所有請求。
(2)內網中的連接請求通過調度機轉發(fā)到外網。
(3)將內網發(fā)向外網中的所有請求的源地址隱藏,使所有請求看上去都是由調度機發(fā)送的。
(4)建立HASH表來記錄已經建立的所有連接。
(5)接收外網對請求的回應并將其轉發(fā)到內網中的發(fā)出請求的機器上。
4.調度模塊
調度模塊是在應用層實現(xiàn)的,因為在應用層可以靈活地控制調度策略,可以采用靜態(tài)的調度策略,也可以采用動態(tài)的調度策略;同時可以提高系統(tǒng)的可擴展性,當Web站點的訪問量增大時,需要添加一臺新的服務器時,只要在應用程序中增加一項數(shù)據(jù)就可以實現(xiàn)。調度模塊的主要任務包括:
(1)調度機向各臺實際服務器發(fā)送收集負載信息的命令。
(2)各臺實際服務器分別運行獲取CPU運行隊列長度的程序。
(3)各臺機器將各自的CPU運行隊列長度信息回傳給調度機。
(4)調度機對各臺機器的CPU運行隊列長度進行比較,并選出CPU運行隊列長度最短的機器,認為此機器就是負最輕的機器。
(5)通過系統(tǒng)調用將負載最輕的機器的IP地址傳入IP端口轉發(fā)模塊。
5.總結
本集群系統(tǒng)實現(xiàn)了IP級的負載平衡,對IP報文進行目標地址改寫的工作主要在核心完成。這是因為這樣速度很快,省掉了從用戶到核心的通訊過程。該負載平衡系統(tǒng)主要具有以下功能:
(1)能夠對基于TCP/IP協(xié)議的多種服務如telnet、ftp、http等進行轉發(fā)。
(2)通過找出內網中當前負載最輕的服務器來響應用戶的請求,實現(xiàn)動態(tài)負載平衡。
(3)通過匹配Hash表項,來自同一個服務的多次請求能發(fā)送到同一臺內網的實際服務器上,保證連續(xù)性。
(4)能夠保證毫秒級的響應時間。
(5)用戶可以在應用程序中對內網的服務器的數(shù)目進行控制,具有良好的可伸縮性
(6)當某臺服務器出現(xiàn)故障時,能夠及時地發(fā)現(xiàn),具有良好的容錯性。
當然,該系統(tǒng)還有很多需要完善的地方。如調度機應該雙機備份等等。在大型的應用級集群服務系統(tǒng)的實施過程當中,設計人員需要考慮更多的要素:業(yè)務資源設計、資源監(jiān)測、負載均衡、故障轉移管理、可靠性、可用性和性能等若干方面。