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

基於linux的負載均衡技術

前言  當前,無論在企業網、園區網還是在廣域網如Internet上,業務量的發展都超出了過去最樂觀的估計,上網熱潮風起雲湧,新的應用層出不窮,即使按照當時最優配置建設的網絡,也很快會感到吃不消。 尤其是各個網絡的核心部分,其數據流量和計算強度之大,使得單一設備根本無法承擔,而如何在完成同樣功能的多個網絡設備之間實現合理的業務量分配,使之不致於出現一台設備過忙、而別的設備卻未充分發揮處理能力的情況,就成了一個問題,負載均衡機制也因此應運而生。    負載均衡建立在現有網絡結構之上,它提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以下任務:解決網絡擁塞問題,服務就近提供,實現地理位置無關性;為用戶提供更好的訪問質量;提高服務器響應速度;提高服務器及其他資源的利用效率;避免了網絡關鍵部位出現單點失效。    定義  其實,負載均衡並非傳統意義上的“均衡”,一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改稱為“負載分擔”,也許更好懂一些。說得通俗一點,負載均衡在網絡中的作用就像輪流值日制度,把任務分給大家來完成,以免讓一個人累死累活。不過,這種意義上的均衡一般是靜態的,也就是事先確定的“輪值”策略。    與輪流值日制度不同的是,動態負載均衡通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理分配出去。結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,後一種是指對分別放置在不同的地理位置、在不同的網絡及服務器群集之間作負載均衡。    服務器群集中每個服務結點運行一個所需服務器程序的獨立拷貝,諸如Web、FTP、Telnet或e-mail服務器程序。對於某些服務(如運行在Web服務器上的那些服務)而言,程序的一個拷貝運行在群集內所有的主機上,而網絡負載均衡則將工作負載在這些主機間進行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網絡負載均衡允許網絡通訊量流到一個主機上,並在該主機發生故障時將通訊量移至其他主機。    負載均衡技術實現結構  在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以下任務:    ◆解決網絡擁塞問題,服務就近提供,實現地理位置無關性  ◆為用戶提供更好的訪問質量  ◆提高服務器響應速度  ◆提高服務器及其他資源的利用效率  ◆避免了網絡關鍵部位出現單點失效    廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。對一個網絡的負載均衡應用,從網絡的不同層次入手,根據網絡瓶頸所在進行具體分析。從客戶端應用為起點縱向分析,參考OSI的分層模型,我們把負載均衡技術的實現分為客戶端負載均衡技術、應用服務器技術、高層協議交換、網絡接入協議交換等幾種方式。    負載均衡的層次  ◆基於客戶端的負載均衡    這種模式指的是在網絡的客戶端運行特定的程序,該程序通過定期或不定期的收集服務器群的運行參數: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的硬件交換機差多少。同時又可以在核心層或者用戶層增加基於交換核心的負載均衡策略支持,因此在靈活性上遠遠高於硬件系統,而且造價方面有更好的優勢。    ◆傳輸鏈路聚合    為了支持與日俱增的高帶寬應用,越來越多的PC機使用更加快速的鏈路連入網絡。而網絡中的業務量分布是不平衡的,核心高、邊緣低,關鍵部門高、一般部門低。伴隨計算機處理能力的大幅度提高,人們對多工作組局域網的處理能力有了更高的要求。當企業內部對高帶寬應用需求不斷增大時(例如Web訪問、文檔傳輸及內部網連接),局域網核心部位的數據接口將產生瓶頸問題,瓶頸延長了客戶應用請求的響應時間。並且局域網具有分散特性,網絡本身並沒有針對服務器的保護措施,一個無意的動作(像一腳踢掉網線的插頭)就會讓服務器與網絡斷開。    通常,解決瓶頸問題采用的對策是提高服務器鏈路的容量,使其超出目前的需求。例如可以由快速以太網升級到千兆以太網。對於大型企業來說,采用升級技術是一種長遠的、有前景的解決方案。然而對於許多企業,當需求還沒有大到非得花費大量的金錢和時間進行升級時,使用升級技術就顯得大材小用了。在這種情況下,鏈路聚合技術為消除傳輸鏈路上的瓶頸與不安全因素提供了成本低廉的解決方案。    鏈路聚合技術,將多個線路的傳輸容量融合成一個單一的邏輯連接。當原有的線路滿足不了需求,而單一線路的升級又太昂貴或難以實現時,就要采用多線路的解決方案了。目前有5種鏈路聚合技術可以將多條線路“捆綁”起來。    同步IMUX系統工作在T1/E1的比特層,利用多個同步的DS1信道傳輸數據,來實現負載均衡。    IMA是另外一種多線路的反向多路復用技術,工作在信元級,能夠運行在使用ATM路由器的平台上。    用路由器來實現多線路是一種流行的鏈路聚合技術,路由器可以根據已知的目的地址的緩沖(cache)大小,將分組分配給各個平行的鏈路,也可以采用循環分配的方法來向線路分發分組。    多重鏈路PPP,又稱MP或MLP,是應用於使用PPP封裝數據鏈路的路由器負載平衡技術。MP可以將大的PPP數據包分解成小的數據段,再將其分發給平行的多個線路,還可以根據當前的鏈路利用率來動態地分配撥號線路。這樣做盡管速度很慢,因為數據包分段和附加的緩沖都增加時延,但可以在低速的線路上運行得很好。    還有一種鏈路聚合發生在服務器或者網橋的接口卡上,通過同一塊接口卡的多個端口映射到相同的IP地址,均衡本地的以太網流量以實現在服務器上經過的流量成倍增加。目前市面上的產品有intel和dlink的多端口網卡,,一般在一塊網卡上綁定4個100M以太端口,大大提高了服務器的網絡吞吐量。不過這項技術由於需要操作系統驅動層的支持,只能在win2000和linux下實現。    鏈路聚合系統增加了網絡的復雜性,但也提高了網絡的可靠性,使人們可以在服務器等關鍵LAN段的線路上采用冗余路由。對於IP系統,可以考慮采用VRRP(虛擬路由冗余協議)。VRRP可以生成一個虛擬缺省的網關地址,當主路由器無法接通時,備用路由器就會采用這個地址,使LAN通信得以繼續。總之,當主要線路的性能必需提高而單條線路的升級又不可行時,可以采用鏈路聚合技術。    ◆帶均衡策略的服務器群集    如今,服務器必須具備提供大量並發訪問服務的能力,其處理能力和I/O能力已經成為提供服務的瓶頸。如果客戶的增多導致通信量超出了服務器能承受的范圍,那麼其結果必然是——宕機。顯然,單台服務器有限的性能不可能解決這個問題,一台普通服務器的處理能力只能達到每秒幾萬個到幾十萬個請求,無法在一秒鐘內處理上百萬個甚至更多的請求。但若能將10台這樣的服務器組成一個系統,並通過軟件技術將所有請求平均分配給所有服務器,那麼這個系統就完全擁有每秒鐘處理幾百萬個甚至更多請求的能力。這就是利用服務器群集實現負載均衡的最初基本設計思想。    早期的服務器群集通常以光纖鏡像卡進行主從方式備份。令服務運營商頭疼的是關鍵性服務器或應用較多、數據流量較大的服務器一般檔次不會太低,而服務運營商花了兩台服務器的錢卻常常只得到一台服務器的性能。通過地址轉換將多台服務器網卡的不同IP地址翻譯成一個VIP(Virtual IP)地址,使得每台服務器均時時處於工作狀態。原來需要用小型機來完成的工作改由多台PC服務器完成,這種彈性解決方案對投資保護的作用是相當明顯的——既避免了小型機剛性升級所帶來的巨大設備投資,又避免了人員培訓的重復投資。同時,服務運營商可以依據業務的需要隨時調整服務器的數量。    網絡負載均衡提高了諸如Web服務器、FTP服務器和其他關鍵任務服務器上的因特網服務器程序的可用性和可伸縮性。單一計算機可以提供有限級別的服務器可靠性和可伸縮性。但是,通過將兩個或兩個以上高級服務器的主機連成群集,網絡負載均衡就能夠提供關鍵任務服務器所需的可靠性和性能。    為了建立一個高負載的Web站點,必須使用多服務器的分布式結構。上面提到的使用代理服務器和Web服務器相結合,或者兩台Web服務器相互協作的方式也屬於多服務器的結構,但在這些多服務器的結構中,每台服務器所起到的作用是不同的,屬於非對稱的體系結構。非對稱的服務器結構中每個服務器起到的作用是不同的,例如一台服務器用於提供靜態網頁,而另一台用於提供動態網頁等等。這樣就使得網頁設計時就需要考慮不同服務器之間的關系,一旦要改變服務器之間的關系,就會使得某些網頁出現連接錯誤,不利於維護,可擴展性也較差。    能進行負載均衡的網絡設計結構為對稱結構,在對稱結構中每台服務器都具備等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。然後,可以通過某種技術,將外部發送來的請求均勻分配到對稱結構中的每台服務器上,接收到連接請求的服務器都獨立回應客戶的請求。在這種結構中,由於建立內容完全一致的Web服務器並不困難,因此負載均衡技術就成為建立一個高負載Web站點的關鍵性技術。    總之,負載均衡是一種策略,它能讓多台服務器或多條鏈路共同承擔一些繁重的計算或I/O任務,從而以較低成本消除網絡瓶頸,提高網絡的靈活性和可靠性。




Copyright © Linux教程網 All Rights Reserved