轉(zhuǎn): http://kb.cnblogs.com/page/188170/
? ? (一)
? ? ? 簡單理解四層和七層負(fù)載均衡:
①?所謂四層就是基于IP+端口的負(fù)載均衡;七層就是基于URL等應(yīng)用層信息的負(fù)載均衡;同理,還有基于MAC地址的二層負(fù)載均衡和基于IP地址的三層負(fù)載均衡。 換句換說,二層負(fù)載均衡會通過一個虛擬MAC地址接收請求,然后再分配到真實(shí)的MAC地址;三層負(fù)載均衡會通過一個虛擬IP地址接收請求,然后再分配到真實(shí)的IP地址;四層通過虛擬IP+端口接收請求,然后再分配到真實(shí)的服務(wù)器;七層通過虛擬的URL或主機(jī)名接收請求,然后再分配到真實(shí)的服務(wù)器。
②?所謂的四到七層負(fù)載均衡,就是在對后臺的服務(wù)器進(jìn)行負(fù)載均衡時,依據(jù)四層的信息或七層的信息來決定怎么樣轉(zhuǎn)發(fā)流量。 比如四層的負(fù)載均衡,就是通過發(fā)布三層的IP地址(VIP),然后加四層的端口號,來決定哪些流量需要做負(fù)載均衡,對需要處理的流量進(jìn)行NAT處理,轉(zhuǎn)發(fā)至后臺服務(wù)器,并記錄下這個TCP或者UDP的流量是由哪臺服務(wù)器處理的,后續(xù)這個連接的所有流量都同樣轉(zhuǎn)發(fā)到同一臺服務(wù)器處理。七層的負(fù)載均衡,就是在四層的基礎(chǔ)上(沒有四層是絕對不可能有七層的),再考慮應(yīng)用層的特征,比如同一個Web服務(wù)器的負(fù)載均衡,除了根據(jù)VIP加80端口辨別是否需要處理的流量,還可根據(jù)七層的URL、瀏覽器類別、語言來決定是否要進(jìn)行負(fù)載均衡。舉個例子,如果你的Web服務(wù)器分成兩組,一組是中文語言的,一組是英文語言的,那么七層負(fù)載均衡就可以當(dāng)用戶來訪問你的域名時,自動辨別用戶語言,然后選擇對應(yīng)的語言服務(wù)器組進(jìn)行負(fù)載均衡處理。
③?負(fù)載均衡器通常稱為四層交換機(jī)或七層交換機(jī)。四層交換機(jī)主要分析IP層及TCP/UDP層,實(shí)現(xiàn)四層流量負(fù)載均衡。七層交換機(jī)除了支持四層負(fù)載均衡以外,還有分析應(yīng)用層的信息,如HTTP協(xié)議URI或Cookie信息。
1、負(fù)載均衡分為L4 switch(四層交換),即在OSI第4層工作,就是TCP層啦。此種Load Balance不理解應(yīng)用協(xié)議(如HTTP/FTP/MySQL等等)。例子:LVS,F(xiàn)5。
2、另一種叫做L7 switch(七層交換),OSI的最高層,應(yīng)用層。此時,該Load Balancer能理解應(yīng)用協(xié)議。例子: ?haproxy,MySQL Proxy。
注意:上面的很多Load Balancer既可以做四層交換,也可以做七層交換。
(二)
負(fù)載均衡設(shè)備也常被稱為"四到七層交換機(jī)",那么四層和七層兩者到底區(qū)別在哪里?
第一,技術(shù)原理上的區(qū)別。
所謂四層負(fù)載均衡,也就是主要通過報文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見的TCP為例,負(fù)載均衡設(shè)備在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的服務(wù)器,并對報文中目標(biāo)IP地址進(jìn)行修改(改為后端服務(wù)器IP),直接轉(zhuǎn)發(fā)給該服務(wù)器。TCP的連接建立,即三次握手是客戶端和服務(wù)器直接建立的,負(fù)載均衡設(shè)備只是起到一個類似路由器的轉(zhuǎn)發(fā)動作。在某些部署情況下,為保證服務(wù)器回包可以正確返回給負(fù)載均衡設(shè)備,在轉(zhuǎn)發(fā)報文的同時可能還會對報文原來的源地址進(jìn)行修改。
所謂七層負(fù)載均衡,也稱為“內(nèi)容交換”,也就是主要通過報文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。
以常見的TCP為例,負(fù)載均衡設(shè)備如果要根據(jù)真正的應(yīng)用層內(nèi)容再選擇服務(wù)器,只能先代理最終的服務(wù)器和客戶端建立連接(三次握手)后,才可能接受到客戶端發(fā)送的真正應(yīng)用層內(nèi)容的報文,然后再根據(jù)該報文中的特定字段,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器。負(fù)載均衡設(shè)備在這種情況下,更類似于一個代理服務(wù)器。負(fù)載均衡和前端的客戶端以及后端的服務(wù)器會分別建立TCP連接。所以從這個技術(shù)原理上來看,七層負(fù)載均衡明顯的對負(fù)載均衡設(shè)備的要求更高,處理七層的能力也必然會低于四層模式的部署方式。
--------------------------------------------------------公司系統(tǒng)需求---------------------------------------------------------------------------------------------
阿里云提供四層(TCP 協(xié)議和 UDP 協(xié)議)和七層(HTTP 和 HTTPS 協(xié)議)的負(fù)載均衡服務(wù)。網(wǎng)絡(luò)層是國際標(biāo)準(zhǔn)化組織(ISO)在1978年提出了的開放系統(tǒng)互聯(lián)參考模型,即著名的 OSI/RM 模型(Open System Interconnection/Reference Model)。它將計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)的通信協(xié)議劃分為七層,自下而上依次為:物理層(Physics Layer)、數(shù)據(jù)鏈路層(Data Link Layer)、網(wǎng)絡(luò)層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應(yīng)用層(Application Layer)。其中第四層完成數(shù)據(jù)傳送服務(wù),上面三層面向用戶。
負(fù)載均衡四層監(jiān)聽將請求直接轉(zhuǎn)發(fā)到后端ECS實(shí)例,而且不修改標(biāo)頭。
負(fù)載均衡七層監(jiān)聽原理上是反向代理的一種實(shí)現(xiàn),客戶端HTTP請求到達(dá)負(fù)載均衡監(jiān)聽后,負(fù)載均衡服務(wù)器會通過與后端ECS建立TCP連接,即再次通過新TCP連接HTTP協(xié)議訪問后端,而不是直接轉(zhuǎn)發(fā)報文到后端ECS。
因?yàn)樵趹?yīng)用層沒有特殊的需求,所以,我們在阿里云上使用四層負(fù)載均衡即可滿足要求。 ? 2017-7-10
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二,應(yīng)用場景的需求。
七層應(yīng)用負(fù)載的好處,是使得整個網(wǎng)絡(luò)更"智能化"。例如訪問一個網(wǎng)站的用戶流量,可以通過七層的方式,將對圖片類的請求轉(zhuǎn)發(fā)到特定的圖片服務(wù)器并可以使用緩存技術(shù);將對文字類的請求可以轉(zhuǎn)發(fā)到特定的文字服務(wù)器并可以使用壓縮技術(shù)。當(dāng)然這只是七層應(yīng)用的一個小案例,從技術(shù)原理上,這種方式可以對客戶端的請求和服務(wù)器的響應(yīng)進(jìn)行任意意義上的修改,極大的提升了應(yīng)用系統(tǒng)在網(wǎng)絡(luò)層的靈活性。很多在后臺,例如Nginx或者Apache上部署的功能可以前移到負(fù)載均衡設(shè)備上,例如客戶請求中的Header重寫,服務(wù)器響應(yīng)中的關(guān)鍵字過濾或者內(nèi)容插入等功能。
另外一個常常被提到功能就是安全性。網(wǎng)絡(luò)中最常見的SYN Flood攻擊,即黑客控制眾多源客戶端,使用虛假IP地址對同一目標(biāo)發(fā)送SYN攻擊,通常這種攻擊會大量發(fā)送SYN報文,耗盡服務(wù)器上的相關(guān)資源,以達(dá)到Denial of Service(DoS)的目的。從技術(shù)原理上也可以看出,四層模式下這些SYN攻擊都會被轉(zhuǎn)發(fā)到后端的服務(wù)器上;而七層模式下這些SYN攻擊自然在負(fù)載均衡設(shè)備上就截止,不會影響后臺服務(wù)器的正常運(yùn)營。另外負(fù)載均衡設(shè)備可以在七層層面設(shè)定多種策略,過濾特定報文,例如SQL?Injection等應(yīng)用層面的特定攻擊手段,從應(yīng)用層面進(jìn)一步提高系統(tǒng)整體安全。
現(xiàn)在的7層負(fù)載均衡,主要還是著重于應(yīng)用HTTP協(xié)議,所以其應(yīng)用范圍主要是眾多的網(wǎng)站或者內(nèi)部信息平臺等基于B/S開發(fā)的系統(tǒng)。 4層負(fù)載均衡則對應(yīng)其他TCP應(yīng)用,例如基于C/S開發(fā)的ERP等系統(tǒng)。
第三,七層應(yīng)用需要考慮的問題。
1:是否真的必要,七層應(yīng)用的確可以提高流量智能化,同時必不可免的帶來設(shè)備配置復(fù)雜,負(fù)載均衡壓力增高以及故障排查上的復(fù)雜性等問題。在設(shè)計(jì)系統(tǒng)時需要考慮四層七層同時應(yīng)用的混雜情況。
2:是否真的可以提高安全性。例如SYN Flood攻擊,七層模式的確將這些流量從服務(wù)器屏蔽,但負(fù)載均衡設(shè)備本身要有強(qiáng)大的抗DDoS能力,否則即使服務(wù)器正常而作為中樞調(diào)度的負(fù)載均衡設(shè)備故障也會導(dǎo)致整個應(yīng)用的崩潰。
3:是否有足夠的靈活度。七層應(yīng)用的優(yōu)勢是可以讓整個應(yīng)用的流量智能化,但是負(fù)載均衡設(shè)備需要提供完善的七層功能,滿足客戶根據(jù)不同情況的基于應(yīng)用的調(diào)度。最簡單的一個考核就是能否取代后臺Nginx或者Apache等服務(wù)器上的調(diào)度功能。能夠提供一個七層應(yīng)用開發(fā)接口的負(fù)載均衡設(shè)備,可以讓客戶根據(jù)需求任意設(shè)定功能,才真正有可能提供強(qiáng)大的靈活性和智能性。
(本節(jié)出自 “ADC技術(shù)博客” 博客,請務(wù)必保留此出處http://virtualadc.blog.51cto.com/3027116/591396)
(三)
負(fù)載均衡四七層介紹:
負(fù)載均衡(Load Balance)建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
負(fù)載均衡有兩方面的含義:首先,大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺節(jié)點(diǎn)設(shè)備上分別處理,減少用戶等待響應(yīng)的時間;其次,單個重負(fù)載的運(yùn)算分擔(dān)到多臺節(jié)點(diǎn)設(shè)備上做并行處理,每個節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高。
本文所要介紹的負(fù)載均衡技術(shù)主要是指在均衡服務(wù)器群中所有服務(wù)器和應(yīng)用程序之間流量負(fù)載的應(yīng)用,目前負(fù)載均衡技術(shù)大多數(shù)是用于提高諸如在Web服務(wù)器、FTP服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器上的Internet服務(wù)器程序的可用性和可伸縮性。
負(fù)載均衡技術(shù)分類
目前有許多不同的負(fù)載均衡技術(shù)用以滿足不同的應(yīng)用需求,下面從負(fù)載均衡所采用的設(shè)備對象、應(yīng)用的網(wǎng)絡(luò)層次(指OSI參考模型)及應(yīng)用的地理結(jié)構(gòu)等來分類。
軟/硬件負(fù)載均衡
軟件負(fù)載均衡解決方案是指在一臺或多臺服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個或多個附加軟件來實(shí)現(xiàn)負(fù)載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的優(yōu)點(diǎn)是基于特定環(huán)境,配置簡單,使用靈活,成本低廉,可以滿足一般的負(fù)載均衡需求。
軟件解決方案缺點(diǎn)也較多,因?yàn)槊颗_服務(wù)器上安裝額外的軟件運(yùn)行會消耗系統(tǒng)不定量的資源,越是功能強(qiáng)大的模塊,消耗得越多,所以當(dāng)連接請求特別大的時候,軟件本身會成為服務(wù)器工作成敗的一個關(guān)鍵;軟件可擴(kuò)展性并不是很好,受到操作系統(tǒng)的限制;由于操作系統(tǒng)本身的Bug,往往會引起安全問題。
硬件負(fù)載均衡解決方案是直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,這種設(shè)備我們通常稱之為負(fù)載均衡器,由于專門的設(shè)備完成專門的任務(wù),獨(dú)立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負(fù)載均衡策略,智能化的流量管理,可達(dá)到最佳的負(fù)載均衡需求。?
負(fù)載均衡器有多種多樣的形式,除了作為獨(dú)立意義上的負(fù)載均衡器外,有些負(fù)載均衡器集成在交換設(shè)備中,置于服務(wù)器與Internet鏈接之間,有些則以兩塊網(wǎng)絡(luò)適配器將這一功能集成到PC中,一塊連接到Internet上,一塊連接到后端服務(wù)器群的內(nèi)部網(wǎng)絡(luò)上。
一般而言,硬件負(fù)載均衡在功能、性能上優(yōu)于軟件方式,不過成本昂貴。
本地/全局負(fù)載均衡
負(fù)載均衡從其應(yīng)用的地理結(jié)構(gòu)上分為本地負(fù)載均衡(Local Load Balance)和全局負(fù)載均衡(Global Load Balance,也叫地域負(fù)載均衡),本地負(fù)載均衡是指對本地的服務(wù)器群做負(fù)載均衡,全局負(fù)載均衡是指對分別放置在不同的地理位置、有不同網(wǎng)絡(luò)結(jié)構(gòu)的服務(wù)器群間作負(fù)載均衡。
本地負(fù)載均衡能有效地解決數(shù)據(jù)流量過大、網(wǎng)絡(luò)負(fù)荷過重的問題,并且不需花費(fèi)昂貴開支購置性能卓越的服務(wù)器,充分利用現(xiàn)有設(shè)備,避免服務(wù)器單點(diǎn)故障造成數(shù)據(jù)流量的損失。其有靈活多樣的均衡策略把數(shù)據(jù)流量合理地分配給服務(wù)器群內(nèi)的服務(wù)器共同負(fù)擔(dān)。即使是再給現(xiàn)有服務(wù)器擴(kuò)充升級,也只是簡單地增加一個新的服務(wù)器到服務(wù)群中,而不需改變現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)、停止現(xiàn)有的服務(wù)。?
全局負(fù)載均衡主要用于在一個多區(qū)域擁有自己服務(wù)器的站點(diǎn),為了使全球用戶只以一個IP地址或域名就能訪問到離自己最近的服務(wù)器,從而獲得最快的訪問速度,也可用于子公司分散站點(diǎn)分布廣的大公司通過Intranet(企業(yè)內(nèi)部互聯(lián)網(wǎng))來達(dá)到資源統(tǒng)一合理分配的目的。
網(wǎng)絡(luò)層次上的負(fù)載均衡
針對網(wǎng)絡(luò)上負(fù)載過重的不同瓶頸所在,從網(wǎng)絡(luò)的不同層次入手,我們可以采用相應(yīng)的負(fù)載均衡技術(shù)來解決現(xiàn)有問題。?
隨著帶寬增加,數(shù)據(jù)流量不斷增大,網(wǎng)絡(luò)核心部分的數(shù)據(jù)接口將面臨瓶頸問題,原有的單一線路將很難滿足需求,而且線路的升級又過于昂貴甚至難以實(shí)現(xiàn),這時就可以考慮采用鏈路聚合(Trunking)技術(shù)。
鏈路聚合技術(shù)(第二層負(fù)載均衡)將多條物理鏈路當(dāng)作一條單一的聚合邏輯鏈路使用,網(wǎng)絡(luò)數(shù)據(jù)流量由聚合邏輯鏈路中所有物理鏈路共同承擔(dān),由此在邏輯上增大了鏈路的容量,使其能滿足帶寬增加的需求。
現(xiàn)代負(fù)載均衡技術(shù)通常操作于網(wǎng)絡(luò)的第四層或第七層。第四層負(fù)載均衡將一個Internet上合法注冊的IP地址映射為多個內(nèi)部服務(wù)器的IP地址,對每次 TCP連接請求動態(tài)使用其中一個內(nèi)部IP地址,達(dá)到負(fù)載均衡的目的。在第四層交換機(jī)中,此種均衡技術(shù)得到廣泛的應(yīng)用,一個目標(biāo)地址是服務(wù)器群VIP(虛擬 IP,Virtual IP address)連接請求的數(shù)據(jù)包流經(jīng)交換機(jī),交換機(jī)根據(jù)源端和目的IP地址、TCP或UDP端口號和一定的負(fù)載均衡策略,在服務(wù)器IP和VIP間進(jìn)行映射,選取服務(wù)器群中最好的服務(wù)器來處理連接請求。
第七層負(fù)載均衡控制應(yīng)用層服務(wù)的內(nèi)容,提供了一種對訪問流量的高層控制方式,適合對HTTP服務(wù)器群的應(yīng)用。第七層負(fù)載均衡技術(shù)通過檢查流經(jīng)的HTTP報頭,根據(jù)報頭內(nèi)的信息來執(zhí)行負(fù)載均衡任務(wù)。
第七層負(fù)載均衡優(yōu)點(diǎn)表現(xiàn)在如下幾個方面:?
通過對HTTP報頭的檢查,可以檢測出HTTP400、500和600系列的錯誤信息,因而能透明地將連接請求重新定向到另一臺服務(wù)器,避免應(yīng)用層故障。
可根據(jù)流經(jīng)的數(shù)據(jù)類型(如判斷數(shù)據(jù)包是圖像文件、壓縮文件或多媒體文件格式等),把數(shù)據(jù)流量引向相應(yīng)內(nèi)容的服務(wù)器來處理,增加系統(tǒng)性能。
能根據(jù)連接請求的類型,如是普通文本、圖象等靜態(tài)文檔請求,還是asp、cgi等的動態(tài)文檔請求,把相應(yīng)的請求引向相應(yīng)的服務(wù)器來處理,提高系統(tǒng)的性能及安全性。
第七層負(fù)載均衡受到其所支持的協(xié)議限制(一般只有HTTP),這樣就限制了它應(yīng)用的廣泛性,并且檢查HTTP報頭會占用大量的系統(tǒng)資源,勢必會影響到系統(tǒng)的性能,在大量連接請求的情況下,負(fù)載均衡設(shè)備自身容易成為網(wǎng)絡(luò)整體性能的瓶頸。
負(fù)載均衡策略
在實(shí)際應(yīng)用中,我們可能不想僅僅是把客戶端的服務(wù)請求平均地分配給內(nèi)部服務(wù)器,而不管服務(wù)器是否宕機(jī)。而是想使Pentium III服務(wù)器比Pentium II能接受更多的服務(wù)請求,一臺處理服務(wù)請求較少的服務(wù)器能分配到更多的服務(wù)請求,出現(xiàn)故障的服務(wù)器將不再接受服務(wù)請求直至故障恢復(fù)等等。
選擇合適的負(fù)載均衡策略,使多個設(shè)備能很好的共同完成任務(wù),消除或避免現(xiàn)有網(wǎng)絡(luò)負(fù)載分布不均、數(shù)據(jù)流量擁擠反應(yīng)時間長的瓶頸。在各負(fù)載均衡方式中,針對不同的應(yīng)用需求,在OSI參考模型的第二、三、四、七層的負(fù)載均衡都有相應(yīng)的負(fù)載均衡策略。
負(fù)載均衡策略的優(yōu)劣及其實(shí)現(xiàn)的難易程度有兩個關(guān)鍵因素:一、負(fù)載均衡算法,二、對網(wǎng)絡(luò)系統(tǒng)狀況的檢測方式和能力。?
考慮到服務(wù)請求的不同類型、服務(wù)器的不同處理能力以及隨機(jī)選擇造成的負(fù)載分配不均勻等問題,為了更加合理的把負(fù)載分配給內(nèi)部的多個服務(wù)器,就需要應(yīng)用相應(yīng)的能夠正確反映各個服務(wù)器處理能力及網(wǎng)絡(luò)狀態(tài)的負(fù)載均衡算法:
輪循均衡(Round Robin):每一次來自網(wǎng)絡(luò)的請求輪流分配給內(nèi)部中的服務(wù)器,從1至N然后重新開始。此種均衡算法適合于服務(wù)器組中的所有服務(wù)器都有相同的軟硬件配置并且平均服務(wù)請求相對均衡的情況。
權(quán)重輪循均衡(Weighted Round Robin):根據(jù)服務(wù)器的不同處理能力,給每個服務(wù)器分配不同的權(quán)值,使其能夠接受相應(yīng)權(quán)值數(shù)的服務(wù)請求。例如:服務(wù)器A的權(quán)值被設(shè)計(jì)成1,B的權(quán)值是 3,C的權(quán)值是6,則服務(wù)器A、B、C將分別接受到10%、30%、60%的服務(wù)請求。此種均衡算法能確保高性能的服務(wù)器得到更多的使用率,避免低性能的服務(wù)器負(fù)載過重。
隨機(jī)均衡(Random):把來自網(wǎng)絡(luò)的請求隨機(jī)分配給內(nèi)部中的多個服務(wù)器。
權(quán)重隨機(jī)均衡(Weighted Random):此種均衡算法類似于權(quán)重輪循算法,不過在處理請求分擔(dān)時是個隨機(jī)選擇的過程。
響應(yīng)速度均衡(Response Time):負(fù)載均衡設(shè)備對內(nèi)部各服務(wù)器發(fā)出一個探測請求(例如Ping),然后根據(jù)內(nèi)部中各服務(wù)器對探測請求的最快響應(yīng)時間來決定哪一臺服務(wù)器來響應(yīng)客戶端的服務(wù)請求。此種均衡算法能較好的反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài),但這最快響應(yīng)時間僅僅指的是負(fù)載均衡設(shè)備與服務(wù)器間的最快響應(yīng)時間,而不是客戶端與服務(wù)器間的最快響應(yīng)時間。
最少連接數(shù)均衡(Least Connection):客戶端的每一次請求服務(wù)在服務(wù)器停留的時間可能會有較大的差異,隨著工作時間加長,如果采用簡單的輪循或隨機(jī)均衡算法,每一臺服務(wù)器上的連接進(jìn)程可能會產(chǎn)生極大的不同,并沒有達(dá)到真正的負(fù)載均衡。最少連接數(shù)均衡算法對內(nèi)部中需負(fù)載的每一臺服務(wù)器都有一個數(shù)據(jù)記錄,記錄當(dāng)前該服務(wù)器正在處理的連接數(shù)量,當(dāng)有新的服務(wù)連接請求時,將把當(dāng)前請求分配給連接數(shù)最少的服務(wù)器,使均衡更加符合實(shí)際情況,負(fù)載更加均衡。此種均衡算法適合長時處理的請求服務(wù),如FTP。?
處理能力均衡:此種均衡算法將把服務(wù)請求分配給內(nèi)部中處理負(fù)荷(根據(jù)服務(wù)器CPU型號、CPU數(shù)量、內(nèi)存大小及當(dāng)前連接數(shù)等換算而成)最輕的服務(wù)器,由于考慮到了內(nèi)部服務(wù)器的處理能力及當(dāng)前網(wǎng)絡(luò)運(yùn)行狀況,所以此種均衡算法相對來說更加精確,尤其適合運(yùn)用到第七層(應(yīng)用層)負(fù)載均衡的情況下。
DNS響應(yīng)均衡(Flash DNS):在Internet上,無論是HTTP、FTP或是其它的服務(wù)請求,客戶端一般都是通過域名解析來找到服務(wù)器確切的IP地址的。在此均衡算法下,分處在不同地理位置的負(fù)載均衡設(shè)備收到同一個客戶端的域名解析請求,并在同一時間內(nèi)把此域名解析成各自相對應(yīng)服務(wù)器的IP地址(即與此負(fù)載均衡設(shè)備在同一位地理位置的服務(wù)器的IP地址)并返回給客戶端,則客戶端將以最先收到的域名解析IP地址來繼續(xù)請求服務(wù),而忽略其它的IP地址響應(yīng)。在種均衡策略適合應(yīng)用在全局負(fù)載均衡的情況下,對本地負(fù)載均衡是沒有意義的。
盡管有多種的負(fù)載均衡算法可以較好的把數(shù)據(jù)流量分配給服務(wù)器去負(fù)載,但如果負(fù)載均衡策略沒有對網(wǎng)絡(luò)系統(tǒng)狀況的檢測方式和能力,一旦在某臺服務(wù)器或某段負(fù)載均衡設(shè)備與服務(wù)器網(wǎng)絡(luò)間出現(xiàn)故障的情況下,負(fù)載均衡設(shè)備依然把一部分?jǐn)?shù)據(jù)流量引向那臺服務(wù)器,這勢必造成大量的服務(wù)請求被丟失,達(dá)不到不間斷可用性的要求。所以良好的負(fù)載均衡策略應(yīng)有對網(wǎng)絡(luò)故障、服務(wù)器系統(tǒng)故障、應(yīng)用服務(wù)故障的檢測方式和能力:
Ping偵測:通過ping的方式檢測服務(wù)器及網(wǎng)絡(luò)系統(tǒng)狀況,此種方式簡單快速,但只能大致檢測出網(wǎng)絡(luò)及服務(wù)器上的操作系統(tǒng)是否正常,對服務(wù)器上的應(yīng)用服務(wù)檢測就無能為力了。
TCP Open偵測:每個服務(wù)都會開放某個通過TCP連接,檢測服務(wù)器上某個TCP端口(如Telnet的23口,HTTP的80口等)是否開放來判斷服務(wù)是否正常。
HTTP URL偵測:比如向HTTP服務(wù)器發(fā)出一個對main.html文件的訪問請求,如果收到錯誤信息,則認(rèn)為服務(wù)器出現(xiàn)故障。
負(fù)載均衡策略的優(yōu)劣除受上面所講的兩個因素影響外,在有些應(yīng)用情況下,我們需要將來自同一客戶端的所有請求都分配給同一臺服務(wù)器去負(fù)擔(dān),例如服務(wù)器將客戶端注冊、購物等服務(wù)請求信息保存的本地?cái)?shù)據(jù)庫的情況下,把客戶端的子請求分配給同一臺服務(wù)器來處理就顯的至關(guān)重要了。有兩種方式可以解決此問題,一是根據(jù)IP地址把來自同一客戶端的多次請求分配給同一臺服務(wù)器處理,客戶端IP地址與服務(wù)器的對應(yīng)信息是保存在負(fù)載均衡設(shè)備上的;二是在客戶端瀏覽器 cookie內(nèi)做獨(dú)一無二的標(biāo)識來把多次請求分配給同一臺服務(wù)器處理,適合通過代理服務(wù)器上網(wǎng)的客戶端。
還有一種路徑外返回模式(Out of Path Return),當(dāng)客戶端連接請求發(fā)送給負(fù)載均衡設(shè)備的時候,中心負(fù)載均衡設(shè)備將請求引向某個服務(wù)器,服務(wù)器的回應(yīng)請求不再返回給中心負(fù)載均衡設(shè)備,即繞過流量分配器,直接返回給客戶端,因此中心負(fù)載均衡設(shè)備只負(fù)責(zé)接受并轉(zhuǎn)發(fā)請求,其網(wǎng)絡(luò)負(fù)擔(dān)就減少了很多,并且給客戶端提供了更快的響應(yīng)時間。此種模式一般用于HTTP服務(wù)器群,在各服務(wù)器上要安裝一塊虛擬網(wǎng)絡(luò)適配器,并將其IP地址設(shè)為服務(wù)器群的VIP,這樣才能在服務(wù)器直接回應(yīng)客戶端請求時順利的達(dá)成三次握手。
負(fù)載均衡實(shí)施要素
負(fù)載均衡方案應(yīng)是在網(wǎng)站建設(shè)初期就應(yīng)考慮的問題,不過有時隨著訪問流量的爆炸性增長,超出決策者的意料,這也就成為不得不面對的問題。當(dāng)我們在引入某種負(fù)載均衡方案乃至具體實(shí)施時,像其他的許多方案一樣,首先是確定當(dāng)前及將來的應(yīng)用需求,然后在代價與收效之間做出權(quán)衡。
針對當(dāng)前及將來的應(yīng)用需求,分析網(wǎng)絡(luò)瓶頸的不同所在,我們就需要確立是采用哪一類的負(fù)載均衡技術(shù),采用什么樣的均衡策略,在可用性、兼容性、安全性等等方面要滿足多大的需求,如此等等。?
不管負(fù)載均衡方案是采用花費(fèi)較少的軟件方式,還是購買代價高昂在性能功能上更強(qiáng)的第四層交換機(jī)、負(fù)載均衡器等硬件方式來實(shí)現(xiàn),亦或其他種類不同的均衡技術(shù),下面這幾項(xiàng)都是我們在引入均衡方案時可能要考慮的問題:
性能:性能是我們在引入均衡方案時需要重點(diǎn)考慮的問題,但也是一個最難把握的問題。衡量性能時可將每秒鐘通過網(wǎng)絡(luò)的數(shù)據(jù)包數(shù)目做為一個參數(shù),另一個參數(shù)是均衡方案中服務(wù)器群所能處理的最大并發(fā)連接數(shù)目,但是,假設(shè)一個均衡系統(tǒng)能處理百萬計(jì)的并發(fā)連接數(shù),可是卻只能以每秒2個包的速率轉(zhuǎn)發(fā),這顯然是沒有任何作用的。性能的優(yōu)劣與負(fù)載均衡設(shè)備的處理能力、采用的均衡策略息息相關(guān),并且有兩點(diǎn)需要注意:一、均衡方案對服務(wù)器群整體的性能,這是響應(yīng)客戶端連接請求速度的關(guān)鍵;二、負(fù)載均衡設(shè)備自身的性能,避免有大量連接請求時自身性能不足而成為服務(wù)瓶頸。有時我們也可以考慮采用混合型負(fù)載均衡策略來提升服務(wù)器群的總體性能,如DNS負(fù)載均衡與NAT負(fù)載均衡相結(jié)合。另外,針對有大量靜態(tài)文檔請求的站點(diǎn),也可以考慮采用高速緩存技術(shù),相對來說更節(jié)省費(fèi)用,更能提高響應(yīng)性能;對有大量ssl/xml內(nèi)容傳輸?shù)恼军c(diǎn),更應(yīng)考慮采用ssl/xml加速技術(shù)。
可擴(kuò)展性:IT技術(shù)日新月異,一年以前最新的產(chǎn)品,現(xiàn)在或許已是網(wǎng)絡(luò)中性能最低的產(chǎn)品;業(yè)務(wù)量的急速上升,一年前的網(wǎng)絡(luò),現(xiàn)在需要新一輪的擴(kuò)展。合適的均衡解決方案應(yīng)能滿足這些需求,能均衡不同操作系統(tǒng)和硬件平臺之間的負(fù)載,能均衡HTTP、郵件、新聞、代理、數(shù)據(jù)庫、防火墻和 Cache等不同服務(wù)器的負(fù)載,并且能以對客戶端完全透明的方式動態(tài)增加或刪除某些資源。
靈活性:均衡解決方案應(yīng)能靈活地提供不同的應(yīng)用需求,滿足應(yīng)用需求的不斷變化。在不同的服務(wù)器群有不同的應(yīng)用需求時,應(yīng)有多樣的均衡策略提供更廣泛的選擇。
可靠性:在對服務(wù)質(zhì)量要求較高的站點(diǎn),負(fù)載均衡解決方案應(yīng)能為服務(wù)器群提供完全的容錯性和高可用性。但在負(fù)載均衡設(shè)備自身出現(xiàn)故障時,應(yīng)該有良好的冗余解決方案,提高可靠性。使用冗余時,處于同一個冗余單元的多個負(fù)載均衡設(shè)備必須具有有效的方式以便互相進(jìn)行監(jiān)控,保護(hù)系統(tǒng)盡可能地避免遭受到重大故障的損失。
易管理性:不管是通過軟件還是硬件方式的均衡解決方案,我們都希望它有靈活、直觀和安全的管理方式,這樣便于安裝、配置、維護(hù)和監(jiān)控,提高工作效率,避免差錯。在硬件負(fù)載均衡設(shè)備上,目前主要有三種管理方式可供選擇:一、命令行接口(CLI:Command Line Interface),可通過超級終端連接負(fù)載均衡設(shè)備串行接口來管理,也能telnet遠(yuǎn)程登錄管理,在初始化配置時,往往要用到前者;二、圖形用戶接口(GUI:Graphical User Interfaces),有基于普通web頁的管理,也有通過Java Applet 進(jìn)行安全管理,一般都需要管理端安裝有某個版本的瀏覽器;三、SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)支持,通過第三方網(wǎng)絡(luò)管理軟件對符合SNMP標(biāo)準(zhǔn)的設(shè)備進(jìn)行管理。