高可用的LVS負載均衡集羣技術詳解

最近在看《高性能Linux服務器構建實戰》學習LVS相關的技術,將學習的知識做個筆記。

一、LVS集羣的組成
利用LVS架設的服務器集羣系統由3個部分組成:負載均衡層、服務器羣組層、數據共享存儲層。
1.負載均衡層
位於整個集羣系統的最前端,有一臺或者多臺負載調度器(Director Server)組成.
LVS核心模塊IPVS就安裝在Director Server上,而Director的主要作用類似於一個路由器,
它有爲完成LVS功能所設定的路由表,通過路由表把用戶的請求分發給服務器羣組層的應用
服務器(Real Server)。同時在Director Server上還要安裝隊Real Server的監控模塊Ldirectord,
此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時可以將其從LVS路由表中剔除,
在恢復時重新加入。
2.服務器羣組層
由一組實際運行應用服務的機器組成,Real Server可以是Web服務器、Mail服務器、FTP服務器、DNS服務器、
視頻服務器中的一個或多個。每個Real Server之間通過LAN或分佈在各地的WAN相連接。
在實際應用中,Director Server也可以同時兼任Real Server的角色。
3.共享存儲層
是爲所有Real Server提供共享存儲空間和內容一致性的內存區域,一般由磁盤陣列設備組成。

從整個LVS結構可以看出,Director Server是整個LVS的核心。
Linux 2.6內核完全內置了LVS各個模塊,不用任何設置就可以支持LVS功能。
目前LVS僅支持Linux和FreeBSD系統作爲前端Director Server,對於Real Server,
幾乎所有的系統平臺都能很好的支持。
二、IP負載均衡技術
負載均衡技術有很多實現方案,有基於DNS域名輪詢解析的方法,有基於客戶端調度訪問的方法,
有基於應用層系統負載的調度方法,還有基於IP地址的調度方法。
在這些負載調度算法中,執行效率最高的是IP負載均衡技術。
LVS的IP負載均衡技術是通過IPVS模塊來實現的。IPVS是LVS集羣系統的核心軟件。
主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,
用戶必須通過這個虛擬的IP地址訪問服務器。這個虛擬IP一般稱爲LVS的VIP,即Virtual IP。
訪問請求首先經過VIP到達負載調度器,然後由負載調度器從Real Server列表中選擇一個服務節點
響應用戶的請求。在用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,
而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術。
IPVS實現負載均衡的方式有三種,分別是NAT、TUN和DR。下面進行詳細介紹。
1.VS/NAT(Virtual Server via Network Address Translation)

通過網絡地址翻譯翻譯技術實現虛擬服務器,當用戶的請求到達調度器時,
調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,
同時將報文的目標端口也改成選定的Real Server的相應端口,最後將報文發送到選定的Real Server。
在服務器端得到數據後,Real Server將數據返回給用戶時,需要再次經過負載調度器將報文的
源地址和源端口改成虛擬IP地址和相應端口,然後把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址的重寫,
當用戶請求越來越多時,調度器的處理能力將成爲瓶頸。
2.VS/TUN(Virtual Server via IP Tunneling)
通過IP隧道技術實現的虛擬服務器。這種方式的連接調度和管理與VS/NAT方式一樣,只是報文轉發方法不同。
在VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接影響
用戶的請求,不再經過前端調度器。此外,對Real Server的地理位置沒有沒有要求,可以與Director Server
位於同一個網段,也可以在獨立的一個網絡中。因此,在TUN方式中,調度器將只處理用戶的報文請求,從而使
集羣系統的吞吐量大大提高。
3.VS/DR(Virtual Server via Direct Routing)
通過直接路由技術實現虛擬服務器。這種方式的連接調度和管理與前兩種一樣,
但它的報文轉發方法又有所不同,VS/DR通過改寫請求報文的MAC地址,免去了VS/TUN中的IP隧道開銷。
這種方式是3種負載調度中性能最好的,但是要求Director Server與Real Server必須由一塊網卡連在
同一物理網段上。
三、負載調度算法
負載調度器是根據各個服務器的負載情況,動態地選擇一臺Real Server響應用戶請求。
那麼動態選擇是如何實現的呢?其實就是通過這裏要說的負載調度算法。
根據不同的網絡服務需求和服務器配置,IPVS實現了多種負載調度算法。
這裏詳細講述最常用的四種調度算法。
1.輪叫調度(Round Robin)
輪叫調度也叫1:1調度,調度器通過輪叫調度算法將外部用戶請求按順序1:1地分配到集羣中每個Real Server上。
這種算法平均地對待每一臺Real Server,而不管服務器上實際的負載狀況和連接狀態。
2.加權輪叫調度(Weighted Round Robin)
加權輪叫調度算法根據Real Server的不同處理能力來調度訪問請求。可以對每臺Real Server
設置不同的調度權值,對性能相對較好的Real Server可以設置較高的權值,對性能較弱的Real Server
可以設置較低的權值。這樣保證了處理能力強的服務器處理更高的訪問流量,充分合理的利用了服務器資源。
同時,調度器還可以自動查詢Real Server的負載情況,並動態的調整其權值。
3.最少連接調度(Least Connections)
最少連接調度算法動態的將網絡請求調度到已建立的連接數最少的服務器上。
如果集羣系統的真實服務器具有相近的系統性能,採用最小連接調度算法可以較好的負載均衡。
4.加權最小連接調度(Weighted Least Connections)
加權最小連接可以將每個服務器節點用相應的權值表示其處理能力,而系統管理員可以動態地設置響應的權值。
默認權值爲1。加權最小連接調度在分配新連接請求時儘可能使服務節點的已建立連接數和其權值成正比。
四、高可用LVS負載均衡集羣體系結構
Director Server僅完成用戶請求的分發處理,負載並不是很大。但單一的Director Server可能會造成整個
LVS集羣系統的單點故障。爲了解決這個問題,就需要保證Director Server的高可用性,最常用的方法就是
在負載均衡層構建Director Server雙擊熱備系統。
高可用的LVS負載均衡集羣體系結構如圖所示:

整個體系結構分爲三層,在HA負載均衡層由主、備兩臺Director Server構成雙擊熱備系統,
雙擊之間用心跳線連接。在正常狀態下主Director Server使用虛擬IP接收用戶請求,
並根據設定好的策略和算法將請求分發給各個服務節點,備用Director Server監控
主Director Server的運行狀態。當主Director Server發生異常或者出現故障時,
備用Director Server負責接管Director Server的虛擬IP和服務並繼續接收用戶請求和分發處理。
通過這種相互監控策略,任意一方主機出故障時,另一方都能夠將IP和服務接管,
這就保證了負載均衡層業務請求的不間斷運行。
五、高可用性軟件Heartbeat與Keepalived
1.Heartbeat
Heartbeat(Linux-HA)的工作原理:Heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分。
HA集羣之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未受到對方發送的報文,
那麼就認爲對方失效。這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務。
Ldirectord是Heartbeat的一個插件,主要作用是監控集羣系統中每個服務節點的狀態。
當某個節點出現故障時,將此節點從集羣系統中刪除,並在節點恢復正常後,重新將此節點加入集羣系統。
2.Keepalived
keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。
Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,
Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後
Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,
需要人工做的只是修復故障的web服務器。
Keepalived也有VRRP的功能,作用是解決單點故障的問題。
綜上所述,Keepalived一方面具有服務器運行檢測功能,另一方面也具有HA cluster功能。
因此通過Keepalived可以搭建高可用的LVS負載均衡集羣系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章