四層和七層負載均衡的區別

kunlunzhiying發表於2017-01-20

(一)

  簡單理解四層和七層負載均衡:

  ① 所謂四層就是基於IP+埠的負載均衡;七層就是基於URL等應用層資訊的負載均衡;同理,還有基於MAC地址的二層負載均衡和基於IP地址的三層負載均衡。 換句換說,二層負載均衡會通過一個虛擬MAC地址接收請求,然後再分配到真實的MAC地址;三層負載均衡會通過一個虛擬IP地址接收請求,然後再分配到真實的IP地址;四層通過虛擬IP+埠接收請求,然後再分配到真實的伺服器;七層通過虛擬的URL或主機名接收請求,然後再分配到真實的伺服器。

② 所謂的四到七層負載均衡,就是在對後臺的伺服器進行負載均衡時,依據四層的資訊或七層的資訊來決定怎麼樣轉發流量。 比如四層的負載均衡,就是通過釋出三層的IP地址(VIP),然後加四層的埠號,來決定哪些流量需要做負載均衡,對需要處理的流量進行NAT處理,轉發至後臺伺服器,並記錄下這個TCP或者UDP的流量是由哪臺伺服器處理的,後續這個連線的所有流量都同樣轉發到同一臺伺服器處理。七層的負載均衡,就是在四層的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,比如同一個Web伺服器的負載均衡,除了根據VIP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。舉個例子,如果你的Web伺服器分成兩組,一組是中文語言的,一組是英文語言的,那麼七層負載均衡就可以當使用者來訪問你的域名時,自動辨別使用者語言,然後選擇對應的語言伺服器組進行負載均衡處理。

③ 負載均衡器通常稱為四層交換機或七層交換機。四層交換機主要分析IP層及TCP/UDP層,實現四層流量負載均衡。七層交換機除了支援四層負載均衡以外,還有分析應用層的資訊,如HTTP協議URI或Cookie資訊。

1、負載均衡分為L4 switch(四層交換),即在OSI第4層工作,就是TCP層啦。此種Load Balance不理解應用協議(如HTTP/FTP/MySQL等等)。例子:LVS,F5。

2、另一種叫做L7 switch(七層交換),OSI的最高層,應用層。此時,該Load Balancer能理解應用協議。例子:  haproxy,MySQL Proxy。

注意:上面的很多Load Balancer既可以做四層交換,也可以做七層交換。

(二)

  負載均衡裝置也常被稱為”四到七層交換機”,那麼四層和七層兩者到底區別在哪裡?

  第一,技術原理上的區別。

  所謂四層負載均衡,也就是主要通過報文中的目標地址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。

以常見的TCP為例,負載均衡裝置在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的伺服器,並對報文中目標IP地址進行修改(改為後端伺服器IP),直接轉發給該伺服器。TCP的連線建立,即三次握手是客戶端和伺服器直接建立的,負載均衡裝置只是起到一個類似路由器的轉發動作。在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡裝置,在轉發報文的同時可能還會對報文原來的源地址進行修改。

03114159-1d39f32589b04705b65bf5bda16d2252

 

謂七層負載均衡,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。

以常見的TCP為例,負載均衡裝置如果要根據真正的應用層內容再選擇伺服器,只能先代理最終的伺服器和客戶端建立連線(三次握手)後,才可能接受到客戶端傳送的真正應用層內容的報文,然後再根據該報文中的特定欄位,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。負載均衡裝置在這種情況下,更類似於一個代理伺服器。負載均衡和前端的客戶端以及後端的伺服器會分別建立TCP連線。所以從這個技術原理上來看,七層負載均衡明顯的對負載均衡裝置的要求更高,處理七層的能力也必然會低於四層模式的部署方式。

  第二,應用場景的需求。

七層應用負載的好處,是使得整個網路更”智慧化“。例如訪問一個網站的使用者流量,可以通過七層的方式,將對圖片類的請求轉發到特定的圖片伺服器並可以使用快取技術;將對文字類的請求可以轉發到特定的文字伺服器並可以使用壓縮技術。當然這只是七層應用的一個小案例,從技術原理上,這種方式可以對客戶端的請求和伺服器的響應進行任意意義上的修改,極大的提升了應用系統在網路層的靈活性。很多在後臺,例如Nginx或者Apache上部署的功能可以前移到負載均衡裝置上,例如客戶請求中的Header重寫,伺服器響應中的關鍵字過濾或者內容插入等功能。

