背景
計算機技術已進入以網路為中心的計算時期。由於客戶/伺服器模型的簡單性、易管理性和易維護性,客戶/伺服器計算模式在網上被大量採用。在九十年代中期,全球資訊網(World Wide Web)的出現以其簡單操作方式將圖文並茂的網上信息帶給普通大眾,Web也正在從一種內容傳送機製成為一種服務平台,大量的服務和套用(如新聞服務、網上銀行、電子商務等)都是圍繞著Web進行。這促進Internet用戶劇烈增長和Internet流量爆炸式地增長,下圖顯示了1995至2000年與Internet連線主機數的變化情況,可見增長趨勢較以往更迅猛。
Internet的飛速發展給網路頻寬和伺服器帶來巨大的挑戰。從網路技術的發展來看,網路頻寬的增長遠高於處理器速度和記憶體訪問速度的增長,如100M Ethernet、ATM、Gigabit Ethernet等不斷地湧現,10Gigabit Ethernet即將就緒,在主幹網上密集波分復用(DWDM)將成為寬頻IP的主流技術,Lucent已經推出在一根光纖跑800Gigabit的WaveStar? OLS 800G產品。所以,越來越多的瓶頸會出現在伺服器端。很多研究顯示Gigabit Ethernet在伺服器上很難使得其吞吐率達到1Gb/s的原因是協定棧(TCP/IP)和作業系統的低效,以及處理器的低效,這需要對協定的處理方法、作業系統的調度和IO的處理作更深入的研究。在高速網路上,重新設計單台伺服器上的網路服務程式也是個重要課題。
比較熱門的站點會吸引前所未有的訪問流量,例如根據Yahoo的新聞發布,Yahoo已經每天傳送6.25億頁面。一些網路服務也收到巨額的流量,如American Online的Web Cache系統每天處理50.2億個用戶訪問Web的請求,每個請求的平均回響長度為5.5Kbytes。與此同時,很多網路服務因為訪問次數爆炸式地增長而不堪重負,不能及時處理用戶的請求,導致用戶進行長時間的等待,大大降低了服務質量。如何建立可伸縮的網路服務來滿足不斷增長的負載需求已成為迫在眉睫的問題。
大部分網站都需要提供每天24小時、每星期7天的服務,對電子商務等網站尤為突出,任何服務中斷和關鍵性的數據丟失都會造成直接的商業損失。例如,根據Dell的新聞發布,Dell現在每天在網站上的交易收入為一千四百萬美元,一個小時的服務中斷都會造成平均五十八萬美元的損失。所以,這對網路服務的可靠性提出了越來越高的要求。
現在Web服務中越來越多地使用CGI、動態主頁等CPU密集型套用,這對伺服器的性能有較高要求。未來的網路服務會提供更豐富的內容、更好的互動性、更高的安全性等,需要伺服器具有更強的CPU和I/O處理能力。例如,通過HTTPS(Secure HTTP)取一個靜態頁面需要的處理性能比通過HTTP的高一個數量級,HTTPS正在被電子商務站點廣為使用。所以,網路流量並不能說明全部問題,要考慮到套用本身的發展也需要越來越強的處理性能。
因此,對用硬體和軟體方法實現高可伸縮、高可用網路服務的需求不斷增長,這種需求可以歸結以下幾點:
可伸縮性(Scalability),當服務的負載增長時,系統能被擴展來滿足需求,且不降低服務質量。
高可用性(Availability),儘管部分硬體和軟體會發生故障,整個系統的服務必須是每天24小時每星期7天可用的。
可管理性(Manageability),整個系統可能在物理上很大,但應該容易管理。
價格有效性(Cost-effectiveness),整個系統實現是經濟的、易支付的。
伺服器集群系統
對稱多處理(Symmetric Multi-Processor,簡稱SMP)是由多個對稱的處理器、和通過匯流排共享的記憶體和I/O部件所組成的計算機系統。SMP是一種低並行度的結構,是通常所說的"緊耦合多處理系統",它的可擴展能力有限,但SMP的優點是單一系統映像(Single System Image),有共享的記憶體和I/O,易編程。
由於SMP的可擴展能力有限,SMP伺服器顯然不能滿足高可伸縮、高可用網路服務中的負載處理能力不斷增長需求。隨著負載不斷增長,會導致伺服器不斷地升級。這種伺服器升級有下列不足:
一是升級過程繁瑣,機器切換會使服務暫時中斷,並造成原有計算資源的浪費;
二是越往高端的伺服器,所花費的代價越大;
三是 SMP伺服器是單一故障點(Single Point of Failure),一旦該伺服器或套用軟體失效,會導致整個服務的中斷。
通過高性能網路或區域網路互聯的伺服器集群正成為實現高可伸縮的、高可用網路服務的有效結構。這種松耦合結構的伺服器集群系統有下列優點:
性能
網路服務的工作負載通常是大量相互獨立的任務,通過一組伺服器分而治之,可以獲得很高的整體性能。
性能/價格比
組成集群系統的PC伺服器或RISC伺服器和標準網路設備因為大規模生產降低成本,價格低,具有最高的性能/價格比。若整體性能隨著結點數的增長而接近線性增加,該系統的性能/價格比接近於PC伺服器。所以,這種松耦合結構比緊耦合的多處理器系統具有更好的性能/價格比。
可伸縮性
集群系統中的結點數目可以增長到幾千個,乃至上萬個,其伸縮性遠超過單台超級計算機。
高可用性
在硬體和軟體上都有冗餘,通過檢測軟硬體的故障,將故障禁止,由存活結點提供服務,可實現高可用性。
當然,用伺服器集群系統實現可伸縮網路服務也存在很多挑戰性的工作:
透明性(Transparency)
如何高效地使得由多個獨立計算機組成的松藕合的集群系統構成一個虛擬伺服器;客戶端應用程式與集群系統互動時,就像與一台高性能、高可用的伺服器互動一樣,客戶端無須作任何修改。部分伺服器的切入和切出不會中斷服務,這對用戶也是透明的。
性能(Performance)
性能要接近線性加速,這需要設計很好的軟硬體的體系結構,消除系統可能存在的瓶頸。將負載較均衡地調度到各台伺服器上。
高可用性(Availability)
需要設計和實現很好的系統資源和故障的監測和處理系統。當發現一個模組失敗時,要這模組上提供的服務遷移到其他模組上。在理想狀況下,這種遷移是即時的、自動的。
可管理性(Manageability)
要使集群系統變得易管理,就像管理一個單一映像系統一樣。在理想狀況下,軟硬體模組的插入能做到即插即用(Plug & Play)。
可程式性(Programmability)
在集群系統上,容易開發應用程式。
Linux Virtual Server項目
針對高可伸縮、高可用網路服務的需求,給出了基於IP層和基於內容請求分發的負載平衡調度解決方法,並在Linux核心中實現了這些方法,將一組伺服器構成一個實現可伸縮的、高可用網路服務的虛擬伺服器。
虛擬伺服器的體系結構如下圖所示,一組伺服器通過高速的區域網路或者地理分布的廣域網相互連線,在它們的前端有一個負載調度器(Load Balancer)。負載調度器能無縫地將網路請求調度到真實伺服器上,從而使得伺服器集群的結構對客戶是透明的,客戶訪問集群系統提供的網路服務就像訪問一台高性能、高可用的伺服器一樣。客戶程式不受伺服器集群的影響不需作任何修改。系統的伸縮性通過在服務機群中透明地加入和刪除一個節點來達到,通過檢測節點或服務進程故障和正確地重置系統達到高可用性。由於負載調度技術是在Linux核心中實現的,稱之為Linux虛擬伺服器(Linux Virtual Server)。
在1998年5月,章文嵩博士成立了Linux Virtual Server的自由軟體項目,進行Linux伺服器集群的開發工作。同時,Linux Virtual Server項目是中國國內最早出現的自由軟體項目之一。
Linux Virtual Server項目的目標:使用集群技術和Linux作業系統實現一個高性能、高可用的伺服器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
目前,LVS項目已提供了一個實現可伸縮網路服務的Linux Virtual Server框架,如下圖所示。在LVS框架中,提供了含有三種IP負載均衡技術的IP虛擬伺服器軟體IPVS、基於內容請求分發的核心Layer-7交換機KTCPVS和集群管理軟體。可以利用LVS框架實現高可伸縮的、高可用的Web、Cache、Mail和Media等網路服務;在此基礎上,可以開發支持龐大用戶數的、高可伸縮的、高可用的電子商務套用。
IP虛擬伺服器軟體ipvs
在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網路地址轉換(Network Address Translation)將一組伺服器構成一個高性能的、高可用的虛擬伺服器,稱之為VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡調度器產品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網路服務的非對稱性的基礎上,提出通過IP隧道實現虛擬伺服器的方法VS/TUN(Virtual Server via IP Tunneling),和通過直接路由實現虛擬伺服器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。所以,IPVS軟體實現了這三種IP負載均衡技術,它們的大致原理如下:
Virtual Server via Network Address Translation(VS/NAT)
通過網路地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實伺服器;真實伺服器的回響報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
Virtual Server via IP Tunneling(VS/TUN)
採用NAT技術時,由於請求和回響報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為了解決這個問題,調度器把請求報文通過IP隧道轉發至真實伺服器,而真實伺服器將回響直接返回給客戶,所以調度器只處理請求報文。由於一般網路服務應答比請求報文大許多,採用VS/TUN技術後,集群系統的最大吞吐量可以提高10倍。
Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請求報文的MAC地址,將請求傳送到真實伺服器,而真實伺服器將回響直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集群系統的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實伺服器也沒有必須支持IP隧道協定的要求,但是要求調度器與真實伺服器都有一塊網卡連在同一物理網段上。
針對不同的網路服務需求和伺服器配置,IPVS調度器實現了如下八種負載調度算法:
輪詢(Round Robin)
調度器通過"輪詢"調度算法將外部請求按順序輪流分配到集群中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連線數和系統負載。
加權輪詢(Weighted Round Robin)
調度器通過"加權輪詢"調度算法根據真實伺服器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的伺服器處理更多的訪問流量。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
最少連結(Least Connections)
調度器通過"最少連線"調度算法動態地將網路請求調度到已建立的連結數最少的伺服器上。如果集群系統的真實伺服器具有相近的系統性能,採用"最小連線"調度算法可以較好地均衡負載。
加權最少連結(Weighted Least Connections)
在集群系統中的伺服器性能差異較大的情況下,調度器採用"加權最少連結"調度算法最佳化負載均衡性能,具有較高權值的伺服器將承受較大比例的活動連線負載。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
基於局部性的最少連結(Locality-Based Least Connections)
"基於局部性的最少連結" 調度算法是針對目標IP位址的負載均衡,目前主要用於Cache集群系統。該算法根據請求的目標IP位址找出該目標IP位址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求傳送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用"最少連結"的原則選出一個可用的伺服器,將請求傳送到該伺服器。
帶複製的基於局部性最少連結(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連結"調度算法也是針對目標IP位址的負載均衡,目前主要用於Cache集群系統。它與LBLC算法的不同之處是它要維護從一個目標IP位址到一組伺服器的映射,而LBLC算法維護從一個目標IP位址到一台伺服器的映射。該算法根據請求的目標IP位址找出該目標IP位址對應的伺服器組,按"最小連線"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,將請求傳送到該伺服器,若伺服器超載;則按"最小連線"原則從這個集群中選出一台伺服器,將該伺服器加入到伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。
目標地址散列(Destination Hashing)
"目標地址散列"調度算法根據請求的目標IP位址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。
源地址散列(Source Hashing)
"源地址散列"調度算法根據請求的源IP位址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。
核心Layer-7交換機KTCPVS
在基於IP負載調度技術中,當一個TCP連線的初始SYN報文到達時,調度器就選擇一台伺服器,將報文轉發給它。此後通過查發報文的IP和TCP報文頭地址,保證此連線的後繼報文被轉發到該伺服器。這樣,IPVS無法檢查到請求的內容再選擇伺服器,這就要求後端伺服器組提供相同的服務,不管請求被傳送到哪一台伺服器,返回結果都是一樣的。但是,在有些套用中後端伺服器功能不一,有的提供HTML文檔,有的提供圖片,有的提供CGI,這就需要基於內容的調度 (Content-Based Scheduling)。
由於用戶空間TCP Gateway的開銷太大,在作業系統的核心中實現Layer-7交換方法,來避免用戶空間與核心空間的切換和記憶體複製的開銷。在Linux作業系統的核心中,實現了Layer-7交換,稱之為KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已經能對HTTP請求進行基於內容的調度,但它還不很成熟,在其調度算法和各種協定的功能支持等方面,有大量的工作需要做。
雖然套用層交換處理複雜,它的伸縮性有限,但套用層交換帶來以下好處:
相同頁面的請求被傳送到同一伺服器,可以提高單台伺服器的Cache命中率。
一些研究表明WEB訪問流中存在局部性。Layer-7交換可以充分利用訪問的局部性,將相同類型的請求傳送到同一台伺服器,使得每台伺服器收到的請求具有更好的相似性,可進一步提高單台伺服器的Cache命中率。
後端伺服器可運行不同類型的服務,如文檔服務,圖片服務,CGI服務和資料庫服務等。
LVS集群的特點
LVS集群的特點可以歸結如下:
功能
有實現三種IP負載均衡技術和八種連線調度算法的IPVS軟體。在IPVS內部實現上,採用了高效的Hash函式和垃圾回收機制,能正確處理所調度報文相關的ICMP訊息(有些商品化的系統反而不能)。虛擬服務的設定數目沒有限制,每個虛擬服務有自己的伺服器集。它支持持久的虛擬服務(如HTTP Cookie和HTTPS等需要該功能的支持),並提供詳盡的統計數據,如連線的處理速率和報文的流量等。針對大規模拒絕服務(Deny of Service)攻擊,實現了三種防衛策略。
有基於內容請求分發的套用層交換軟體KTCPVS,它也是在Linux核心中實現。有相關的集群管理軟體對資源進行監測,能及時將故障禁止,實現系統的高可用性。主、從調度器能周期性地進行狀態同步,從而實現更高的可用性。
適用性
後端伺服器可運行任何支持TCP/IP的作業系統,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。
負載調度器能夠支持絕大多數的TCP和UDP協定:
協定內容
TCP,HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等
UDP,DNS,NTP,ICP,視頻、音頻流播放協定等
無需對客戶機和伺服器作任何修改,可適用大多數Internet服務。
性能
LVS伺服器集群系統具有良好的伸縮性,可支持幾百萬個並發連線。配置100M網卡,採用VS/TUN或VS/DR調度技術,集群系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。
可靠性
LVS伺服器集群軟體已經在很多大型的、關鍵性的站點得到很好的套用,所以它的可靠性在真實套用得到很好的證實。有很多調度器運行一年多,未作一次重啟動。
軟體許可證
LVS集群軟體是按GPL(GNU Public License)許可證發行的自由軟體,這意味著可以得到軟體的原始碼,有權對其進行修改,但必須保證修改也是以GPL方式發行。
LVS集群的套用
LVS項目從成立到現在為止,受到不少關注,LVS集群系統已被套用於很多重負載的站點,系統已在美、英、德、澳等國的幾十個站點上正式使用。
一些沒有上百台機器和高速的網路來實際測試LVS的終極性能,所以舉LVS的套用實例來說明LVS的高性能和穩定性。所知的一些大型LVS套用實例如下:
英國國家JANET Cache Service(wwwcache.ja.net)是為英國150所以上的大學提供Web Cache服務。他們用28個結點的LVS集群代替了原有現50多台相互獨立的Cache伺服器,用他們的話說現在速度就跟夏天一樣,因為夏天是放假期間沒有很多人使用網路。
Linux的門戶站點(www.linux.com)用LVS將很多台VA Linux SMP伺服器組成高性能的WEB服務,已使用將近一年。
SourceForge(sourceforge.net)是在全球範圍內為開發源碼項目提供WEB、FTP、Mailing List和CVS等服務,他們也使用LVS將負載調度到十幾台機器上。
世界上最大的PC製造商之一採用了兩個LVS集群系統,一個在美洲,一個在歐洲,用於網上直銷系統。
以RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)使用由20台伺服器組成的LVS集群,為其全球用戶提供音頻視頻服務。在2000年3月時,整個集群系統已收到平均每秒20,000個連線的請求流。
NetWalk(www.netwalk.com)用多台伺服器構造LVS系統,提供1024個虛擬服務,其中本項目的一個美國鏡像站點(www.us.linuxvirtualserver.org)。
RedHat(www.redhat.com)從其6.1發行版起已包含LVS代碼,他們開發了一個LVS集群管理工具叫Piranha,用於控制LVS集群,並提供了一個圖形化的配置界面。
VA Linux(www.valinux.com)向客戶提供基於LVS的伺服器集群系統,並且提供相關的服務和支持。
TurboLinux的"世界一流Linux集群產品"TurboCluster實際上是基於LVS的想法和代碼的,只是他們在新聞發布和產品演示時忘了致謝。
紅旗Linux和中軟都提供基於LVS的集群解決方案,並在2000年9月召開的Linux World China 2000上展示。
在這裡,再引用兩位LVS用戶的評論,來進一步說明LVS的性能和可靠性。
"We tried virtually all of the commercial load balancers, LVS beats them all for reliability, cost, manageability, you-name-it." — Jerry Glomph Black, Director, Internet & Technical Operations, Real Networks, Se attle Washington, USA
http://archive.linuxvirtualserver.org/html/lvs-users/2000-03/msg00180.html
http://marc.theaimsgroup.com/?1=linux-virtual-server&m=95385809030794&w=2
"I can say without a doubt that lvs toasts F5/BIGIP solutions, at least in our real world implementations. I wouldn't trade a good lvs box for a Cisco Local Director either." — Drew Streib, Information Architect, VA Linux Systems, USA
LVS項目的開發進展與感觸
LVS項目於1998年5月在網站上發布IPVS第一個版本源程式,一直得到了來自 Internet 的用戶和開發者的鼓勵和支持。應該說,剛開始發布的程式是非常簡單的,由於用戶的使用、反饋和期望,這項工作的價值,並不斷地化時間對該軟體添加新功能和完善,其中也得到其他開發者的幫助,所以該軟體逐漸發展成為功能較齊全、有用的系統,這遠遠超出當初成立項目時的想像。
目前,正在進行的 LVS項目開發工作包括:
擴充IPVS對其他傳輸協定的支持,如AH(Authentication Header)和ESP(Encapsulating Security Payload )等,這樣IPVS調度器將實現IPSec的伺服器集群。
提供一個統一的、功能較完善、更靈活的LVS集群管理軟體。
擴充和改進KTCPVS的調度算法和多種協定的支持,使之功能較完備和系統更穩定。
在TCP粘合(TCP Splicing)和TCP轉移(TCP Handoff)等方面,做一些嘗試性工作,進一步改進LVS集群中的套用層調度。
開發者做自由軟體開發的幾點感觸:
一是通過自由軟體方式可以使得軟體具有頑強的生命力;以前也做過幾個獨立的系統,如在SUN上用 Common Lisp開發的知識庫系統和基於C++的對象資料庫系統,有些地方也是做得非常漂亮的(如元級反射機制和對象的關係處理),但因為種種原因這些軟體沒有以開放源碼方式發布,現在它們在我導師的軟體倉庫里已無人問津,我也已經忘記裡面的實現細節;而LVS項目是我做著玩的,一開始只是個很簡單的程式,通過自由軟體的發布和開發,它發展成一個有用的、功能較齊全的軟體,體現了自由軟體的強大生命力。二是通過自由軟體的集市開發,可以使得初始的想法不斷地深入,可以學到很多東西。三是做自由軟體後時間會更有效率,由於用戶的反饋和期待,會自覺不斷地改進和完善系統,於是沒有時間去玩遊戲和網上聊天。四是做自由軟體會使得你有一點點成就感,每當收到用戶的致謝和想到你的軟體在實際系統中運行,會有一點滿足。所以,行動起來吧,花一些時間做自由軟體,你會有意想不到的收穫。
LVS項目的網路資源
如果對LVS項目感興趣,請訪問Linux Vritual Server項目的主頁(http://www.LinuxVirtualServer.org/或者http://www.linux-vs.org/),可以獲得最新的 LVS 原始碼和有關運行軟體,及最新的文檔資料。
如果在使用LVS 的過程中遇到困難,請訂閱郵件列表[email protected]。
關於LVS開發創始人
章文嵩博士,開放源碼及Linux核心的開發者,著名的Linux集群項目--LVS(Linux Virtual Server)的創始人和主要開發人員。他目前工作於國家並行與分散式處理重點實驗室,主要從事集群技術、作業系統、對象存儲與資料庫的研究。他一直在自由軟體的開發上花費大量時間,並以此為樂。