构建负载均衡服务器之一 负载均衡与集群详解
一、什么是負載均衡
????首先我們先介紹一下什么是負載均衡: 負載平衡(Load balancing)是一種計算機網(wǎng)絡技術,用來在多個計算機(計算機集群)、網(wǎng)絡連接、CPU、磁盤驅(qū)動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。這是來自維基百科的介紹。負載均衡的目的,就在于平衡負載,給用戶提供優(yōu)質(zhì),可靠,穩(wěn)定的服務。
上圖是個最簡單的負載均衡實例, 應用服務器并不直接與用戶相連, 用戶連接負載均衡服務器,然后由負載均衡服務器把消息轉(zhuǎn)發(fā)給實際應用服務器。負載均衡器內(nèi)部會根據(jù)應用服務器的負載情況,決定把消息轉(zhuǎn)發(fā)給哪臺服務器處理。同時負載均衡器還可以對用戶屏蔽應用服務器失效,只要把用戶的消息轉(zhuǎn)發(fā)到非失效服務器即可。
提到負載均衡,就不能不介紹另外一個概念: 集群。集群就是一組部署有相同應用的服務器。例如web 服務器。用戶的請求無論連接到哪臺服務器上,都能得到相同的處理。這樣我們實現(xiàn)一種服務器,可以將用戶的請求根據(jù)特定規(guī)則轉(zhuǎn)發(fā)到應用服務器上進行處理。就實現(xiàn)了完整的集群處理系統(tǒng)。這個服務器如果實現(xiàn)了后臺服務器感知和配置功能,能夠了解后臺服務器的可用情況。就可以被稱作為負載均衡器。
負載均衡在目前網(wǎng)絡服務規(guī)模越來越龐大的情況下,成為一個大型服務器系統(tǒng)必須要面對的問題。隨著用戶和業(yè)務的增多,來自用戶的訪問量和數(shù)據(jù)流量不斷增大,對服務器的計算能力和儲存要求也在不斷增加,單臺服務器根本無法承擔這么龐大的數(shù)據(jù)處理請求。這個時候,我們必須利用集群技術,采用一組服務器對來自用戶的請求進行處理,服務器的數(shù)量要能夠不斷的擴充。在集群的前端,我們采用負載均衡技術,平均分散用戶的請求到不同的處理服務器,并且能夠在集群中某個服務失效時,即時感知,屏蔽,將消息轉(zhuǎn)發(fā)到其他可用服務器上。
負載均衡分為硬件和軟件:
(1).硬件LB(比較出名的)
F5 公司的 BIG-IP系列、Citrix 公司的 NetScaler系列、A10 公司的 AX系列
(2).軟件LB
四層:LVS(Linux VirtualServer)注:國人開發(fā)的、七層:Nginx,HAProxy
二、集群的類型
1.scale on:向上擴展????
將服務器的內(nèi)存容量調(diào)大和cpu數(shù)量增加些(簡單說升級服務器硬件)???
缺點:在一定的范圍之內(nèi)它的性能是上升的趨勢,但是超出范圍之后就是下降的趨勢。因為隨著它的cpu的個數(shù)增加我們需要給我們的cpu仲裁,而且隨著cpu個數(shù)的增加資源競爭性越大。
2.scale out:向外擴展??
一臺服務器應付不過來,我們就再增加一臺服務器。???
優(yōu)點:增減服務器很方便,而且沒有向上擴展隨著增加性能下降。???
向外擴張的工作模式:當客戶端向服務器端發(fā)送請求,服務器端只拿出來一臺服務器來相應我們的客戶端的請求。
(1).LB:Load Balancing:負載均衡集群
????負載均衡集群中有一個分發(fā)器或者叫調(diào)度器,我們將其稱之為Director,它處在多臺服務器的上面,分發(fā)器根據(jù)內(nèi)部鎖定義的規(guī)則或調(diào)度方式從下面的服務器群中選擇一個以此來響應客戶端發(fā)送的請求。
(2).HA:High Availability 高可用集群??
????高可用集群是服務的可用性比較高,當我們某臺服務器死機后不會造成我們的服務不可用。其工作模式則是將一個具有故障的服務轉(zhuǎn)交給一個正常工作的服務器,從而達到服務不會中斷。一般來說我們集群中工作在前端(分發(fā)器)的服務器都會對我們的后端服務器做一個健康檢查,如果發(fā)現(xiàn)我們服務器當機就不會對其在做轉(zhuǎn)發(fā)。
衡量標準:可用性=在線時間/(在線時間+故障處理時間) 99%、99.9%、99.99%、99.999%
(3).HP:Hight Performance 高性能??
????高性能的集群是當某一個任務量非常大的時候,我們做一個集群共同來完成這一個任務。這種處理方式我們稱為并行處理集群,并行處理集群是將大任務劃分為小任務,分別進行處理的機制。一般這樣的集群用來科學研究與大數(shù)據(jù)運算等方面的工作?,F(xiàn)在比較火的Hadoop就是使用的并行處理集群。
說明:三種集群之間的區(qū)別??
負載均衡著重在于提供服務并發(fā)處理能力的集群,高可用以提升服務在線的能力的集群。高性能著重用于處理一個海量任務。
三、主要負載均衡方案介紹
1:HTTP 重定向負載均衡
????這種負載均衡方式僅適合WEB 服務器。用戶發(fā)出請求時,負載均衡服務器會根據(jù)HTTP請求,重新計算出實際的WEB服務器地址,通過302重定向相應發(fā)送給用戶瀏覽器。用戶瀏覽器再根據(jù)302響應信息,對實際的WEB服務器發(fā)出請求。HTTP重定向方案有點是比較簡單,缺點是性能比較差,需要2次請求才能返回實際結(jié)果,還有就是僅適合HTTP服務器使用。
2: DNS 域名解析負載均衡
????在DNS中存儲了一個域名的多個主機地址,每次域名解析請求,都可以根據(jù)負載均衡算法返回一個不同的IP地址。這樣多個WEB服務器就構(gòu)成了一個集群,并由DNS服務器提供了負載均衡服務。DNS域名解析負載均衡的優(yōu)點是由DNS來完成負載均衡工作,服務本身不用維護負載均衡服務器的工作。缺點也是,由于負載均衡服務器不是自己維護,沒法做精細控制,而且DNS在客戶端往往帶有緩存,服務器的變更很難及時反映到客戶端上。
3:反向代理負載均衡
????反向代理服務器位于實際的服務器之前,他能夠緩存服務器響應,加速訪問,同時也啟到了負載均衡服務器的效果。反向代理服務器解析客戶端請求,根據(jù)負載均衡算法轉(zhuǎn)發(fā)到不同的后臺服務器上。用戶和后臺服務器之間不再有直接的鏈接。請求,響應都由反向代理服務器進行轉(zhuǎn)發(fā)。優(yōu)點是和負載均衡服務集成在一起,部署簡單。缺點是所有的請求回應都需要經(jīng)過反向代理服務器。其本身可能會成為性能的瓶頸。著名的 Nginx服務器就可以部署為反向代理服務器,實現(xiàn)WEB 應用的負載均衡。上面的三種都是工作在OSI網(wǎng)絡模型中的應用層,我們可以統(tǒng)稱為應用層負載均衡(七層負載均衡)。下面介紹的幾種工作在OSI網(wǎng)絡模型中的4層以及4層以下(四層負載均衡),解決方案也具有更大的通用性。
4:IP負載均衡
????用戶請求包到達負載均衡服務器114.100.20.200后,負載均衡服務器在操作系統(tǒng)內(nèi)核層獲取網(wǎng)絡數(shù)據(jù)包,根據(jù)負載均衡算法獲取真實后臺服務器地址192.168.1.1, 然后將數(shù)據(jù)包的目標地址改為192.168.1.1, 轉(zhuǎn)發(fā)給內(nèi)部服務器。整個過程都在內(nèi)核層進行處理。收到192.168.1.1的響應包之后,會更改響應包的SRC IP, 轉(zhuǎn)發(fā)給客戶端用戶。采用IP層負載均衡算法,全部處理過程都在內(nèi)核層(Ring 0)進行。和七層負載均衡相比,具有更好的性能。但是由于所有的響應包都要經(jīng)過負載均衡服務器,負載均衡服務器的網(wǎng)卡帶寬,很容易成為系統(tǒng)的瓶頸,如果能夠讓響應包不經(jīng)過負載均衡服務器,就可以極大的提升整個負載均衡服務器的服務能力。我們下面介紹的數(shù)據(jù)鏈路層負載均衡,就具有這個能力。
5:數(shù)據(jù)鏈路層負載均衡
數(shù)據(jù)鏈路層負載均衡,顧名思義,就是工作在TCP/IP協(xié)議最底層的數(shù)據(jù)鏈路層,進行負載均衡。我們常用的以太網(wǎng)中,在這一層主要采用數(shù)據(jù)幀進行通信,每個網(wǎng)卡都具有唯一的MAC地址,數(shù)據(jù)幀用MAC地址來標識數(shù)據(jù)的來源與目的地。數(shù)據(jù)鏈路層負載均衡通過修改數(shù)據(jù)包的MAC地址,實現(xiàn)負載均衡。
這種數(shù)據(jù)傳輸方式又稱為三角傳輸,負載均衡數(shù)據(jù)分發(fā)過程中不修改IP地址,只修改目的MAC地址,通過配置真實物理服務器集群所有機器虛擬IP和負載均衡服務器IP一致,從而達到不修改數(shù)據(jù)包的源地址和目的地址就可以進行數(shù)據(jù)分發(fā)的目的,由于實際處理請求的真實物理服務器IP和數(shù)據(jù)請求目的IP一致,不需要通過負載均衡服務器進行地址交換,可將響應數(shù)據(jù)包直接返回給用戶,避免負載均衡服務器網(wǎng)卡帶寬成為瓶頸。這種負載均衡方式又稱之為直接路由方式(DR).
如上圖所示,用戶請求到達負載均衡服務器114.100.20.200后,負載均衡服務器將數(shù)據(jù)包的目的MAC地址更改為00:1e:ec:bc:5e:03,并不修改數(shù)據(jù)包目的IP,由于服務器集群所有服務器的虛擬IP地址和負載均衡服務器IP地址一致,因此數(shù)據(jù)可以正常傳輸?shù)竭_MAC地址為00:1e:ec:bc:5e:03的機器上,該服務器處理完之后,將響應數(shù)據(jù)包發(fā)送到網(wǎng)關服務器,網(wǎng)關服務器直接將數(shù)據(jù)包發(fā)送給用戶,響應數(shù)據(jù)不需要通過負載均衡服務器,這樣就避免了負載均衡服務器成為傳輸瓶頸的可能。
數(shù)據(jù)鏈路層負載均衡是目前使用最廣泛的一種負載均衡方式。著名的負載均衡開源產(chǎn)品LVS(Linux Virtual Server),同時支持上面的IP負載均衡和數(shù)據(jù)鏈路層負載均衡。是學習負載均衡技術必須了解的產(chǎn)品?;跀?shù)據(jù)鏈路層的負載均衡雖然有非常好的性能,但是對網(wǎng)絡拓撲也有比較大的限制,負載均衡服務器和后臺服務器必須處于同一網(wǎng)絡環(huán)境中才可以。
四、負載均衡算法介紹
前面介紹的內(nèi)容,解決了從用戶到實際后臺服務器之間的數(shù)據(jù)包發(fā)送和響應的問題。下面我們介紹選擇實際后臺運行服務器的具體負載均衡算法??紤]到服務請求的不同類型服務器的不同處理能力以及隨機選擇造成的負載分配不均勻等問題,為了更加合理的把負載分配給內(nèi)部的多個服務器,就需要應用相應的能夠正確反映各個服務器處理能力及網(wǎng)絡狀態(tài)的負載均衡算法。我們以LVS為參考,介紹比較經(jīng)典的8種負載均衡算法。
1.輪叫調(diào)度(Round Robin)
調(diào)度器通過“輪叫"調(diào)度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數(shù)和系統(tǒng)負載
2.加權(quán)輪叫(Weighted Round Robin)
調(diào)度器通過“加權(quán)輪叫"調(diào)度算法根據(jù)真實服務器的不同處理能力來調(diào)度訪問請求這樣可以保證處理能力強的服務器能處理更多的訪問流量調(diào)度器可以自動問詢真實服務器的負載情況,并動態(tài)地調(diào)整其權(quán)值
3.最少鏈接(Least Connections)
調(diào)度器通過“最少連接"調(diào)度算法動態(tài)地將網(wǎng)絡請求調(diào)度到已建立的鏈接數(shù)最少的服務器上如果集群系統(tǒng)的真實服務器具有相近的系統(tǒng)性能,采用“最小連接"調(diào)度算法可以較好地均衡負載
4.加權(quán)最少鏈接(Weighted Least Connections)
在集群系統(tǒng)中的服務器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接"調(diào)度算法優(yōu)化負載均衡性能,具有較高權(quán)值的服務器將承受較大比例的活動連接負載調(diào)度器可以自動問詢真實服務器的負載情況,并動態(tài)地調(diào)整其權(quán)值
5.基于局部性的最少鏈接(Locality-Based Least Connections)
“基于局部性的最少鏈接"調(diào)度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)該算法根據(jù)請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發(fā)送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接"的原則選出一個可用的服務器,將請求發(fā)送到該服務器
6.帶復制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)
“帶復制的基于局部性最少鏈接"調(diào)度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射該算法根據(jù)請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發(fā)送到該服務器;若服務器超載,則按“最小連接"原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發(fā)送到該服務器同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度
7.目標地址散列(Destination Hashing)
“目標地址散列"調(diào)度算法根據(jù)請求的目標IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空
8.源地址散列(Source Hashing)
“源地址散列"調(diào)度算法根據(jù)請求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空
文章內(nèi)容及圖片為編者筆記,大部分摘自網(wǎng)絡,如有侵權(quán),請第一時間聯(lián)系我!
轉(zhuǎn)載于:https://blog.51cto.com/linuxnote/1654565
總結(jié)
以上是生活随笔為你收集整理的构建负载均衡服务器之一 负载均衡与集群详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 手动安装 oracle(转)
- 下一篇: 算法导论——DFS深度优先搜索