歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

LVS分析(上)

摘要  主要介紹廣泛使用的Linux下的集群技術――IPVS(based IP Virtual Server)也叫做LVS(Linux Virtual Server)。通過對LVS的具體分析,了解LVS在體系結構設計,技術實現細節和應用中可能遇到的一些問題的詳細分析討論,逐步掌握在Linux下實現集群系統的基本知識    問題   我們知道,分布式計算機系統在成本、效益上的的高度可擴展性正是解決這個問題的有效思路。電子商務系統的管理員似乎遇到了這樣一個的問題:純粹的升級機器,既有性能的上限也有資金的困擾。    一方面,用戶總是不斷地追求更高的機器性能:更快的CPU、更大的內存、更多的磁盤空間、更高速的網絡接入、更迅捷的響應服務、更多更方便的功能……這一切最終轉化為用戶對單一服務器系統不斷地進行硬部件的升級。而真相往往是隱含在數字背後的:升級單一的服務器系統,其一次性投入和維護成本越來越高,但性能卻越來越無法令人滿意,性價比大大低於預期。    另一方面,無論在企業網、園區網還是在廣域網如Internet上,業務量的發展都超出了過去最樂觀的估計,熱門站點幾乎要同時處理數十萬的在線應用;新的應用層出不窮,即使按照當時最優配置建設的網絡,也很快會感到吃不消。另外,24×7小時的快速響應能力要求更加嚴格的商務應用環境。這一切,不僅對硬件,也對軟件平台提出了更高的要求:      可擴展性:通過前面的介紹我們知道,具有良好可擴展性的計算機系統能夠使得性能隨著成本的增加而線性的增長。並且很容易對其進行精簡或者擴充。   全天候的可用性支持:嚴格的商業環境需要軟硬件系統提供透明的、自動適應的可用性支持,保證24×7的系統正常運行。   可管理性:系統可以很龐大,但是要能夠易於管理。   相對的成本/性能優勢:構造這樣的系統,在投入成本上是經濟的,容易根據具體的需求定制合適價位的目標系統。     解決方法   這樣的系統,顯然無法通過單一的服務器系統來實現。單一系統不僅面臨著升級軟硬件系統而帶來的成本危機,而且在復雜的情況下,常常由於單點故障導致商業應用失效。這一切都大大加劇的商家的投入成本和運營維護成本。尤其是各個網絡的核心部分,其數據流量和計算強度之大,使得單一設備根本無法承擔,而如何在完成同樣功能的多個網絡設備之間實現合理的業務量分配,使之不致於出現一台設備過忙、而別的設備卻未充分發揮處理能力的情況,就成了一個問題。因此,就有必要采用的分布式技術解決成本、性能、可擴展能力等各方面的矛盾。    采用分布式體系結構設計的集群系統恰恰是解決這類問題的方法。通過相對總體成本較低的計算機群集,可以實現單一系統無法提供的強大性能。通過前面文章的分析我們了解到,集群系統在可擴展性、可用性、性能表現等幾個方面上,遠遠比單一系統或者並行計算機來得高效、經濟。這裡我們針對互聯網的應用情況提出具備以下特性的系統:      高可擴展性:支持大量的服務結點,可以根據應用規模不受限制的擴展結點數量。   高可用性:完整的結點容錯機制,可以自動識別結點失效和恢復事件。   高性能:基於策略的動態負載均衡,保證整體系統的性能最優化。     不妨稱之為“三高”系統。    現實中,有許多技術能夠實現這樣的系統。總的來說,他們都是借助某個層面上的負載均衡,將網絡請求化整為零,由大量集群的服務結點來共同分擔,以實現性能最大化的一項集群技術。集群的負載均衡技術總概    其實,負載均衡並非傳統意義上的“均衡”,一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改稱為“負載分擔”,也許更好懂一些。說得通俗一點,負載均衡在網絡中的作用就像輪流值日制度,把任務分給大家來完成,以免讓一個人累死累活。不過,這種意義上的均衡一般是靜態的,也就是事先確定的“輪值”策略 。    與輪流值日制度不同的是,動態負載均衡通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理分配出去。結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,後一種是指對分別放置在不同的地理位置、在不同的網絡及服務器群集之間作負載均衡。    集群中每個服務結點運行一個所需服務器程序的獨立拷貝,諸如Web、FTP、Telnet或e-mail服務器程序。對於某些服務(如運行在Web服務器上的那些服務)而言,程序的一個拷貝運行在群集內所有的主機上,而網絡負載均衡則將工作負載在這些主機間進行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網絡負載均衡允許網絡通訊量流到一個主機上,並在該主機發生故障時將通訊量移至其他主機。    負載均衡技術實現結構   在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以下任務:      解決網絡擁塞問題,服務就近提供,實現地理位置無關性   為用戶提供更好的訪問質量   提高服務器響應速度   提高服務器及其他資源的利用效率   避免了網絡關鍵部位出現單點失效     對一個網絡的負載均衡應用,可以從網絡的不同層次入手,具體情況要看對網絡瓶頸所在之處的具體分析。在多數的網絡應用中,都采取了B/S模式,中間還有代理服務器之類的中間層,如果從客戶端應用為起點縱向分析,參考前一章節的分層模型,我們把負載均衡技術的實現分為客戶端負載均衡技術、應用服務器技術、高層協議交換、網絡接入協議交換等幾種方式。     負載均衡的層次    ◆基於客戶端的負載均衡    這種模式指的是在網絡的客戶端運行特定的程序,該程序通過定期或不定期的收集服務器群的運行參數:CPU占用情況、磁盤IO、內存等動態信息,再根據某種選擇策略,找到可以提供服務的最佳服務器,將本地的應用請求發向它。如果負載信息采集程序發現服務器失效,則找到其他可替代的服務器作為服務選擇。整個過程對於應用程序來說是完全透明的,所有的工作都在運行時處理。因此這也是一種動態的負載均衡技術。    但這種技術存在通用性的問題。因為每一個客戶端都要安裝這個特殊的采集程序;並且,為了保證應用層的透明運行,需要針對每一個應用程序加以修改,通過動態鏈接庫或者嵌入的方法,將客戶端的訪問請求能夠先經過采集程序再發往服務器,以重定向的過程進行。對於每一個應用幾乎要對代碼進行重新開發,工作量比較大。    所以,這種技術僅在特殊的應用場合才使用到,比如在執行某些專有任務的時候,比較需要分布式的計算能力,對應用的開發沒有太多要求。另外,在采用Java構架模型中,常常使用這種模式實現分布式的負載均衡,因為java應用都基於虛擬機進行,可以在應用層和虛擬機之間設計一個中間層,處理負載均衡的工作。    ◆應用服務器的負載均衡技術    如果將客戶端的負載均衡層移植到某一個中間平台,形成三層結構,則客戶端應用可以不需要做特殊的修改,透明的通過中間層應用服務器將請求均衡到相應的服務結點。比較常見的實現手段就是反向代理技術。使用反向代理服務器,可以將請求均勻轉發給多台服務器,或者直接將緩存的數據返回客戶端,這樣的加速模式在一定程度上可以提升靜態網頁的訪問速度,從而達到負載均衡的目的。 使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。     反向代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對內的連接,因此對於特別高的連接請求,代理服務器的負載也就非常之大。反向代理能夠執行針對應用協議而優化的負載均衡策略,每次僅訪問最空閒的內部服務器來提供服務。但是隨著並發連接數量的增加,代理服務器本身的負載也變得非常大,最後反向代理服務器本身會成為服務的瓶頸。     ◆基於域名系統的負載均衡    NCSA的可擴展Web是最早使用動態DNS輪詢技術的web系統。在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。在很多知名的web站點都使用了這個技術:包括早期的yahoo站點、163等。動態DNS輪詢實現起來簡單,無需復雜的配置和管理,一般支持bind8.2以上的類unix系統都能夠運行,因此廣為使用。    DNS負載均衡是一種簡單而有效的方法,但是存在不少問題。    首先域名服務器無法知道服務結點是否有效,如果服務結點失效,余名系統依然會將域名解析到該節點上,造成用戶訪問失效。    其次,由於DNS的數據刷新時間TTL(Time to LIVE)標志,一旦超過這個TTL,其他DNS服務器就需要和這個服務器交互,以重新獲得地址數據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使TTL盡量短,不同地方的DNS服務器能更新對應的地址,達到隨機獲得地址。然而將TTL設置得過短,將使DNS流量大增,而造成額外的網絡問題。    最後,它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的客戶計算機能均勻獲得不同的地址。例如,用戶A可能只是浏覽幾個網頁,而用戶B可能進行著大量的下載,由於域名系統沒有合適的負載策略,僅僅是簡單的輪流均衡,很容易將用戶A的請求發往負載輕的站點,而將B的請求發往負載已經很重的站點。因此,在動態平衡特性上,動態DNS輪詢的效果並不理想。    ◆高層協議內容交換技術    除了上述的幾種負載均衡方式之外,還有在協議內部支持負載均衡能力的技術,即URL交換或七層交換,提供了一種對訪問流量的高層控制方式。Web內容交換技術檢查所有的HTTP報頭,根據報頭內的信息來執行負載均衡的決策。例如可以根據這些信息來確定如何為個人主頁和圖像數據等內容提供服務,常見的有HTTP協議中的重定向能力等。    HTTP運行於TCP連接的最高層。客戶端通過恆定的端口號80的TCP服務直接連接到服務器,然後通過TCP連接向服務器端發送一個HTTP請求。協議交換根據內容策略來控制負載,而不是根據TCP端口號,所以不會造成訪問流量的滯留。    由於負載平衡設備要把進入的請求分配給多個服務器,因此,它只能在TCP連接時建立,且HTTP請求通過後才能確定如何進行負載的平衡。當一個網站的點擊率達到每秒上百甚至上千次時,TCP連接、HTTP報頭信息的分析以及進程的時延已經變得很重要了,要盡一切可能提高這幾各部份的性能。在HTTP請求和報頭中有很多對負載平衡有用的信息。我們可以從這些信息中獲知客戶端所請求的URL和網頁,利用這個信息,負載平衡設備就可以將所有的圖像請求引導到一個圖像服務器,或者根據URL的數據庫查詢內容調用CGI程序,將請求引導到一個專用的高性能數據庫服務器。    如果網絡管理員熟悉內容交換技術,他可以根據HTTP報頭的cookie字段來使用Web內容交換技術改善對特定客戶的服務,如果能從HTTP請求中找到一些規律,還可以充分利用它作出各種決策。除了TCP連接表的問題外,如何查找合適的HTTP報頭信息以及作出負載平衡決策的過程,是影響Web內容交換技術性能的重要問題。如果Web服務器已經為圖像服務、SSL對話、數據庫事務服務之類的特殊功能進行了優化,那麼,采用這個層次的流量控制將可以提高網絡的性能。    ◆網絡接入協議交換    大型的網絡一般都是由大量專用技術設備組成的,如包括防火牆、路由器、第3、4層交換機、負載均衡設備、緩沖服務器和Web服務器等。如何將這些技術設備有機地組合在一起,是一個直接影響到網絡性能的關鍵性問題。現在許多交換機提供第四層交換功能,對外提供一個一致的IP地址,並映射為多個內部IP地址,對每次TCP和UDP連接請求,根據其端口號,按照即定的策略動態選擇一個內部地址,將數據包轉發到該地址上,達到負載均衡的目的。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。由於地址轉換相對來講比較接近網絡的低層,因此就有可能將它集成在硬件設備中,通常這樣的硬件設備是局域網交換機。     當前局域網交換機所謂的第四層交換技術,就是按照IP地址和TCP端口進行虛擬連接的交換,直接將數據包發送到目的計算機的相應端口。通過交換機將來自外部的初始連接請求,分別與內部的多個地址相聯系,此後就能對這些已經建立的虛擬連接進行交換。因此,一些具備第四層交換能力的局域網交換機,就能作為一個硬件負載均衡器,完成服務器的負載均衡。     由於第四層交換基於硬件芯片,因此其性能非常優秀,尤其是對於網絡傳輸速度和交換速度遠遠超過普通的數據包轉發。然而,正因為它是使用硬件實現的,因此也不夠靈活,僅僅能夠處理幾種最標准的應用協議的負載均衡,如HTTP 。當前負載均衡主要用於解決服務器的處理能力不足的問題,因此並不能充分發揮交換機帶來的高網絡帶寬的優點。     使用基於操作系統的第四層交換技術因此孕育而生。通過開放源碼的Linux,將第四層交換的核心功能做在系統的核心層,能夠在相對高效穩定的核心空間進行IP包的數據處理工作,其效率不比采用專有OS的硬件交換機差多少。同時又可以在核心層或者用戶層增加基於交換核心的負載均衡策略支持,因此在靈活性上遠遠高於硬件系統,而且造價方面有更好的優勢。    下面我們將介紹基於IP協議的負載均衡解決方案LVS技術框架和實現方法。  




 



Copyright © Linux教程網 All Rights Reserved