linux負載均衡總結性說明(四層負載/七層負載)

 

在常規運維工做中,常常會運用到負載均衡服務。負載均衡分爲四層負載和七層負載,那麼這二者之間有什麼不一樣?
廢話很少說,詳解以下:前端

一.  什麼是負載均衡
1)負載均衡(Load Balance)創建在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。負載均衡有兩方面的含義:首先,大量的併發訪問或數據流量分擔到多臺節點設備上分別處理,減小用戶等待響應的時間;其次,單個重負載的運算分擔到多臺節點設備上作並行處理,每一個節點設備處理結束後,將結果彙總,返回給用戶,系統處理能力獲得大幅度提升。nginx

2)簡單來講就是:其一是將大量的併發處理轉發給後端多個節點處理,減小工做響應時間;其二是將單個繁重的工做轉發給後端多個節點處理,處理完再返回給負載均衡中心,再返回給用戶。目前負載均衡技術大多數是用於提升諸如在Web服務器、FTP服務器和其它關鍵任務服務器上的Internet服務器程序的可用性和可伸縮性。web

二. 負載均衡分類
1)二層負載均衡(mac)
根據OSI模型分的二層負載,通常是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應.
2)三層負載均衡(ip)
通常採用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP地址響應. (即一個ip對一個ip的轉發, 端口全放開)
3)四層負載均衡(tcp)
在三次負載均衡的基礎上,即從第四層"傳輸層"開始, 使用"ip+port"接收請求,再轉發到對應的機器。
4)七層負載均衡(http)
從第七層"應用層"開始, 根據虛擬的url或IP,主機名接收請求,再轉向相應的處理服務器。正則表達式

咱們運維中最多見的四層和七層負載均衡,這裏重點說下這兩種負載均衡。
1)四層的負載均衡就是基於IP+端口的負載均衡:在三層負載均衡的基礎上,經過發佈三層的IP地址(VIP),而後加四層的端口號,來決定哪些流量須要作負載均衡,對須要處理的流量進行NAT處理,轉發至後臺服務器,並記錄下這個TCP或者UDP的流量是由哪臺服務器處理的,後續這個鏈接的全部流量都一樣轉發到同一臺服務器處理。
對應的負載均衡器稱爲四層交換機(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載均衡。此種負載均衡器不理解應用協議(如HTTP/FTP/MySQL等等)。算法

實現四層負載均衡的軟件有:
F5:硬件負載均衡器,功能很好,可是成本很高。
lvs:重量級的四層負載軟件
nginx:輕量級的四層負載軟件,帶緩存功能,正則表達式較靈活
haproxy:模擬四層轉發,較靈活sql

2)七層的負載均衡就是基於虛擬的URL或主機IP的負載均衡:在四層負載均衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,好比同一個Web服務器的負載均衡,除了根據VIP加80端口辨別是否須要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。舉個例子,若是你的Web服務器分紅兩組,一組是中文語言的,一組是英文語言的,那麼七層負載均衡就能夠當用戶來訪問你的域名時,自動辨別用戶語言,而後選擇對應的語言服務器組進行負載均衡處理。apache

對應的負載均衡器稱爲七層交換機(L7 switch),除了支持四層負載均衡之外,還有分析應用層的信息,如HTTP協議URI或Cookie信息,實現七層負載均衡。此種負載均衡器能理解應用協議。
實現七層負載均衡的軟件有:
haproxy:天生負載均衡技能,全面支持七層代理,會話保持,標記,路徑轉移;
nginx:只在http協議和mail協議上功能比較好,性能與haproxy差很少;
apache:功能較差
Mysql proxy:功能尚可。後端

總的來講,通常是lvs作4層負載;nginx作7層負載(也能作4層負載, 經過stream模塊);haproxy比較靈活,4層和7層負載均衡都能作瀏覽器

三. 四層和七層負載均衡之間的區別
1) 從技術原理上分析
所謂四層負載均衡,也就是主要經過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。緩存

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

所謂七層負載均衡,也稱爲「內容交換」,也就是主要經過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。

以常見的TCP爲例,負載均衡設備若是要根據真正的應用層內容再選擇服務器,只能先代理最終的服務器和客戶端創建鏈接(三次握手)後,纔可能接受到客戶端發送的真正應用層內容的報文,而後再根據該報文中的特定字段,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。負載均衡設備在這種狀況下,更相似於一個代理服務器。負載均衡和前端的客戶端以及後端的服務器會分別創建TCP鏈接。因此從這個技術原理上來看,七層負載均衡明顯的對負載均衡設備的要求更高,處理七層的能力也必然會低於四層模式的部署方式。