另外一個常常被提到功能就安全性。網路中最常見的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假IP地址對同一目標傳送SYN攻擊,通常這種攻擊會大量傳送SYN報文,耗盡伺服器上的相關資源,以達到Denial of Service(DoS)的目的。從技術原理上也可以看出,四層模式下這些SYN攻擊都會被轉發到後端的伺服器上;而七層模式下這些SYN攻擊自然在負載均衡裝置上就截止,不會影響後臺伺服器的正常運營。另外負載均衡裝置可以在七層層面設定多種策略,過濾特定報文,例如SQL Injection等應用層面的特定攻擊手段,從應用層面進一步提高系統整體安全。

現在的7層負載均衡,主要還是著重於應用HTTP協議,所以其應用範圍主要是眾多的網站或者內部資訊平臺等基於B/S開發的系統。 4層負載均衡則對應其他TCP應用,例如基於C/S開發的ERP等系統。

  第三,七層應用需要考慮的問題。

  1:是否真的必要,七層應用的確可以提高流量智慧化,同時必不可免的帶來裝置配置複雜,負載均衡壓力增高以及故障排查上的複雜性等問題。在設計系統時需要考慮四層七層同時應用的混雜情況。

  2:是否真的可以提高安全性。例如SYN Flood攻擊,七層模式的確將這些流量從伺服器遮蔽,但負載均衡裝置本身要有強大的抗DDoS能力,否則即使伺服器正常而作為中樞排程的負載均衡裝置故障也會導致整個應用的崩潰。

  3:是否有足夠的靈活度。七層應用的優勢是可以讓整個應用的流量智慧化,但是負載均衡裝置需要提供完善的七層功能,滿足客戶根據不同情況的基於應用的排程。最簡單的一個考核就是能否取代後臺Nginx或者Apache等伺服器上的排程功能。能夠提供一個七層應用開發介面的負載均衡裝置,可以讓客戶根據需求任意設定功能,才真正有可能提供強大的靈活性和智慧性。

(三)

  負載均衡四七層介紹:

負載均衡(Load Balance)建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。

負載均衡有兩方面的含義:首先,大量的併發訪問或資料流量分擔到多臺節點裝置上分別處理,減少使用者等待響應的時間;其次,單個重負載的運算分擔到多臺節點裝置上做並行處理,每個節點裝置處理結束後,將結果彙總,返回給使用者,系統處理能力得到大幅度提高。

本文所要介紹的負載均衡技術主要是指在均衡伺服器群中所有伺服器和應用程式之間流量負載的應用,目前負載均衡技術大多數是用於提高諸如在Web伺服器、FTP伺服器和其它關鍵任務伺服器上的Internet伺服器程式的可用性和可伸縮性。

  負載均衡技術分類

目前有許多不同的負載均衡技術用以滿足不同的應用需求,下面從負載均衡所採用的裝置物件、應用的網路層次(指OSI參考模型)及應用的地理結構等來分類。

  軟/硬體負載均衡

軟體負載均衡解決方案是指在一臺或多臺伺服器相應的作業系統上安裝一個或多個附加軟體來實現負載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的優點是基於特定環境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載均衡需求。

軟體解決方案缺點也較多,因為每臺伺服器上安裝額外的軟體執行會消耗系統不定量的資源,越是功能強大的模組,消耗得越多,所以當連線請求特別大的時候,軟體本身會成為伺服器工作成敗的一個關鍵;軟體可擴充套件性並不是很好,受到作業系統的限制;由於作業系統本身的Bug,往往會引起安全問題。

硬體負載均衡解決方案是直接在伺服器和外部網路間安裝負載均衡裝置,這種裝置我們通常稱之為負載均衡器,由於專門的裝置完成專門的任務,獨立於作業系統,整體效能得到大量提高,加上多樣化的負載均衡策略,智慧化的流量管理,可達到最佳的負載均衡需求。

負載均衡器有多種多樣的形式,除了作為獨立意義上的負載均衡器外,有些負載均衡器整合在交換裝置中,置於伺服器與Internet連結之間,有些則以兩塊網路介面卡將這一功能整合到PC中,一塊連線到Internet上,一塊連線到後端伺服器群的內部網路上。

一般而言,硬體負載均衡在功能、效能上優於軟體方式,不過成本昂貴。

  本地/全域性負載均衡

負載均衡從其應用的地理結構上分為本地負載均衡(Local Load Balance)和全域性負載均衡(Global Load Balance,也叫地域負載均衡),本地負載均衡是指對本地的伺服器群做負載均衡,全域性負載均衡是指對分別放置在不同的地理位置、有不同網路結構的伺服器群間作負載均衡。

