http://blog.csdn.net/boonya/article/details/38733787
2014
原文參考:http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166350.html
Web集群是由多個(gè)同時(shí)運(yùn)行同一個(gè)web應(yīng)用的服務(wù)器組成,在外界看來就像一個(gè)服務(wù)器一樣,這多臺服務(wù)器共同來為客戶提供更高性能的服務(wù)。集群更標(biāo)準(zhǔn)的定義是:一組相互獨(dú)立的服務(wù)器在網(wǎng)絡(luò)中表現(xiàn)為單一的系統(tǒng),并以單一系統(tǒng)的模式加以管理,此單一系統(tǒng)為客戶工作站提供高可靠性的服務(wù)。
而負(fù)載均衡的任務(wù)就是負(fù)責(zé)多個(gè)服務(wù)器之間(集群內(nèi))實(shí)現(xiàn)合理的任務(wù)分配,使這些服務(wù)器(集群)不會出現(xiàn)因某一臺超負(fù)荷、而其他的服務(wù)器卻沒有充分發(fā)揮處理能力的情況。負(fù)載均衡有兩個(gè)方面的含義:首先,把大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺節(jié)點(diǎn)上分別處理,減少用戶等待響應(yīng)的時(shí)間;其次,單個(gè)高負(fù)載的運(yùn)算分擔(dān)到多臺節(jié)點(diǎn)上做并行處理,每個(gè)節(jié)點(diǎn)設(shè)備處理結(jié)束后,將結(jié)果匯總,再返回給用戶,使得信息系統(tǒng)處理能力可以得到大幅度提高這是目前運(yùn)用最為廣泛的雙節(jié)點(diǎn)雙應(yīng)用的Active/Active模式。
支撐用戶業(yè)務(wù)的應(yīng)用程序在正常狀態(tài)下分別在兩臺節(jié)點(diǎn)上運(yùn)行,各自有自己的資源,比如IP地址、磁盤陣列上的卷或者文件系統(tǒng)。當(dāng)某一方的系統(tǒng)或者資源出現(xiàn)故障時(shí),就會將應(yīng)用和相關(guān)資源切換到對方的節(jié)點(diǎn)上。
這種模式的最大優(yōu)點(diǎn)是不會有服務(wù)器的“閑置”,兩臺服務(wù)器在正常情況下都在工作。但如果有故障發(fā)生導(dǎo)致切換,應(yīng)用將放在同一臺服務(wù)器上運(yùn)行,由于服務(wù)器的處理能力有可能不能同時(shí)滿足數(shù)據(jù)庫和應(yīng)用程序的峰值要求,這將會出現(xiàn)處理能力不夠的情況,降低業(yè)務(wù)響應(yīng)水平。
兩節(jié)點(diǎn)的Active/Standby模式是HA中最簡單的一種,兩臺服務(wù)器通過雙心跳線路組成一個(gè)集群。應(yīng)用Application聯(lián)合各個(gè)可選的系統(tǒng)組件如:外置共享的磁盤陣列、文件系統(tǒng)和浮動IP地址等組成業(yè)務(wù)運(yùn)行環(huán)境。
PCL為此環(huán)境提供了完全冗余的服務(wù)器配置。這種模式的優(yōu)缺點(diǎn):
負(fù)載均衡集群在多節(jié)點(diǎn)之間按照一定的策略(算法)分發(fā)網(wǎng)絡(luò)或計(jì)算處理負(fù)載。負(fù)載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效的方法來擴(kuò)展服務(wù)器帶寬,增加吞吐量,提高數(shù)據(jù)處理能力,同時(shí)又可以避免單點(diǎn)故障。
面已經(jīng)說過負(fù)載均衡的作用是在多個(gè)節(jié)點(diǎn)之間按照一定的策略(算法)分發(fā)網(wǎng)絡(luò)或計(jì)算處理負(fù)載。負(fù)載均衡可以采用軟件和硬件來實(shí)現(xiàn)。一般的框架結(jié)構(gòu)可以參考下圖。
后臺的多個(gè)Web節(jié)點(diǎn)上面有相同的Web應(yīng)用,用戶的訪問請求首先進(jìn)入負(fù)載均衡分配節(jié)點(diǎn)(可能是軟件或者硬件),由它根據(jù)負(fù)載均衡策略(算法)合理地分配給某個(gè)Web應(yīng)用節(jié)點(diǎn)。每個(gè)Web節(jié)點(diǎn)相同的內(nèi)容做起來不難,所以選擇負(fù)載均衡策略(算法)是個(gè)關(guān)鍵問題。下面會專門介紹均衡算法。
web負(fù)載均衡的作用就是把請求均勻的分配給各個(gè)節(jié)點(diǎn),它是一種動態(tài)均衡,通過一些工具實(shí)時(shí)地分析數(shù)據(jù)包,掌握網(wǎng)絡(luò)中的數(shù)據(jù)流量狀況,把請求理分配出去。對于不同的應(yīng)用環(huán)境(如電子商務(wù)網(wǎng)站,它的計(jì) 算負(fù)荷大;再如網(wǎng)絡(luò)數(shù)據(jù)庫應(yīng)用,讀寫頻繁,服務(wù)器的存儲子系統(tǒng)系統(tǒng)面臨很大壓力;再如視頻服務(wù)應(yīng)用,數(shù)據(jù)傳輸量大,網(wǎng)絡(luò)接口負(fù)擔(dān)重壓。),使用的均衡策略(算法)是不同的。 所以均衡策略(算法)也就有了多種多樣的形式,廣義上的負(fù)載均衡既可以設(shè)置專門的網(wǎng)關(guān)、負(fù)載均衡器,也可以通過一些專用軟件與協(xié)議來實(shí)現(xiàn)。在OSI七層協(xié)議模型中的第二(數(shù)據(jù)鏈路層)、第三(網(wǎng)絡(luò)層)、第四(傳輸層)、第七層(應(yīng)用層)都有相應(yīng)的負(fù)載均衡策略(算法),在數(shù)據(jù)鏈路層上實(shí)現(xiàn)負(fù)載均衡的原理是根據(jù)數(shù)據(jù)包的目的MAC地址選擇不同的路徑;在網(wǎng)絡(luò)層上可利用基于IP地址的分配方式將數(shù)據(jù)流疏通到多個(gè)節(jié)點(diǎn);而傳輸層和應(yīng)用層的交換(Switch),本身便是一種基于訪問流量的控制方式,能夠?qū)崿F(xiàn)負(fù)載均衡。
目前,基于負(fù)載均衡的算法主要有三種:輪循(Round-Robin)、最小連接數(shù)(Least Connections First),和快速響應(yīng)優(yōu)先(Faster Response Precedence)。
①輪循算法,就是將來自網(wǎng)絡(luò)的請求依次分配給集群中的節(jié)點(diǎn)進(jìn)行處理。
②最小連接數(shù)算法,就是為集群中的每臺服務(wù)器設(shè)置一個(gè)記數(shù)器,記錄每個(gè)服務(wù)器當(dāng)前的連接數(shù),負(fù)載均衡系統(tǒng)總是選擇當(dāng)前連接數(shù)最少的服務(wù)器分配任務(wù)。 這要比"輪循算法"好很多,因?yàn)樵谟行﹫龊现校唵蔚妮喲荒芘袛嗄膫€(gè)節(jié)點(diǎn)的負(fù)載更低,也許新的工作又被分配給了一個(gè)已經(jīng)很忙的服務(wù)器了。
③快速響應(yīng)優(yōu)先算法,是根據(jù)群集中的節(jié)點(diǎn)的狀態(tài)(CPU、內(nèi)存等主要處理部分)來分配任務(wù)。 這一點(diǎn)很難做到,事實(shí)上到目前為止,采用這個(gè)算法的負(fù)載均衡系統(tǒng)還很少。尤其對于硬件負(fù)載均衡設(shè)備來說,只能在TCP/IP協(xié)議方面做工作,幾乎不可能深入到服務(wù)器的處理系統(tǒng)中進(jìn)行監(jiān)測。但是它是未來發(fā)展的方向。
上面是負(fù)載均衡常用的算法,基于以上負(fù)載均衡算法的使用方式上,又分為如下幾種:
1、DNS輪詢
最早的負(fù)載均衡技術(shù)是通過DNS來實(shí)現(xiàn)的,在DNS中為多個(gè)地址配置同一個(gè)名字,因而查詢這個(gè)名字的客戶機(jī)將得到其中一個(gè)地址,從而使得不同的客戶訪問不同的服務(wù)器,達(dá)到負(fù)載均衡的目的。
DNS負(fù)載均衡是一種簡單而有效的方法,但是它不能區(qū)分服務(wù)器的差異,也不能反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài)。當(dāng)使用DNS負(fù)載均衡的時(shí)候,必須盡量保證不同的 客戶計(jì)算機(jī)能均勻獲得不同的地址。由于DNS數(shù)據(jù)具備刷新時(shí)間標(biāo)志,一旦超過這個(gè)時(shí)間限制,其他DNS服務(wù)器就需要和這個(gè)服務(wù)器交互,以重新獲得地址數(shù) 據(jù),就有可能獲得不同IP地址。因此為了使地址能隨機(jī)分配,就應(yīng)使刷新時(shí)間盡量短,不同地方的DNS服務(wù)器能更新對應(yīng)的地址,達(dá)到隨機(jī)獲得地址,然而將過 期時(shí)間設(shè)置得過短,將使DNS流量大增,而造成額外的網(wǎng)絡(luò)問題。DNS負(fù)載均衡的另一個(gè)問題是,一旦某個(gè)服務(wù)器出現(xiàn)故障,即使及時(shí)修改了DNS設(shè)置,還是 要等待足夠的時(shí)間(刷新時(shí)間)才能發(fā)揮作用,在此期間,保存了故障服務(wù)器地址的客戶計(jì)算機(jī)將不能正常訪問服務(wù)器
2、反向代理服務(wù)器
使用代理服務(wù)器,可以將請求轉(zhuǎn)發(fā)給內(nèi)部的服務(wù)器,使用這種加速模式顯然可以提升靜態(tài)網(wǎng)頁的訪問速度。然而,也可以考慮這樣一種技術(shù),使用代理服務(wù)器將請求均勻轉(zhuǎn)發(fā)給多臺服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
這種代理方式與普通的代理方式有所不同,標(biāo)準(zhǔn)代理方式是客戶使用代理訪問多個(gè)外部服務(wù)器,而這種代理方式是代理多個(gè)客戶訪問內(nèi)部服務(wù)器,因此也被稱為反向代理模式。雖然實(shí)現(xiàn)這個(gè)任務(wù)并不算是特別復(fù)雜,然而由于要求特別高的效率,實(shí)現(xiàn)起來并不簡單。
使用反向代理的好處是,可以將負(fù)載均衡和代理服務(wù)器的高速緩存技術(shù)結(jié)合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務(wù)都專門開發(fā)一個(gè)反向代理服務(wù)器,這就不是一個(gè)輕松的任務(wù)。
代理服務(wù)器本身雖然可以達(dá)到很高效率,但是針對每一次代理,代理服務(wù)器就必須維護(hù)兩個(gè)連接,一個(gè)對外的連接,一個(gè)對內(nèi)的連接,因此對于特別高的連接請求, 代理服務(wù)器的負(fù)載也就非常之大。反向代理方式下能應(yīng)用優(yōu)化的負(fù)載均衡策略,每次訪問最空閑的內(nèi)部服務(wù)器來提供服務(wù)。但是隨著并發(fā)連接數(shù)量的增加,代理服務(wù) 器本身的負(fù)載也變得非常大,最后反向代理服務(wù)器本身會成為服務(wù)的瓶頸。
3、地址轉(zhuǎn)換網(wǎng)關(guān)
支持負(fù)載均衡的地址轉(zhuǎn)換網(wǎng)關(guān),可以將一個(gè)外部IP地址映射為多個(gè)內(nèi)部IP地址,對每次TCP連接請求動態(tài)使用其中一個(gè)內(nèi)部地址,達(dá)到負(fù)載均衡的目的。很多 硬件廠商將這種技術(shù)集成在他們的交換機(jī)中,作為他們第四層交換的一種功能來實(shí)現(xiàn),一般采用隨機(jī)選擇、根據(jù)服務(wù)器的連接數(shù)量或者響應(yīng)時(shí)間進(jìn)行選擇的負(fù)載均衡 策略來分配負(fù)載。由于地址轉(zhuǎn)換相對來講比較接近網(wǎng)絡(luò)的低層,因此就有可能將它集成在硬件設(shè)備中,通常這樣的硬件設(shè)備是局域網(wǎng)交換機(jī)。