四層負載均衡在中間傳輸層執行,它處理消息的傳遞,但不考慮消息的內容。例如TCP是網絡上Hypertext Transfer Protocol(HTTP)流量的第四層協議。在這一過程當中,4層負載均衡會將網絡數據包轉發到上游服務器,但不會檢查數據包的內容,只能經過檢查TCP流中的前幾個包來作出有限的路由決策。

七層負載均衡不一樣於四層負載均衡,它在高級應用層上執行,會處理每一個消息的實際內容。HTTP是網絡上網站流量的主要7層協議。七層負載均衡以比四層負載均衡更復雜的方式路由網絡流量,尤爲適用於基於TCP的流量(如HTTP)。七層負載均衡會終止網絡流量並讀取器中消息,它能夠根據消息內容(如URL或cookie)作出負載均衡決策。隨後,七層負載均衡與選定上有服務器創建新的TCP鏈接並將請求寫入服務器。

簡單來講,兩者之間的區別
七層負載均衡基本都是基於http協議的,適用於web服務器的負載均衡。(nginx)
-  四層負載均衡主要是基於tcp協議報文,能夠作任何基於tcp/ip協議的軟件的負載均衡。(haproxy、LVS)
二者主要區別在於利用的報文所在的層面是不一樣的,各有各的好處。
七層應用負載的好處,是使得整個網絡更」智能化「。例如訪問一個網站的用戶流量,能夠經過七層的方式,將對圖片類的請求轉發到特定的圖片服務器並可使用緩存技術;將對文字類的請求能夠轉發到特定的文字服務器並可使用壓縮技術。固然這只是七層應用的一個小案例,從技術原理上,這種方式能夠對客戶端的請求和服務器的響應進行任意意義上的修改,極大的提高了應用系統在網絡層的靈活性。不少在後臺,例如Nginx或者Apache上部署的功能能夠前移到負載均衡設備上,例如客戶請求中的Header重寫,服務器響應中的關鍵字過濾或者內容插入等功能。
四層負載均衡主要是較爲靈活,能夠做爲多種軟件的負載均衡器。

舉個例子形象的說明:四層負載均衡就像銀行的自助排號機,每個達到銀行的客戶根據排號機的順序,選擇對應的窗口接受服務;而七層負載均衡像銀行大堂經理,先確認客戶須要辦理的業務,再安排排號。這樣辦理理財、存取款等業務的客戶,會根據銀行內部資源獲得統一協調處理,加快客戶業務辦理流程。

七層負載均衡的好處
七層負載均衡比基於數據包的四層負載均衡更佔CPU,但不多會致使服務器性能降低。七層負載均衡可讓負載均衡器作出更明智的決策,並能夠對內容進行優化和更改,如壓縮、加密等等。七層負載均衡還能夠利用buffering來卸載上游服務器的慢速鏈接,從而提升性能。

執行七層負載平衡的組件一般被稱爲反向代理服務器。

七層負載均衡示例
舉個簡單的例子,假設用戶訪問高流量網站,在會話期間,它可能會請求靜態內容(例如圖像或視頻)、動態內容(例如新聞訂閱源)或者交易信息(例如訂單狀態)等等。7層負載平衡容許負載均衡器根據請求自己中的消息(如內容類型)來路由請求。也就是說,咱們能夠將對圖像或視頻的請求路由到存儲它的服務器,並進行高度優化以提供多媒體內容;能夠將諸如折扣價之類的交易信息請求路由到負責管理訂價的應用服務器。藉助7層負載平衡,網絡和應用程序架構師能夠建立高度優化的服務器基礎架構或應用交付網絡,在保障可靠性的同時進行有效擴展。

簡單總結
從上面的對比看來四層負載與七層負載最大的區別就是效率與功能的區別。四層負載架構設計比較簡單,無需解析具體的消息內容,在網絡吞吐量及處理能力上會相對比較高,而七層負載均衡的優點則體如今功能多,控制靈活強大。在具體業務架構設計時,使用七層負載或者四層負載還得根據具體的狀況綜合考慮。