本地負載均衡能有效地解決資料流量過大、網路負荷過重的問題,並且不需花費昂貴開支購置效能卓越的伺服器,充分利用現有裝置,避免伺服器單點故障造成資料流量的損失。其有靈活多樣的均衡策略把資料流量合理地分配給伺服器群內的伺服器共同負擔。即使是再給現有伺服器擴充升級,也只是簡單地增加一個新的伺服器到服務群中,而不需改變現有網路結構、停止現有的服務。

全域性負載均衡主要用於在一個多區域擁有自己伺服器的站點,為了使全球使用者只以一個IP地址或域名就能訪問到離自己最近的伺服器,從而獲得最快的訪問速度,也可用於子公司分散站點分佈廣的大公司通過Intranet(企業內部網際網路)來達到資源統一合理分配的目的。

  網路層次上的負載均衡

針對網路上負載過重的不同瓶頸所在,從網路的不同層次入手,我們可以採用相應的負載均衡技術來解決現有問題。

隨著頻寬增加,資料流量不斷增大,網路核心部分的資料介面將面臨瓶頸問題,原有的單一線路將很難滿足需求,而且線路的升級又過於昂貴甚至難以實現,這時就可以考慮採用鏈路聚合(Trunking)技術。

鏈路聚合技術(第二層負載均衡)將多條物理鏈路當作一條單一的聚合邏輯鏈路使用,網路資料流量由聚合邏輯鏈路中所有物理鏈路共同承擔,由此在邏輯上增大了鏈路容量,使其能滿足頻寬增加的需求。

現代負載均衡技術通常操作於網路的第四層或第七層。第四層負載均衡將一個Internet上合法註冊的IP地址對映為多個內部伺服器的IP地址,對每次 TCP連線請求動態使用其中一個內部IP地址,達到負載均衡的目的。在第四層交換機中,此種均衡技術得到廣泛的應用,一個目標地址是伺服器群VIP(虛擬 IP,Virtual IP address)連線請求的資料包流經交換機,交換機根據源端和目的IP地址、TCP或UDP埠號和一定的負載均衡策略,在伺服器IP和VIP間進行對映,選取伺服器群中最好的伺服器來處理連線請求。

第七層負載均衡控制應用層服務的內容,提供了一種對訪問流量的高層控制方式,適合對HTTP伺服器群的應用。第七層負載均衡技術通過檢查流經的HTTP報頭,根據報頭內的資訊來執行負載均衡任務

第七層負載均衡優點表現在如下幾個方面:

通過對HTTP報頭的檢查,可以檢測出HTTP400、500和600系列的錯誤資訊,因而能透明地將連線請求重新定向到另一臺伺服器,避免應用層故障。

可根據流經的資料型別(如判斷資料包是影象檔案、壓縮檔案或多媒體檔案格式等),把資料流量引向相應內容的伺服器來處理,增加系統效能。

能根據連線請求的型別,如是普通文字、圖象等靜態文件請求,還是asp、cgi等的動態文件請求,把相應的請求引向相應的伺服器來處理,提高系統的效能及安全性。

第七層負載均衡受到其所支援的協議限制(一般只有HTTP),這樣就限制了它應用的廣泛性,並且檢查HTTP報頭會佔用大量的系統資源,勢必會影響到系統的效能,在大量連線請求的情況下,負載均衡裝置自身容易成為網路整體效能的瓶頸。

負載均衡策略

在實際應用中,我們可能不想僅僅是把客戶端的服務請求平均地分配給內部伺服器,而不管伺服器是否當機。而是想使Pentium III伺服器比Pentium II能接受更多的服務請求,一臺處理服務請求較少的伺服器能分配到更多的服務請求,出現故障的伺服器將不再接受服務請求直至故障恢復等等。

選擇合適的負載均衡策略,使多個裝置能很好的共同完成任務,消除或避免現有網路負載分佈不均、資料流量擁擠反應時間長的瓶頸。在各負載均衡方式中,針對不同的應用需求,在OSI參考模型的第二、三、四、七層的負載均衡都有相應的負載均衡策略。

負載均衡策略的優劣及其實現的難易程度有兩個關鍵因素:一、負載均衡演算法,二、對網路系統狀況的檢測方式和能力。

考慮到服務請求的不同型別、伺服器的不同處理能力以及隨機選擇造成的負載分配不均勻等問題,為了更加合理的把負載分配給內部的多個伺服器,就需要應用相應的能夠正確反映各個伺服器處理能力及網路狀態的負載均衡演算法

輪循均衡(Round Robin):每一次來自網路的請求輪流分配給內部中的伺服器,從1至N然後重新開始。此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。

