linux有4種負載平衡:1、二層負載平衡(mac),是用虛擬mac位址方式,外部對虛擬MAC位址請求,負載平衡接收後分配後端實際的MAC位址回應; 2.三層負載平衡(ip),採用虛擬IP位址方式,外部對虛擬的ip位址請求,負載平衡接收後分配後端實際的IP位址回應;3、四層負載平衡(tcp),從第四層「傳輸層」開始,使用「ip port」接收請求;4、七層負載平衡(http)。
本教學操作環境:linux7.3系統、Dell G3電腦。
在常規的開發 和維運 工作中,經常會運用到負載平衡服務,也經常會提到四層負載、七層負載。 到底什麼是四層負載?什麼是七層負載? 這兩者之間又有什麼不同?
1)#負載平衡(Load Balance)建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴展網路設備和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。 負載平衡有兩方面的意義:首先,大量的並發存取或資料流量分擔到多台節點設備上分別處理,減少使用者等待回應的時間;其次,單一重負載的運算分擔到多台節點設備上做並行處理,每個節點設備處理結束後,將結果匯總,回傳給用戶,系統處理能力大幅提升。
2)簡單來說就是:其一是將大量的並發處理轉送給後端多個節點處理,減少工作回應時間;其二是將單一繁重的工作轉發給後端多個節點處理,處理完再返回給負載平衡中心,然後再回傳給使用者。目前負載平衡技術大多數是用於提高諸如在Web伺服器、FTP伺服器和其它關鍵任務伺服器上的網路伺服器程式的可用性和可擴展性。
開發、運作中最常見的四層負載平衡和七層負載平衡。
根據OSI模型分的二層負載,一般是用虛擬mac位址方式,外部對虛擬MAC位址請求,負載平衡接收後分配後端實際的MAC位址回應。
一般採用虛擬IP位址方式,外部對虛擬的ip位址請求,負載平衡接收後分配後端實際的IP位址響應。 (即一個ip對一個ip的轉送, 埠全放開)
在三次負載平衡的基礎上,即從第四層"傳輸層"開始,使用"ip port"接收請求,再轉送到對應的機器。
就是基於IP 連接埠的負載平衡:在三層負載平衡的基礎上,透過發布三層的IP位址(VIP),然後加四層的連接埠號,來決定哪些流量需要做負載平衡,對需要處理的流量進行NAT處理,轉送到後台伺服器,並記錄下這個TCP或UDP的流量是由哪台伺服器處理的,後續這個連線的所有流量都同樣轉送到同一台伺服器處理。
對應的負載平衡器稱為四層交換器(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載平衡。此種負載平衡器不理解應用協定(如HTTP/FTP/MySQL等等)。
實現四層負載平衡的軟體有:
F5:硬體負載平衡器,功能很好,但是成本很高。
lvs:重量級的四層負載軟體
nginx:輕量級的四層負載軟體,具有快取功能,正規表示式較靈活
haproxy:模擬四層轉發,較靈活
從第七層"應用層"開始, 根據虛擬的url或IP,主機名稱接收請求,再轉向對應的處理伺服器。
就是基於虛擬的URL或主機IP的負載平衡:在四層負載平衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,例如同一個Web伺服器的負載平衡,除了根據VIP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載平衡。舉個例子,如果你的網路伺服器分成兩組,一組是中文語言的,一組是英文語言的,那麼七層負載平衡就可以當使用者來存取你的網域名稱時,自動辨別使用者語言,然後選擇對應的語言伺服器群組進行負載平衡處理。
對應的負載平衡器稱為七層交換器(L7 switch),除了支援四層負載平衡以外,還有分析應用層的信息,如HTTP協定URI或Cookie訊息,實現七層負載平衡。此種負載平衡器能理解應用協定。
實現七層負載平衡的軟體有:
haproxy:天生負載平衡技能,全面支援七層代理,會話保持,標記,路徑轉移;
nginx:只在http協定與mail協定上功能比較好,效能與haproxy差不多;
apache:功能較差
Mysql proxy:功能尚可。
總的來說,一般是lvs做4層負載;nginx做7層負載(也能做4層負載, 透過stream模組);haproxy比較靈活,4層和7層負載均衡都能做。
所謂四層負載平衡,也就是主要透過封包中的目標位址和端口,再加上負載平衡設備設定的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的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伺服器因為可以聯網,所以可以直接返回資料給客戶端
#七層應用負載的好處,是使得整個網路更"智慧化"。例如訪問一個網站的使用者流量,可以透過七層的方式,將對圖片類別的請求轉發到特定的圖片伺服器並可以使用快取技術;將對文字類別的請求可以轉發到特定的文字伺服器並可以使用壓縮技術。當然這只是七層應用的小案例,從技術原理上,這種方式可以對客戶端的請求和伺服器的回應進行任意意義上的修改,極大的提升了應用系統在網路層的靈活性。很多在後台,例如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.1) 是否真的必要。七層應用的確可以提高流量智慧化,同時必不可免的帶來設備配置複雜,負載平衡壓力增高以及故障排查上的複雜性等問題。在設計系統時需考慮四層七層同時應用的混雜情況。
3.2) 是否真的可以提高安全性。例如SYN Flood攻擊,七層模式的確將這些流量從伺服器屏蔽,但負載平衡設備本身要有強大的抗DDoS能力,否則即使伺服器正常而作為中樞調度的負載平衡設備故障也會導致整個應用的崩潰。
3.3) 是否有足夠的彈性度。七層應用的優點是可以讓整個應用的流量智慧化,但是負載平衡設備需要提供完善的七層功能,滿足客戶根據不同情況的基於應用的調度。最簡單的一個考核就是能否取代後台Nginx或Apache等伺服器上的調度功能。能夠提供一個七層應用開發介面的負載平衡設備,讓客戶可以根據需求任意設定功能,才真正有可能提供強大的靈活性和智慧性。
4.1) 智慧性
七層負載平衡由於具備OIS七層的所有功能,所以在處理使用者需求上能更靈活,從理論上講,七層模型能對使用者的所有跟隨服務端的請求進行修改。例如對文件header添加信息,根據不同的文件類型進行分類轉發。四層模型僅支援基於網路層的需求轉發,不能修改使用者請求的內容。
4.2) 安全性
七層負載平衡由於具有OSI模型的全部功能,能更容易抵禦來自網路的攻擊;四層模型從原理上講,會直接將使用者的請求轉送給後端節點,無法直接抵禦網路攻擊。
4.3) 複雜度
四層模型一般比較簡單的架構,容易管理,容易定位問題;七層模型架構比較複雜,通常也需要考慮結合四層模型的混用情況,出現問題定位較為複雜。
4.4) 效率比
四層模型基於更底層的設置,通常效率更高,但應用範圍有限;七層模型需要更多的資源損耗,在理論上講比四層模型有更強的功能,現在的實作更多是基於http應用。
軟體負載平衡解決方案是指在一台或多台伺服器對應的作業系統上安裝一個或多個附加軟體來實現負載平衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive ipvs等,它的優點是基於特定環境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載平衡需求。 軟體解決方案缺點也較多,因為每台伺服器上安裝額外的軟體運作會消耗系統不定量的資源,越是功能強大的模組,消耗越多,所以當連線請求特別大的時候,軟體本身會成為伺服器工作成敗的關鍵;軟體可擴充性並不是很好,受到作業系統的限制;由於作業系統本身的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標頭,根據標頭內的資訊來執行負載平衡任務。
七層負載平衡優點表現在下列幾個方面:
1)透過對HTTP標頭的檢查,可以偵測出HTTP400、500和600系列的錯誤訊息,從而能透明地將連接請求重新定向到另一台伺服器,避免應用層故障。
2)可根據流經的資料類型(如判斷資料包是影像檔案、壓縮檔案或多媒體檔案格式等),把資料流量引向對應內容的伺服器來處理,增加系統效能。
3)能根據連線請求的類型,如是普通文字、圖像等靜態文件請求,還是asp、cgi等的動態文件請求,把對應的請求引向對應的伺服器來處理,提高系統的效能及安全性。
七層負載平衡缺點表現在下列幾個方面:
1)七層負載平衡受到其所支援的協定限制(一般只有HTTP),這樣就限制了它應用的廣泛性。
2)七層負載平衡檢查HTTP標頭會佔用大量的系統資源,勢必會影響到系統的效能,在大量連線要求的情況下,負載平衡設備本身容易成為網路整體效能的瓶頸。
在實際應用程式中,可能不想只是把客戶端的服務請求平均分配給內部伺服器,而不管伺服器是否宕機。而是想讓Pentium III伺服器比Pentium II能接受更多的服務請求,一台處理服務請求較少的伺服器能分配到更多的服務請求,出現故障的伺服器將不再接受服務請求直到故障復原等等。選擇合適的負載平衡策略,使多個設備能良好的共同完成任務,消除或避免現有網路負載分佈不均、資料流量擁擠反應時間長的瓶頸。在各負載平衡方式中,針對不同的應用需求,在OSI參考模型的第二、三、四、七層的負載平衡都有對應的負載平衡策略。
負載平衡策略的優劣及其實現的難易度有兩個關鍵因素:負載平衡演算法;網路系統狀況的偵測方式和能力。
負載平衡演算法
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):在網路上,無論是HTTP、FTP或是其它的服務請求,客戶端一般都是透過網域解析來找到伺服器確切的IP位址的。在此均衡演算法下,分處在不同地理位置的負載平衡設備收到同一個客戶端的網域解析請求,並在同一時間內將此網域解析成各自相對應伺服器的IP位址(即與此負載平衡設備在同一位地理位置的伺服器的IP位址)並傳回給客戶端,則用戶端將以最先收到的網域名稱解析IP位址來繼續要求服務,而忽略其它的IP位址回應。在種平衡策略適合應用在全域負載平衡的情況下,對本地負載平衡是沒有意義的。
相關推薦:《Linux影片教學》
以上是linux有幾種負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!