Linux服務器集群系統(tǒng)之實現(xiàn)虛擬服務器的相關方法
Linux服務器集群系統(tǒng)是當代許多公司采用的解決方案,Linux服務器集群通過多臺機器連接起來,處理復雜的問題??梢詫⑼瑯嫽蛘弋悩嫷挠嬎銠C連接起來,協(xié)同完成特定的任務。這樣就構成了集群。LVS是Linux virtual server的縮寫,他的意思是Linux虛擬機服務。本文主要介紹的是基于Linux下的集群系統(tǒng)。
實現(xiàn)虛擬服務的相關方法:
在網絡服務中,一端是客戶程序,另一端是服務程序,在中間可能有代理程序。由此看來,可以在不同的層次上實現(xiàn)多臺服務器的負載均衡。用集群解決網絡服務性能問題的現(xiàn)有方法主要分為以下四類。
1. 基于RR-DNS的解決方法
NCSA的可伸縮的WEB服務器系統(tǒng)就是最早基于RR-DNS(Round-Robin Domain Name System)的原型系統(tǒng)[1,2]。它的結構和工作流程如下圖所示:
圖1:基于RR-DNS的可伸縮WEB服務器
有一組WEB服務器,他們通過分布式文件系統(tǒng)AFS(Andrew File System)來共享所有的HTML文檔。這組服務器擁有相同的域名(如www.ncsa.uiuc.edu),當用戶按照這個域名訪問時, RR-DNS服務器會把域名輪流解析到這組服務器的不同IP地址,從而將訪問負載分到各臺服務器上。
這種方法帶來幾個問題。***,域名服務器是一個分布式系統(tǒng),是按照一定的層次結構組織的。當用戶就域名解析請求提交給本地的域名服務器,它會因不能直接解析而向上一級域名服務器提交,上一級域名服務器再依次向上提交,直到RR-DNS域名服器把這個域名解析到其中一臺服務器的IP地址??梢?,從用戶到RR-DNS間存在多臺域名服器,而它們都會緩沖已解析的名字到IP地址的映射,這會導致該域名服器組下所有用戶都會訪問同一WEB服務器,出現(xiàn)不同WEB服務器間嚴重的負載不平衡。為了保證在域名服務器中域名到IP地址的映射不被長久緩沖,RR-DNS在域名到IP地址的映射上設置一個TTL(Time To Live)值,過了這一段時間,域名服務器將這個映射從緩沖中淘汰。當用戶請求,它會再向上一級域名服器提交請求并進行重新影射。這就涉及到如何設置這個TTL值,若這個值太大,在這個TTL期間,很多請求會被映射到同一臺WEB服務器上,同樣會導致嚴重的負載不平衡。若這個值太小,例如是0,會導致本地域名服務器頻繁地向RR-DNS提交請求,增加了域名解析的網絡流量,同樣會使RR-DNS服務器成為系統(tǒng)中一個新的瓶頸。
第二,用戶機器會緩沖從名字到IP地址的映射,而不受TTL值的影響,用戶的訪問請求會被送到同一臺WEB服務器上。由于用戶訪問請求的突發(fā)性和訪問方式不同,例如有的人訪問一下就離開了,而有的人訪問可長達幾個小時,所以各臺服務器間的負載仍存在傾斜(Skew)而不能控制。假設用戶在每個會話中平均請求數(shù)為20,負載***的服務器獲得的請求數(shù)額高于各服務器平均請求數(shù)的平均比率超過百分之三十。也就是說,當TTL值為0時,因為用戶訪問的突發(fā)性也會存在著較嚴重的負載不平衡。
第三,系統(tǒng)的可靠性和可維護性差。若一臺服務器失效,會導致將域名解析到該服務器的用戶看到服務中斷,即使用戶按“Reload”按鈕,也無濟于事。系統(tǒng)管理員也不能隨時地將一臺服務器切出服務進行系統(tǒng)維護,如進行操作系統(tǒng)和應用軟件升級,這需要修改RR-DNS服務器中的IP地址列表,把該服務器的IP地址從中劃掉,然后等上幾天或者更長的時間,等所有域名服器將該域名到這臺服務器的映射淘汰,和所有映射到這臺服務器的客戶機不再使用該站點為止。
2. 基于客戶端的解決方法
基于客戶端的解決方法需要每個客戶程序都有一定的服務器集群的知識,進而把以負載均衡的方式將請求發(fā)到不同的服務器。例如,Netscape Navigator瀏覽器訪問Netscape的主頁時,它會隨機地從一百多臺服務器中挑選第N臺,***將請求送往wwwN.netscape.com。然而,這不是很好的解決方法,Netscape只是利用它的Navigator避免了RR-DNS解析的麻煩,當使用IE等其他瀏覽器不可避免的要進行RR-DNS解析。
Smart Client[3]是Berkeley做的另一種基于客戶端的解決方法。服務提供一個Java Applet在客戶方瀏覽器中運行,Applet向各個服務器發(fā)請求來收集服務器的負載等信息,再根據這些信息將客戶的請求發(fā)到相應的服務器。高可用性也在Applet中實現(xiàn),當服務器沒有響應時,Applet向另一個服務器轉發(fā)請求。這種方法的透明性不好,Applet向各服務器查詢來收集信息會增加額外的網絡流量,不具有普遍的適用性。
3. 基于應用層負載均衡調度的解決方法
多臺服務器通過高速的互聯(lián)網絡連接成一個集群系統(tǒng),在前端有一個基于應用層的負載調度器。當用戶訪問請求到達調度器時,請求會提交給作負載均衡調度的應用程序,分析請求,根據各個服務器的負載情況,選出一臺服務器,重寫請求并向選出的服務器訪問,取得結果后,再返回給用戶。
應用層負載均衡調度的典型代表有Zeus負載調度器[4]、pWeb[5]、Reverse-Proxy[6]和SWEB[7]等。Zeus負載調度器是Zeus公司的商業(yè)產品,它是在Zeus Web服務器程序改寫而成的,采用單進程事件驅動的服務器結構。pWeb就是一個基于Apache 1.1服務器程序改寫而成的并行WEB調度程序,當一個HTTP請求到達時,pWeb會選出一個服務器,重寫請求并向這個服務器發(fā)出改寫后的請求,等結果返回后,再將結果轉發(fā)給客戶。Reverse-Proxy利用Apache 1.3.1中的Proxy模塊和Rewrite模塊實現(xiàn)一個可伸縮WEB服務器,它與pWeb的不同之處在于它要先從Proxy的cache中查找后,若沒有這個副本,再選一臺服務器,向服務器發(fā)送請求,再將服務器返回的結果轉發(fā)給客戶。SWEB是利用HTTP中的redirect錯誤代碼,將客戶請求到達一臺WEB服務器后,這個WEB服務器根據自己的負載情況,自己處理請求,或者通過redirect錯誤代碼將客戶引到另一臺WEB服務器,以實現(xiàn)一個可伸縮的WEB服務器。
基于應用層負載均衡調度的多服務器解決方法也存在一些問題。***,系統(tǒng)處理開銷特別大,致使系統(tǒng)的伸縮性有限。當請求到達負載均衡調度器至處理結束時,調度器需要進行四次從核心到用戶空間或從用戶空間到核心空間的上下文切換和內存復制;需要進行二次TCP連接,一次是從用戶到調度器,另一次是從調度器到真實服務器;需要對請求進行分析和重寫。這些處理都需要不小的CPU、內存和網絡等資源開銷,且處理時間長。所構成系統(tǒng)的性能不能接近線性增加的,一般服務器組增至3或4臺時,調度器本身可能會成為新的瓶頸。所以,這種基于應用層負載均衡調度的方法的伸縮性極其有限。第二,基于應用層的負載均衡調度器對于不同的應用,需要寫不同的調度器。以上幾個系統(tǒng)都是基于HTTP協(xié)議,若對于FTP、Mail、POP3等應用,都需要重寫調度器。
4. 基于IP層負載均衡調度的解決方法
用戶通過虛擬IP地址(Virtual IP Address)訪問服務時,訪問請求的報文會到達負載調度器,由它進行負載均衡調度,從一組真實服務器選出一個,將報文的目標地址Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,***將報文發(fā)送給選定的服務器。真實服務器的回應報文經過負載調度器時,將報文的源地址和源端口改為Virtual IP Address和相應的端口,再把報文發(fā)給用戶。Berkeley的MagicRouter[8]、Cisco的LocalDirector、Alteon的ACEDirector和F5的Big/IP等都是使用網絡地址轉換方法。MagicRouter是在Linux 1.3版本上應用快速報文插入技術,使得進行負載均衡調度的用戶進程訪問網絡設備接近核心空間的速度,降低了上下文切換的處理開銷,但并不徹底,它只是研究的原型系統(tǒng),沒有成為有用的系統(tǒng)存活下來。Cisco的LocalDirector、Alteon的ACEDirector和F5的Big/IP是非常昂貴的商品化系統(tǒng),它們支持部分TCP/UDP協(xié)議,有些在ICMP處理上存在問題。
IBM的TCP Router[9]使用修改過的網絡地址轉換方法在SP/2系統(tǒng)實現(xiàn)可伸縮的WEB服務器。TCP Router修改請求報文的目標地址并把它轉發(fā)給選出的服務器,服務器能把響應報文的源地址置為TCP Router地址而非自己的地址。這種方法的好處是響應報文可以直接返回給客戶,壞處是每臺服務器的操作系統(tǒng)內核都需要修改。IBM的NetDispatcher[10]是TCP Router的后繼者,它將報文轉發(fā)給服務器,而服務器在non-ARP的設備配置路由器的地址。這種方法與LVS集群中的VS/DR類似,它具有很高的可伸縮性,但一套在IBM SP/2和NetDispatcher需要上百萬美金。總的來說,IBM的技術還挺不錯的。
在貝爾實驗室的ONE-IP[11]中,每臺服務器都獨立的IP地址,但都用IP Alias配置上同一VIP地址,采用路由和廣播兩種方法分發(fā)請求,服務器收到請求后按VIP地址處理請求,并以VIP為源地址返回結果。這種方法也是為了避免回應報文的重寫,但是每臺服務器用IP Alias配置上同一VIP地址,會導致地址沖突,有些操作系統(tǒng)會出現(xiàn)網絡失效。通過廣播分發(fā)請求,同樣需要修改服務器操作系統(tǒng)的源碼來過濾報文,使得只有一臺服務器處理廣播來的請求。
微軟的Windows NT負載均衡服務(Windows NT Load Balancing Service,WLBS)[12]是1998年底收購Valence Research公司獲得的,它與ONE-IP中的基于本地過濾方法一樣。WLBS作為過濾器運行在網卡驅動程序和TCP/IP協(xié)議棧之間,獲得目標地址為VIP的報文,它的過濾算法檢查報文的源IP地址和端口號,保證只有一臺服務器將報文交給上一層處理。但是,當有新結點加入和有結點失效時,所有服務器需要協(xié)商一個新的過濾算法,這會導致所有有Session的連接中斷。同時,WLBS需要所有的服務器有相同的配置,如網卡速度和處理能力。
【編輯推薦】
- Linux集群原理與安裝配置匯總
- “懶惰”Linux集群管理員的11個秘訣
- 圖文詳解 文件柜內DIY自己的Linux集群機
- 大型Linux集群的安裝節(jié)點和管理
- 大型Linux集群簡介和硬件配置
- 高性能Linux集群基礎知識