負載均衡時的數據流都通過負載均衡器,如何解決負載均衡器成爲瓶頸的問題?
經過修改tcp報文的源地址和目的地址,使從web服務器中返回的數據直接返回到客戶端,這是七層負載均衡沒法作到的,由於tcp三次握手創建在客戶端與負載均衡服務器之間,http協議基於tcp協議,創建好tcp連接後才傳送http報文,收到http報文說明負載均衡器和客戶端已經創建了tcp鏈接,而web服務器和客戶端的tcp連接都沒創建,怎麼回傳數據給客戶端呢。以上的辦法會出現問題:全部集羣裏的主機都是內網ip,沒法跟外界聯繫。
解決方案1:
若是能買到那麼多外網Ip地址來用,而後在tcp連接要創建時負載均衡給真正的web服務器,讓客戶端和服務器創建tcp連接
解決方案2:
引用一句話:計算機全部的問題均可以經過創建一層虛擬層解決。
能夠經過將全部服務器主機ip虛擬化成負載均衡服務器的ip,這樣服務器集羣的全部主機均可以訪問外界網絡,由於ip地址(網絡層,三層)都是相同,因此只能經過第二層來分辨數據流向,修改數據鏈路層(二層)目的主機的MAC地址,使請求發到web服務器上,而後才真正創建起tcp鏈接,而後web服務器由於能夠聯網,因此能夠直接返回數據給客戶端

2)從應用場景的需求上分析
七層應用負載的好處,是使得整個網絡更"智能化"。例如訪問一個網站的用戶流量,能夠經過七層的方式,將對圖片類的請求轉發到特定的圖片服務器並可使用緩存技術;將對文字類的請求能夠轉發到特定的文字服務器並可使用壓縮技術。固然這只是七層應用的一個小案例,從技術原理上,這種方式能夠對客戶端的請求和服務器的響應進行任意意義上的修改,極大的提高了應用系統在網絡層的靈活性。不少在後臺,例如Nginx或者Apache上部署的功能能夠前移到負載均衡設備上,例如客戶請求中的Header重寫,服務器響應中的關鍵字過濾或者內容插入等功能。

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

如今的七層負載均衡,主要仍是着重於應用HTTP協議,因此其應用範圍主要是衆多的網站或者內部信息平臺等基於B/S開發的系統。 4層負載均衡則對應其餘TCP應用,例如基於C/S開發的ERP等系統。

3)七層應用須要考慮的問題
3.1) 是否真的必要。七層應用的確能夠提升流量智能化,同時必不可免的帶來設備配置複雜,負載均衡壓力增高以及故障排查上的複雜性等問題。在設計系統時須要考慮四層七層同時應用的混雜狀況。

3.2) 是否真的能夠提升安全性。例如SYN Flood攻擊,七層模式的確將這些流量從服務器屏蔽,但負載均衡設備自己要有強大的抗DDoS能力,不然即便服務器正常而做爲中樞調度的負載均衡設備故障也會致使整個應用的崩潰。

3.3) 是否有足夠的靈活度。七層應用的優點是可讓整個應用的流量智能化,可是負載均衡設備須要提供完善的七層功能,知足客戶根據不一樣狀況的基於應用的調度。最簡單的一個考覈就是可否取代後臺Nginx或者Apache等服務器上的調度功能。可以提供一個七層應用開發接口的負載均衡設備,可讓客戶根據需求任意設定功能,才真正有可能提供強大的靈活性和智能性。

4)整體對比
4.1) 智能性
七層負載均衡因爲具有OIS七層的全部功能,因此在處理用戶需求上能更加靈活,從理論上講,七層模型能對用戶的全部跟服務端的請求進行修改。例如對文件header添加信息,根據不一樣的文件類型進行分類轉發。四層模型僅支持基於網絡層的需求轉發,不能修改用戶請求的內容。

4.2) 安全性
七層負載均衡因爲具備OSI模型的所有功能,能更容易抵禦來自網絡的攻擊;四層模型從原理上講,會直接將用戶的請求轉發給後端節點,沒法直接抵禦網絡攻擊。

4.3) 複雜度
四層模型通常比較簡單的架構,容易管理,容易定位問題;七層模型架構比較複雜,一般也須要考慮結合四層模型的混用狀況,出現問題定位比較複雜。

4.4) 效率比
四層模型基於更底層的設置,一般效率更高,但應用範圍有限;七層模型須要更多的資源損耗,在理論上講比四層模型有更強的功能,如今的實現更可能是基於http應用。