權重輪循均衡(Weighted Round Robin):根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。例如:伺服器A的權值被設計成1,B的權值是 3,C的權值是6,則伺服器A、B、C將分別接受到10%、30%、60%的服務請求。此種均衡演算法能確保高效能的伺服器得到更多的使用率,避免低效能的伺服器負載過重。

隨機均衡(Random):把來自網路的請求隨機分配給內部中的多個伺服器。

權重隨機均衡(Weighted Random):此種均衡演算法類似於權重輪循演算法,不過在處理請求分擔時是個隨機選擇的過程。

響應速度均衡(Response Time):負載均衡裝置對內部各伺服器發出一個探測請求(例如Ping),然後根據內部中各伺服器對探測請求的最快響應時間來決定哪一臺伺服器來響應客戶端的服務請求。此種均衡演算法能較好的反映伺服器的當前執行狀態,但這最快響應時間僅僅指的是負載均衡裝置與伺服器間的最快響應時間,而不是客戶端與伺服器間的最快響應時間。

最少連線數均衡(Least Connection):客戶端的每一次請求服務在伺服器停留的時間可能會有較大的差異,隨著工作時間加長,如果採用簡單的輪循或隨機均衡演算法,每一臺伺服器上的連線程式可能會產生極大的不同,並沒有達到真正的負載均衡。最少連線數均衡演算法對內部中需負載的每一臺伺服器都有一個資料記錄,記錄當前該伺服器正在處理的連線數量,當有新的服務連線請求時,將把當前請求分配給連線數最少的伺服器,使均衡更加符合實際情況,負載更加均衡。此種均衡演算法適合長時處理的請求服務,如FTP。

處理能力均衡:此種均衡演算法將把服務請求分配給內部中處理負荷(根據伺服器CPU型號、CPU數量、記憶體大小及當前連線數等換算而成)最輕的伺服器,由於考慮到了內部伺服器的處理能力及當前網路執行狀況,所以此種均衡演算法相對來說更加精確,尤其適合運用到第七層(應用層)負載均衡的情況下。

DNS響應均衡(Flash DNS):在Internet上,無論是HTTP、FTP或是其它的服務請求,客戶端一般都是通過域名解析來找到伺服器確切的IP地址的。在此均衡演算法下,分處在不同地理位置的負載均衡裝置收到同一個客戶端的域名解析請求,並在同一時間內把此域名解析成各自相對應伺服器的IP地址(即與此負載均衡裝置在同一位地理位置的伺服器的IP地址)並返回給客戶端,則客戶端將以最先收到的域名解析IP地址來繼續請求服務,而忽略其它的IP地址響應。在種均衡策略適合應用在全域性負載均衡的情況下,對本地負載均衡是沒有意義的。

儘管有多種的負載均衡演算法可以較好的把資料流量分配給伺服器去負載,但如果負載均衡策略沒有對網路系統狀況的檢測方式和能力,一旦在某臺伺服器或某段負載均衡裝置與伺服器網路間出現故障的情況下,負載均衡裝置依然把一部分資料流量引向那臺伺服器,這勢必造成大量的服務請求被丟失,達不到不間斷可用性的要求。所以良好的負載均衡策略應有對網路故障、伺服器系統故障、應用服務故障的檢測方式和能力

Ping偵測:通過ping的方式檢測伺服器及網路系統狀況,此種方式簡單快速,但只能大致檢測出網路及伺服器上的作業系統是否正常,對伺服器上的應用服務檢測就無能為力了。

TCP Open偵測:每個服務都會開放某個通過TCP連線,檢測伺服器上某個TCP埠(如Telnet的23口,HTTP的80口等)是否開放來判斷服務是否正常。

HTTP URL偵測:比如向HTTP伺服器發出一個對main.html檔案的訪問請求,如果收到錯誤資訊,則認為伺服器出現故障。

負載均衡策略的優劣除受上面所講的兩個因素影響外,在有些應用情況下,我們需要將來自同一客戶端的所有請求都分配給同一臺伺服器去負擔,例如伺服器將客戶端註冊、購物等服務請求資訊儲存的本地資料庫的情況下,把客戶端的子請求分配給同一臺伺服器來處理就顯的至關重要了。有兩種方式可以解決此問題,一是根據IP地址把來自同一客戶端的多次請求分配給同一臺伺服器處理,客戶端IP地址與伺服器的對應資訊是儲存在負載均衡裝置上的;二是在客戶端瀏覽器 cookie內做獨一無二的標識來把多次請求分配給同一臺伺服器處理,適合通過代理伺服器上網的客戶端。

