深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现
一、LVS集群常見架構(gòu)圖
Load Balancer層:位于整個集群系統(tǒng)的最前端,由一臺或多臺負(fù)載調(diào)度器(Director Server)組成。LVS核心模板IPVS就安裝在Director Server上,而Director的主要作用類似于一個路由器,它含有為完成LVS功能所設(shè)定的路由表,通過這些路由表把用戶的請求分發(fā)給Server Array層的應(yīng)用服務(wù)器(Real Server)。
?
同時,在Director Server上還要安裝對Real Server的監(jiān)控模塊Ldirectord,此模塊用于監(jiān)測各個Real Server服務(wù)的健康狀況。在Real Server不可用時可以把它從LVS路由表中剔除,在恢復(fù)時重新加入。
?
Server Array層:由一組實(shí)際運(yùn)行應(yīng)用服務(wù)的機(jī)器組成,Real Server可以是Web服務(wù)器、Mail服務(wù)器、FTP服務(wù)器、DNS服務(wù)器、視頻服務(wù)器中的一個或多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實(shí)際的應(yīng)用中,Director Server也可以同時兼任Real Server的角色。
?
hared Storage層:是為所有Real Server提供共享存儲空間和內(nèi)容一致性的存儲區(qū)域,一般由磁盤陣列設(shè)備組成。,為了提供內(nèi)容的一致性,一般可以通過NFS網(wǎng)絡(luò)文件系統(tǒng)共享數(shù)據(jù),但是NFS在繁忙的業(yè)務(wù)系統(tǒng)中,性能并不是很好,此時可以采用集群文件系統(tǒng),例如Red hat的GFS文件系統(tǒng),Oracle提供的OCFS2文件系統(tǒng)等。
?
從整個LVS結(jié)構(gòu)可以看出,Director Server是整個LVS的核心,目前,用于Director Server的操作系統(tǒng)只有Linux和FreeBSD,Linux 2.6內(nèi)核完全內(nèi)置了LVS 的各個模塊,不用任何設(shè)置就可以支持LVS功能。
?
對于Real Server,幾乎所有的系統(tǒng)平臺,Linux、Windows、Solaris、AIX、BSD系列都能很好地支持。
?
二、負(fù)載調(diào)度算法
?
負(fù)載均衡技術(shù)有很多實(shí)現(xiàn)方案,有基于DNS域名輪流解析的方法、有基于客戶端調(diào)度訪問的方法、有基于應(yīng)用層系統(tǒng)負(fù)載的調(diào)度方法,還有基于IP地址的調(diào)度方法,在這些負(fù)載調(diào)度算法中,執(zhí)行效率最高的是IP負(fù)載均衡技術(shù)。
?
LVS的IP負(fù)載均衡技術(shù)是通過IPVS模塊來實(shí)現(xiàn)的,IPVS是LVS集群系統(tǒng)的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務(wù)器。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經(jīng)過VIP到達(dá)負(fù)載調(diào)度器,然后由負(fù)載調(diào)度器從Real Server列表中選取一個服務(wù)節(jié)點(diǎn)響應(yīng)用戶的請求。
?
在用戶的請求到達(dá)負(fù)載調(diào)度器后,調(diào)度器如何將請求發(fā)送到提供服務(wù)的Real Server節(jié)點(diǎn),而Real Server節(jié)點(diǎn)如何返回數(shù)據(jù)給用戶,是IPVS實(shí)現(xiàn)的重點(diǎn)技術(shù)。IPVS實(shí)現(xiàn)負(fù)載均衡的方式有三種,分別是NAT(FULL NAT)、TUN和DR,下面進(jìn)行詳細(xì)介紹。
?
三、DR模式
?
下面是DR模式數(shù)據(jù)傳輸圖:
?
?
DR模式:?即Virtual Server via Direct Routing,也就是用直接路由技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。這種方式的連接調(diào)度和管理與前兩種一樣,但它的報文轉(zhuǎn)發(fā)方法又有所不同,VS/DR通過改寫請求報文的MAC地址,將請求發(fā)送到Real Server,而Real Server將響應(yīng)直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負(fù)載調(diào)度方式中性能最好的。
?
下面是DR模式IP包調(diào)度過程圖:
?
?
原理圖簡述:
DR模式將報文直接路由給目標(biāo)真實(shí)服務(wù)器。在DR模式中,調(diào)度器根據(jù)各個真實(shí)服務(wù)器的負(fù)載情況,連接數(shù)多少等,動態(tài)地選擇一臺服務(wù)器,不修改目標(biāo)IP地址和目標(biāo)端口,也不封裝IP報文,而是將請求報文的數(shù)據(jù)幀的目標(biāo)MAC地址改為真實(shí)服務(wù)器的MAC地址。然后再將修改的數(shù)據(jù)幀在服務(wù)器組的局域網(wǎng)上發(fā)送。
?
因為數(shù)據(jù)幀的MAC地址是真實(shí)服務(wù)器的MAC地址,并且又在同一個局域網(wǎng)。那么根據(jù)局域網(wǎng)的通訊原理,真實(shí)復(fù)位是一定能夠收到由LB發(fā)出的數(shù)據(jù)包。真實(shí)服務(wù)器接收到請求數(shù)據(jù)包的時候,解開IP包頭查看到的目標(biāo)IP是VIP。
?
此時只有自己的IP符合目標(biāo)IP才會接收進(jìn)來,所以我們需要在本地的回環(huán)借口上面配置VIP。另:由于網(wǎng)絡(luò)接口都會進(jìn)行ARP廣播響應(yīng),但集群的其他機(jī)器都有這個VIP的lo接口,都響應(yīng)就會沖突。所以我們需要把真實(shí)服務(wù)器的lo接口的ARP響應(yīng)關(guān)閉掉。
?
然后真實(shí)服務(wù)器做成請求響應(yīng),之后根據(jù)自己的路由信息將這個響應(yīng)數(shù)據(jù)包發(fā)送回給客戶,并且源IP地址還是VIP。
?
DR模式小結(jié):
通過在調(diào)度器LB上修改數(shù)據(jù)包的目的MAC地址實(shí)現(xiàn)轉(zhuǎn)發(fā)。注意源地址仍然是CIP,目的地址仍然是VIP地址。
請求的報文經(jīng)過調(diào)度器,而RS響應(yīng)處理后的報文無需經(jīng)過調(diào)度器LB,因此并發(fā)訪問量大時使用效率很高(和NAT模式比)
因為DR模式是通過MAC地址改寫機(jī)制實(shí)現(xiàn)轉(zhuǎn)發(fā),因此所有RS節(jié)點(diǎn)和調(diào)度器LB只能在一個局域網(wǎng)里面
RS主機(jī)需要綁定VIP地址在LO接口上,并且需要配置ARP抑制。
RS節(jié)點(diǎn)的默認(rèn)網(wǎng)關(guān)不需要配置成LB,而是直接配置為上級路由的網(wǎng)關(guān),能讓RS直接出網(wǎng)就可以。
由于DR模式的調(diào)度器僅做MAC地址的改寫,所以調(diào)度器LB就不能改寫目標(biāo)端口,那么RS服務(wù)器就得使用和VIP相同的端口提供服務(wù)。
?
四、NAT/FULL NAT模式
?
?
NAT模式:?即Virtual Server via Network Address Translation,也就是網(wǎng)絡(luò)地址翻譯技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。當(dāng)用戶請求到達(dá)調(diào)度器時,調(diào)度器將請求報文的目標(biāo)地址(即虛擬IP地址)改寫成選定的Real Server地址,同時將報文的目標(biāo)端口也改成選定的Real Server的相應(yīng)端口,最后將報文請求發(fā)送到選定的Real Server。
?
在服務(wù)器端得到數(shù)據(jù)后,Real Server將數(shù)據(jù)返回給用戶時,需要再次經(jīng)過負(fù)載調(diào)度器將報文的源地址和源端口改成虛擬IP地址和相應(yīng)端口,然后把數(shù)據(jù)發(fā)送給用戶,完成整個負(fù)載調(diào)度過程。
?
下面是NAT模式IP包調(diào)度過程圖:
?
?
原理圖簡述:
客戶端請求數(shù)據(jù),目標(biāo)IP為VIP
請求數(shù)據(jù)到達(dá)LB服務(wù)器,LB根據(jù)調(diào)度算法將目的地址修改為RIP地址及對應(yīng)端口(此RIP地址是根據(jù)調(diào)度算法得出的。)并在連接HASH表中記錄下這個連接。
數(shù)據(jù)包從LB服務(wù)器到達(dá)RS服務(wù)器webserver,然后webserver進(jìn)行響應(yīng)。Webserver的網(wǎng)關(guān)必須是LB,然后將數(shù)據(jù)返回給LB服務(wù)器。
收到RS的返回后的數(shù)據(jù),根據(jù)連接HASH表修改源地址為VIP、目標(biāo)地址為CIP,及對應(yīng)端口80.然后數(shù)據(jù)就從LB出發(fā)到達(dá)客戶端。
客戶端收到的就只能看到VIP\DIP信息。
?
NAT模式優(yōu)缺點(diǎn):
NAT技術(shù)將請求的報文和響應(yīng)的報文都需要通過LB進(jìn)行地址改寫,因此網(wǎng)站訪問量比較大的時候LB負(fù)載均衡調(diào)度器有比較大的瓶頸,一般要求最多之能10-20臺節(jié)點(diǎn)
只需要在LB上配置一個公網(wǎng)IP地址就可以了。
每臺內(nèi)部的realserver服務(wù)器的網(wǎng)關(guān)地址必須是調(diào)度器LB的內(nèi)網(wǎng)地址。
NAT模式支持對IP地址和端口進(jìn)行轉(zhuǎn)換。即用戶請求的端口和真實(shí)服務(wù)器的端口可以不一致。
?
FULL NAT?模式
?
FULL NATT的基本原理:FULL NAT ?在client請求VIP 時,不僅替換了package 的dst ip,還替換了package的 src ip;但VIP 返回給client時也替換了src ip。
?
?
首先client 發(fā)送請求package給VIP; ?
VIP 收到package后,會根據(jù)LVS設(shè)置的LB算法選擇一個合適的realserver,然后把package 的DST IP 修改為realserver IP;把sorce ip 改成 lvs 集群的LB IP?
realserver 收到這個package后判斷dst ip 是自己,就處理這個package ,處理完后把這個包發(fā)送給LVS LB IP。
LVS?收到這個package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后發(fā)送給client
?
FULL NAT?模式的注意事項:
-
FULL NAT 模式也不需要 LBIP 和realserver ip 在同一個網(wǎng)段;
-
full nat 跟nat 相比的優(yōu)點(diǎn)是:保證RS回包一定能夠回到LVS;因為源地址就是LVS--> 不確定
-
full nat ?因為要更新sorce ip 所以性能正常比nat 模式下降 10%
?
五、IP TUNNEL模式
?
?
TUN?:即Virtual Server via IP Tunneling 也就是通過IP隧道技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。在VS/TUN方式中,調(diào)度器采用IP隧道技術(shù)將用戶請求轉(zhuǎn)發(fā)到某個Real Server,而這個Real Server將直接響應(yīng)用戶的請求,不再經(jīng)過前端調(diào)度器。此外,對Real Server的地域位置沒有要求,可以和Director Server位于同一個網(wǎng)段,也可以在獨(dú)立的一個網(wǎng)絡(luò)中。因此,在TUN方式中,調(diào)度器將只處理用戶的報文請求,從而使集群系統(tǒng)的吞吐量大大提高。
?
TUN的工作流程圖如下所示:
?
?
它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel里面,然后發(fā)送給RS節(jié)點(diǎn)服務(wù)器,節(jié)點(diǎn)服務(wù)器接收到之后解開IP tunnel后,進(jìn)行響應(yīng)處理。并且直接把包通過自己的外網(wǎng)地址發(fā)送給客戶不用經(jīng)過LB服務(wù)器。
?
原理圖過程簡述:
客戶請求數(shù)據(jù)包,目標(biāo)地址VIP發(fā)送到LB上。
LB接收到客戶請求包,進(jìn)行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然后會根據(jù)LVS設(shè)置的LB算法選擇一個合適的realserver;并把client發(fā)送的package 包裝到一個新的IP包里面;新的IP包的dst是realserver的IP。
RS節(jié)點(diǎn)服務(wù)器根據(jù)IP Tunnel包頭信息收到請求包,realserver 收到這個package后判斷dst ip 是自己,然后解析出來的package的dst是VIP;會檢測我們的網(wǎng)卡上是否綁定了VIP的ip地址;如果綁定了就會處理這個包,如果沒有直接丟掉。 我們一般在realserver上面 lo:0 綁定了VIP的ip地址,就可以處理得到客戶的請求包并進(jìn)行響應(yīng)處理。
響應(yīng)處理完畢之后,RS服務(wù)器使用自己的公網(wǎng)線路將這個響應(yīng)數(shù)據(jù)包發(fā)送給客戶端。源IP地址是VIP地址。
?
IP TUNNEL?模式的注意事項:
-
TUNNEL 模式必須在所有的realserver 機(jī)器上面綁定VIP的IP地址
-
TUNNEL 模式的vip ------>realserver 的包通信通過TUNNEL 模式,不管是內(nèi)網(wǎng)和外網(wǎng)都能通信,所以不需要lvs vip跟realserver 在同一個網(wǎng)段內(nèi)
-
TUNNEL 模式 realserver會把packet 直接發(fā)給client 不會給lvs了
-
TUNNEL?模式走的隧道模式,所以運(yùn)維起來比較難,所以一般不用。
?
六、LVS負(fù)載調(diào)度算法
?
Lvs的調(diào)度算法決定了如何在集群節(jié)點(diǎn)之間分布工作負(fù)荷。當(dāng)director調(diào)度器收到來自客戶端訪問VIP的上的集群服務(wù)的入站請求時,director調(diào)度器必須決定哪個集群節(jié)點(diǎn)應(yīng)該處理請求。Director調(diào)度器用的調(diào)度方法基本分為兩類:
?
-
固定調(diào)度算法:rr,wrr,dh,sh
-
動態(tài)調(diào)度算法:wlc,lc,lblc,lblcr
?
?
LVS調(diào)度算法的生產(chǎn)環(huán)境選型:
1.一般的網(wǎng)絡(luò)服務(wù),如www,mail,mysql等常用的LVS調(diào)度算法為:
基本輪詢調(diào)度rr
加權(quán)最小連接調(diào)度wlc
加權(quán)輪詢調(diào)度wrc
?
2.基于局部性的最小連接lblc和帶復(fù)制的給予局部性最小連接lblcr主要適用于web cache和DB cache
?
3.源地址散列調(diào)度SH和目標(biāo)地址散列調(diào)度DH可以結(jié)合使用在防火墻集群中,可以保證整個系統(tǒng)的出入口唯一。實(shí)際適用中這些算法的適用范圍很多,工作中最好參考內(nèi)核中的連接調(diào)度算法的實(shí)現(xiàn)原理,然后根據(jù)具體的業(yè)務(wù)需求合理的選型。
?
經(jīng)作者同意授權(quán)轉(zhuǎn)載
作者:高俊峰
博客:愛維Linux
本文來自云棲社區(qū)合作伙伴"DBAplus",原文發(fā)布時間:2016-06-01
總結(jié)
以上是生活随笔為你收集整理的深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Adobe Illustrator C
- 下一篇: 《网络安全原理与实践》一2.1 安全区介