4、負載均衡技術方案說明

1)軟/硬件負載均衡
軟件負載均衡解決方案是指在一臺或多臺服務器相應的操做系統上安裝一個或多個附加軟件來實現負載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive+ipvs等,它的優勢是基於特定環境,配置簡單,使用靈活,成本低廉,能夠知足通常的負載均衡需求。軟件解決方案缺點也較多,由於每臺服務器上安裝額外的軟件運行會消耗系統不定量的資源,越是功能強大的模塊,消耗得越多,因此當鏈接請求特別大的時候,軟件自己會成爲服務器工做成敗的一個關鍵;軟件可擴展性並非很好,受到操做系統的限制;因爲操做系統自己的Bug,每每會引發安全問題。

硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,這種設備一般是一個獨立於系統的硬件,咱們稱之爲負載均衡器。因爲專門的設備完成專門的任務,獨立於操做系統,總體性能獲得大量提升,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。負載均衡器有多種多樣的形式,除了做爲獨立意義上的負載均衡器外,有些負載均衡器集成在交換設備中,置於服務器與Internet連接之間,有些則以兩塊網絡適配器將這一功能集成到PC中,一塊鏈接到Internet上,一塊鏈接到後端服務器羣的內部網絡上。

軟件負載均衡與硬件負載均衡的對比:
軟件負載均衡的優勢是需求環境明確,配置簡單,操做靈活,成本低廉,效率不高,能知足普通的企業需求;缺點是依賴於系統,增長資源開銷;軟件的優劣決定環境的性能;系統的安全,軟件的穩定性均會影響到整個環境的安全。
硬件負載均衡優勢是獨立於系統,總體性能大量提高,在功能、性能上優於軟件方式;智能的流量管理,多種策略可選,能達到最佳的負載均衡效果;缺點是價格昂貴。

2)本地/全局負載均衡
負載均衡從其應用的地理結構上分爲本地負載均衡(Local Load Balance)和全局負載均衡(Global Load Balance,也叫地域負載均衡),本地負載均衡是指對本地的服務器羣作負載均衡,全局負載均衡是指對分別放置在不一樣的地理位置、有不一樣網絡結構的服務器羣間做負載均衡。

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

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

3)網絡層次上的負載均衡
針對網絡上負載太重的不一樣瓶頸所在,從網絡的不一樣層次入手,咱們能夠採用相應的負載均衡技術來解決現有問題。
隨着帶寬增長,數據流量不斷增大,網絡核心部分的數據接口將面臨瓶頸問題,原有的單一線路將很難知足需求,並且線路的升級又過於昂貴甚至難以實現,這時就能夠考慮採用鏈路聚合(Trunking)技術。
鏈路聚合技術(第二層負載均衡)將多條物理鏈路看成一條單一的聚合邏輯鏈路使用,網絡數據流量由聚合邏輯鏈路中全部物理鏈路共同承擔,由此在邏輯上增大了鏈路的容量,使其能知足帶寬增長的需求。
現代負載均衡技術一般操做於網絡的第四層或第七層。第四層負載均衡將一個Internet上合法註冊的IP地址映射爲多個內部服務器的IP地址,對每次 TCP鏈接請求動態使用其中一個內部IP地址,達到負載均衡的目的。在第四層交換機中,此種均衡技術獲得普遍的應用,一個目標地址是服務器羣VIP(虛擬 IP,Virtual IP address)鏈接請求的數據包流經交換機,交換機根據源端和目的IP地址、TCP或UDP端口號和必定的負載均衡策略,在服務器IP和VIP間進行映射,選取服務器羣中最好的服務器來處理鏈接請求。

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

七層負載均衡優勢表如今以下幾個方面:
1)經過對HTTP報頭的檢查,能夠檢測出HTTP400、500和600系列的錯誤信息,於是能透明地將鏈接請求從新定向到另外一臺服務器,避免應用層故障。
2)可根據流經的數據類型(如判斷數據包是圖像文件、壓縮文件或多媒體文件格式等),把數據流量引向相應內容的服務器來處理,增長系統性能。
3)能根據鏈接請求的類型,如是普通文本、圖象等靜態文檔請求,仍是asp、cgi等的動態文檔請求,把相應的請求引向相應的服務器來處理,提升系統的性能及安全性。

