章文嵩 (wensong@linux-vs.org)
2002 年 3 月html
本文介紹了Linux服務器集羣系統--LVS(Linux Virtual Server)項目的產生背景和目標,並描述了LVS服務器集羣框架及目前提供的軟件,列舉LVS集羣系統的特色和一些實際應用,最後,本文談論了LVS項目的開發進展和開發感觸。
1. 背景前端
當今計算機技術已進入以網絡爲中心的計算時期。因爲客戶/服務器模型的簡單性、易管理性和易維護性,客戶/服務器計算模式在網上被大量採用。在九十年代中 期,萬維網(World Wide Web)的出現以其簡單操做方式將圖文並茂的網上信息帶給普通大衆,Web也正在從一種內容發送機製成爲一種服務平臺,大量的服務和應用(如新聞服務、網 上銀行、電子商務等)都是圍繞着Web進行。這促進Internet用戶劇烈增加和Internet流量爆炸式地增加,圖1顯示了1995至2000年與 Internet鏈接主機數的變化狀況[1],可見增加趨勢較以往更迅猛。linux
Internet的飛速發展給網絡帶寬和服務器帶來巨大的挑戰。從網絡技術的發展來看,網絡帶寬的增加遠高於處理器速度和內存訪問速度的增加,如100M Ethernet、ATM、Gigabit Ethernet等不斷地涌現,10Gigabit Ethernet即將就緒,在主幹網上密集波分複用(DWDM)將成爲寬帶IP的主流技術[2,3],Lucent已經推出在一根光纖跑800Gigabit的WaveStar? OLS 800G產品[4]。因此,咱們深信愈來愈多的瓶頸會出如今服務器端。不少研究顯示Gigabit Ethernet在服務器上很難使得其吞吐率達到1Gb/s的緣由是協議棧(TCP/IP)和操做系統的低效,以及處理器的低效,這須要對協議的處理方法、操做系統的調度和IO的處理做更深刻的研究。在高速網絡上,從新設計單臺服務器上的網絡服務程序也是個重要課題。web
比較熱門的站點會吸引史無前例的訪問流量,例如根據Yahoo的新聞發佈,Yahoo已經天天發送6.25億頁面[5]。一些網絡服務也收到鉅額的流量, 如American Online的Web Cache系統天天處理50.2億個用戶訪問Web的請求,每一個請求的平均響應長度爲5.5Kbytes。與此同時,不少網絡服務由於訪問次數爆炸式地增 長而不堪重負,不能及時處理用戶的請求,致使用戶進行長時間的等待,大大下降了服務質量。如何創建可伸縮的網絡服務來知足不斷增加的負載需求已成爲迫在眉 睫的問題。算法
大部分網站都須要提供天天24小時、每星期7天的服務,對電子商務等網站尤其突出,任何服務中斷和關鍵性的數據丟失都會形成直接的商業損失。例如,根據 Dell的新聞發佈[6],Dell如今天天在網站上的交易收入爲一千四百萬美圓,一個小時的服務中斷都會形成平均五十八萬美圓的損失。因此,這對網絡服 務的可靠性提出了愈來愈高的要求。數據庫
如今Web服務中愈來愈多地使用CGI、動態主頁等CPU密集型應用,這對服務器的性能有較高要求。將來的網絡服務會提供更豐富的內容、更好的交互性、更高的安全性等,須要服務器具備更強的CPU和I/O處理能力。例如,經過HTTPS(Secure HTTP)取一個靜態頁面須要的處理性能比經過HTTP的高一個數量級,HTTPS正在被電子商務站點廣爲使用。因此,網絡流量並不能說明所有問題,要考慮到應用自己的發展也須要愈來愈強的處理性能。編程
所以,對用硬件和軟件方法實現高可伸縮、高可用網絡服務的需求不斷增加,這種需求能夠歸結如下幾點:後端
對稱多處理(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)
在集羣系統上,容易開發應用程序。
針對高可伸縮、高可用網絡服務的需求,咱們給出了基於IP層和基於內容請求分發的負載平衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。
虛擬服務器的體系結構如圖2所示,一組服務器經過高速的局域網或者地理分佈的廣域網相互鏈接,在它們的前端有一個負載調度器(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框架,如圖3所示。在LVS框架中,提供了含有三種IP負載均衡技術的IP虛擬服務器軟件IPVS、基於內容請求分發的內核Layer-7交 換機KTCPVS和集羣管理軟件。能夠利用LVS框架實現高可伸縮的、高可用的Web、Cache、Mail和Media等網絡服務;在此基礎上,能夠開 發支持龐大用戶數的、高可伸縮的、高可用的電子商務應用。
3.1 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)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
3.2 內核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請求進行基於內容的調度,但它還不很成熟,在其調度算法和各類協議的功能支持等方面,有大量的工做須要作。
雖然應用層交換處理複雜,它的伸縮性有限,但應用層交換帶來如下好處:
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,視頻、音頻流播放協議等 |
性能
LVS服務器集羣系統具備良好的伸縮性,可支持幾百萬個併發鏈接。配置100M網卡,採用VS/TUN或VS/DR調度技術,集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。
可靠性
LVS服務器集羣軟件已經在不少大型的、關鍵性的站點獲得很好的應用,因此它的可靠性在真實應用獲得很好的證明。有不少調度器運行一年多,未做一次重啓動。
軟件許可證
LVS集羣軟件是按GPL(GNU Public License)許可證發行的自由軟件,這意味着你能夠獲得軟件的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。
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
http://archive.linuxvirtualserver.org/html/lvs-users/2000-03/msg00178.html
http://marc.theaimsgroup.com/?1=linux-virtual-server&m=95385694529750&w=2
LVS項目於1998年5月在網站上發佈IPVS第一個版本源程序,一直獲得了來自 Internet 的用戶和開發者的鼓勵和支持。應該說,剛開始發佈的程序是很是簡單的,因爲用戶的使用、反饋和指望,讓我以爲這項工做的價值,並不斷地化時間對該軟件添加 新功能和完善,其中也獲得其餘開發者的幫助,因此該軟件逐漸發展成爲功能較齊全、有用的系統,這遠遠超出我當初成立項目時的想象。在這裏,我要感謝 Julian Anastasov提供了不少系統的Bug fixes和改進,Joseph Mack博士編寫了LVS HOWTO文檔;還感謝一些廠商贊助我開發(如硬件設備等),和贊助我屢次出國做相關的技術報告。
目前,正在進行的 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項目感興趣,請訪問Linux Vritual Server項目的主頁(http://www.LinuxVirtualServer.org/或者http://www.linux-vs.org/),你能夠得到最新的 LVS 源代碼和有關運行軟件,及最新的文檔資料。
若是你在使用LVS 的過程當中遇到困難,請訂閱咱們的郵件列表lvs-users@LinuxVirtualServer.org,提問、解答或者發表你的高見。
[1] Information Navigators, Internet Growth Charts, http://navigators.com/stats.html
[2] Srinivasan Seetharaman. IP over DWDM. http://www.cis.ohio-state.edu-/~jain/cis788-99/ip_dwdm/
[3] Lucent Technologies. Web ProForum tutorial: DWDM. October 1999,http://www.webproforum.com/acrobat/dwdm.pdf
[4] Lucent Technologies. Lucent Technologies announces record-breaking 320-channel optical networking system. April 2000, http://www.lucent.com/press/0400/000417.nsb.html
[5] Yahoo! Inc., The Yahoo! Directory and Web Services, http://www.yahoo.com/
[6] Dell Inc. http://www.dell.com/
9. 關於做者
章文嵩博士,開放源碼及Linux內核的開發者,著名的Linux集羣項目--LVS(Linux Virtual Server)的創始人和主要開發人員。他目前工做於國家並行與分佈式處理重點實驗室,主要從事集羣技術、操做系統、對象存儲與數據庫的研究。他一直在自由軟件的開發上花費大量時間,並以此爲樂。