還有一種路徑外返回模式(Out of Path Return),當客戶端連線請求傳送給負載均衡裝置的時候,中心負載均衡裝置將請求引向某個伺服器,伺服器的迴應請求不再返回給中心負載均衡裝置,即繞過流量分配器,直接返回給客戶端,因此中心負載均衡裝置只負責接受並轉發請求,其網路負擔就減少了很多,並且給客戶端提供了更快的響應時間。此種模式一般用於HTTP伺服器群,在各伺服器上要安裝一塊虛擬網路介面卡,並將其IP地址設為伺服器群的VIP,這樣才能在伺服器直接回應客戶端請求時順利的達成三次握手。

負載均衡實施要素

負載均衡方案應是在網站建設初期就應考慮的問題,不過有時隨著訪問流量的爆炸性增長,超出決策者的意料,這也就成為不得不面對的問題。當我們在引入某種負載均衡方案乃至具體實施時,像其他的許多方案一樣,首先是確定當前及將來的應用需求,然後在代價與收效之間做出權衡。

針對當前及將來的應用需求,分析網路瓶頸的不同所在,我們就需要確立是採用哪一類的負載均衡技術,採用什麼樣的均衡策略,在可用性、相容性、安全性等等方面要滿足多大的需求,如此等等。

不管負載均衡方案是採用花費較少的軟體方式,還是購買代價高昂在效能功能上更強的第四層交換機、負載均衡器等硬體方式來實現,亦或其他種類不同的均衡技術,下面這幾項都是我們在引入均衡方案時可能要考慮的問題:

效能:效能是我們在引入均衡方案時需要重點考慮的問題,但也是一個最難把握的問題。衡量效能時可將每秒鐘通過網路的資料包數目做為一個引數,另一個引數是均衡方案中伺服器群所能處理的最大併發連線數目,但是,假設一個均衡系統能處理百萬計的併發連線數,可是卻只能以每秒2個包的速率轉發,這顯然是沒有任何作用的。效能的優劣與負載均衡裝置的處理能力、採用的均衡策略息息相關,並且有兩點需要注意:一、均衡方案對伺服器群整體的效能,這是響應客戶端連線請求速度的關鍵;二、負載均衡裝置自身的效能,避免有大量連線請求時自身效能不足而成為服務瓶頸。有時我們也可以考慮採用混合型負載均衡策略來提升伺服器群的總體效能,如DNS負載均衡與NAT負載均衡相結合。另外,針對有大量靜態文件請求的站點,也可以考慮採用快取記憶體技術,相對來說更節省費用,更能提高響應效能;對有大量ssl/xml內容傳輸的站點,更應考慮採用ssl/xml加速技術。

可擴充套件性:IT技術日新月異,一年以前最新的產品,現在或許已是網路中效能最低的產品;業務量的急速上升,一年前的網路,現在需要新一輪的擴充套件。合適的均衡解決方案應能滿足這些需求,能均衡不同作業系統和硬體平臺之間的負載,能均衡HTTP、郵件、新聞、代理、資料庫、防火牆和 Cache等不同伺服器的負載,並且能以對客戶端完全透明的方式動態增加或刪除某些資源。

靈活性:均衡解決方案應能靈活地提供不同的應用需求,滿足應用需求的不斷變化。在不同的伺服器群有不同的應用需求時,應有多樣的均衡策略提供更廣泛的選擇。

可靠性:在對服務質量要求較高的站點,負載均衡解決方案應能為伺服器群提供完全的容錯性和高可用性。但在負載均衡裝置自身出現故障時,應該有良好的冗餘解決方案,提高可靠性。使用冗餘時,處於同一個冗餘單元的多個負載均衡裝置必須具有有效的方式以便互相進行監控,保護系統儘可能地避免遭受到重大故障的損失。

易管理性:不管是通過軟體還是硬體方式的均衡解決方案,我們都希望它有靈活、直觀和安全的管理方式,這樣便於安裝、配置、維護和監控,提高工作效率,避免差錯。在硬體負載均衡裝置上,目前主要有三種管理方式可供選擇:一、命令列介面(CLI:Command Line Interface),可通過超級終端連線負載均衡裝置序列介面來管理,也能telnet遠端登入管理,在初始化配置時,往往要用到前者;二、圖形使用者介面(GUI:Graphical User Interfaces),有基於普通web頁的管理,也有通過Java Applet 進行安全管理,一般都需要管理端安裝有某個版本的瀏覽器;三、SNMP(Simple Network Management Protocol,簡單網路管理協議)支援,通過第三方網路管理軟體對符合SNMP標準的裝置進行管理。

相關文章