七層負載均衡缺點表如今以下幾個方面:
1)七層負載均衡受到其所支持的協議限制(通常只有HTTP),這樣就限制了它應用的普遍性。
2)七層負載均衡檢查HTTP報頭會佔用大量的系統資源,勢必會影響到系統的性能,在大量鏈接請求的狀況下,負載均衡設備自身容易成爲網絡總體性能的瓶頸。

5、負載均衡策略
在實際應用中,咱們可能不想僅僅是把客戶端的服務請求平均地分配給內部服務器,而無論服務器是否宕機。而是想使Pentium III服務器比Pentium II能接受更多的服務請求,一臺處理服務請求較少的服務器能分配到更多的服務請求,出現故障的服務器將再也不接受服務請求直至故障恢復等等。選擇合適的負載均衡策略,使多個設備能很好的共同完成任務,消除或避免現有網絡負載分佈不均、數據流量擁擠反應時間長的瓶頸。在各負載均衡方式中,針對不一樣的應用需求,在OSI參考模型的第2、3、4、七層的負載均衡都有相應的負載均衡策略。

負載均衡策略的優劣及其實現的難易程度有兩個關鍵因素:負載均衡算法;對網絡系統情況的檢測方式和能力。
負載均衡算法
1)輪循均衡(Round Robin):每一次來自網絡的請求輪流分配給內部中的服務器,從1至N而後從新開始。此種均衡算法適合於服務器組中的全部服務器都有相同的軟硬件配置而且平均服務請求相對均衡的狀況。
2)權重輪循均衡(Weighted Round Robin):根據服務器的不一樣處理能力,給每一個服務器分配不一樣的權值,使其可以接受相應權值數的服務請求。例如:服務器A的權值被設計成1,B的權值是 3,C的權值是6,則服務器A、B、C將分別接受到10%、30%、60%的服務請求。此種均衡算法能確保高性能的服務器獲得更多的使用率,避免低性能的服務器負載太重。
3)隨機均衡(Random):把來自網絡的請求隨機分配給內部中的多個服務器。
4)權重隨機均衡(Weighted Random):此種均衡算法相似於權重輪循算法,不過在處理請求分擔時是個隨機選擇的過程。
5)響應速度均衡(Response Time):負載均衡設備對內部各服務器發出一個探測請求(例如Ping),而後根據內部中各服務器對探測請求的最快響應時間來決定哪一臺服務器來響應客戶端的服務請求。此種均衡算法能較好的反映服務器的當前運行狀態,但這最快響應時間僅僅指的是負載均衡設備與服務器間的最快響應時間,而不是客戶端與服務器間的最快響應時間。
6)最少鏈接數均衡(Least Connection):客戶端的每一次請求服務在服務器停留的時間可能會有較大的差別,隨着工做時間加長,若是採用簡單的輪循或隨機均衡算法,每一臺服務器上的鏈接進程可能會產生極大的不一樣,並無達到真正的負載均衡。最少鏈接數均衡算法對內部中需負載的每一臺服務器都有一個數據記錄,記錄當前該服務器正在處理的鏈接數量,當有新的服務鏈接請求時,將把當前請求分配給鏈接數最少的服務器,使均衡更加符合實際狀況,負載更加均衡。此種均衡算法適合長時處理的請求服務,如FTP。
7)處理能力均衡:此種均衡算法將把服務請求分配給內部中處理負荷(根據服務器CPU型號、CPU數量、內存大小及當前鏈接數等換算而成)最輕的服務器,因爲考慮到了內部服務器的處理能力及當前網絡運行情況,因此此種均衡算法相對來講更加精確,尤爲適合運用到第七層(應用層)負載均衡的狀況下。
8)DNS響應均衡(Flash DNS):在Internet上,不管是HTTP、FTP或是其它的服務請求,客戶端通常都是經過域名解析來找到服務器確切的IP地址的。在此均衡算法下,分處在不一樣地理位置的負載均衡設備收到同一個客戶端的域名解析請求,並在同一時間內把此域名解析成各自相對應服務器的IP地址(即與此負載均衡設備在同一位地理位置的服務器的IP地址)並返回給客戶端,則客戶端將以最早收到的域名解析IP地址來繼續請求服務,而忽略其它的IP地址響應。在種均衡策略適合應用在全局負載均衡的狀況下,對本地負載均衡是沒有意義的。

相關文章
相關標籤/搜索