青蛙学Linux—高性能负载均衡集群软件LVS
LVS,即Linux Virtual Server的簡(jiǎn)寫(xiě),是目前非常流行的一款實(shí)現(xiàn)負(fù)載均衡集群的軟件。該項(xiàng)目在1998年5月由章文嵩博士成立,是中國(guó)國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。LVS官網(wǎng)http://www.linuxvirtualserver.org/。
1、LVS體系架構(gòu)
LVS負(fù)載均衡集群由三部分組成:最前端的負(fù)載均衡層,即Load Balancer;中間的服務(wù)器群組層,即Server Array;最后端的數(shù)據(jù)共享存儲(chǔ)層,即Shared Storage。在用戶(hù)看來(lái),所有的內(nèi)部應(yīng)用都是透明的,用戶(hù)只是在使用一個(gè)虛擬服務(wù)器提供的高性能服務(wù)。
- Load Balancer:位于整個(gè)集群的最前端,由一臺(tái)或多臺(tái)負(fù)載調(diào)度器(Director Server)組成,LVS模塊就安裝在Director Server上,Director Server的作用類(lèi)似于一個(gè)路由器,它含有完成LVS功能所需要的路由表,通過(guò)這些路由表把用戶(hù)的請(qǐng)求分發(fā)給Server Array的應(yīng)用服務(wù)器(Real Server)。同時(shí),在Director Server上還要安裝監(jiān)控模塊Ldirectord,用于監(jiān)控后端Real Server的健康狀況,在Real Server不可用時(shí)將其從LVS的路由表中剔除,恢復(fù)時(shí)重新加入;Director Server是整個(gè)LVS的核心,操作系統(tǒng)只支持Linux或FreeBSD,Linux從2.6內(nèi)核起不用重新編譯就可以支持LVS功能
- Server Array:由一組實(shí)際運(yùn)行的應(yīng)用服務(wù)器(Real Server)組成,每個(gè)Real Server之間通過(guò)高速的LAN或分布在各地的WAN相連,在實(shí)際應(yīng)用中Director Server也可以同時(shí)兼任Real Server的角色;對(duì)于Real Server,可以是任意平臺(tái)的操作系統(tǒng),如Linux、Windows、AIX等
- Shared Storage:為所有的Real Server提供共享存儲(chǔ)空間和內(nèi)容一致性的存儲(chǔ)區(qū)域。在物理上,一般由磁盤(pán)陣列設(shè)備組成;為了提供內(nèi)容的一致性,一般可以通過(guò)NFS進(jìn)行數(shù)據(jù)共享,但NFS在繁忙的業(yè)務(wù)系統(tǒng)中性能并不是很好,此時(shí)可以采用集群文件系統(tǒng),如RedHat的GFS、Oracle的OCFS2等
整個(gè)架構(gòu)具體如下圖所示:
2、LVS IP負(fù)載均衡機(jī)制的實(shí)現(xiàn)
負(fù)載均衡技術(shù)有多種實(shí)現(xiàn)方案,如基于DNS域名輪流解析的方法、基于客戶(hù)端調(diào)度訪問(wèn)的方法、基于應(yīng)用層系統(tǒng)負(fù)載的調(diào)度方法、基于IP地址的調(diào)度方法。在這些調(diào)度方法中,基于IP地址的方法是執(zhí)行效率最高的。
LVS的IP負(fù)載均衡技術(shù)是通過(guò)IPVS模塊來(lái)實(shí)現(xiàn)的,IPVS是LVS的核心模塊。
在LVS中,訪問(wèn)請(qǐng)求首先經(jīng)過(guò)VIP到達(dá)負(fù)載均衡調(diào)度器,然后由負(fù)載均衡調(diào)度器從Real Server列表中選取一個(gè)Real Server響應(yīng)用戶(hù)的請(qǐng)求。Real Server如何將請(qǐng)求的數(shù)據(jù)返回給用戶(hù),是IPVS實(shí)現(xiàn)的重點(diǎn),IPVS實(shí)現(xiàn)負(fù)載均衡的機(jī)制有以下幾種:
2.1、DR模式
DR即Virtual Server via Direct Routing,使用直接路由技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。VS/DR通過(guò)改寫(xiě)請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到Real Server,而Real Server將響應(yīng)直接返回給客戶(hù)端。這種調(diào)度方式的性能是最好的。DR模式架構(gòu)如下圖所示:
- DR模式是通過(guò)在負(fù)載均衡調(diào)度器LB上修改數(shù)據(jù)包的目的MAC地址實(shí)現(xiàn)轉(zhuǎn)發(fā)。因此數(shù)據(jù)包來(lái)源地址保持不變,目的地址仍然是VIP
- 請(qǐng)求的報(bào)文經(jīng)過(guò)LB,而后端RS響應(yīng)處理后的報(bào)文無(wú)需經(jīng)過(guò)LB,因此并發(fā)訪問(wèn)量大時(shí)效率很高(與NAT模式相比)
- 因?yàn)镈R模式通過(guò)MAC地址改寫(xiě)機(jī)制實(shí)現(xiàn)轉(zhuǎn)發(fā),因此所有RS和LB只能在一個(gè)局域網(wǎng)中
- RS上需要綁定VIP地址到lo接口上,并且需要配置ARP抑制
- RS的默認(rèn)網(wǎng)關(guān)不需要配置成LB,而是直接配置為上層路由網(wǎng)關(guān),只要能讓RS直接與客戶(hù)端通訊即可
- 由于DR模式的LB僅作MAC地址改寫(xiě),所以LB就不能改寫(xiě)目標(biāo)端口,那么RS就能使用和VIP相同的端口提供服務(wù)
2.2、NAT/FULL NAT模式
NAT,即Virtual Server via Network Address Translation,使用網(wǎng)絡(luò)地址翻譯技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。當(dāng)用戶(hù)的請(qǐng)求到達(dá)LB時(shí),LB將請(qǐng)求報(bào)文的目的地址改成選定的RS地址,同時(shí)將報(bào)文的目標(biāo)端口也改成選定的RS的相應(yīng)端口;RS將返回的數(shù)據(jù)提交給LB,LB再將報(bào)文源地址和源端口修改成VIP和相應(yīng)的端口后將數(shù)據(jù)返回給用戶(hù),完成整個(gè)負(fù)載調(diào)度過(guò)程。NAT/FULL NAT模式架構(gòu)如下圖所示:
- NAT模式不需要LB和RS在同一個(gè)網(wǎng)段
- NAT模式將請(qǐng)求的報(bào)文和響應(yīng)的報(bào)文都經(jīng)過(guò)LB進(jìn)行轉(zhuǎn)發(fā)和地址改寫(xiě),因此訪問(wèn)量大時(shí),LB有較大的瓶頸,一般一臺(tái)LB最多只能帶10-20臺(tái)RS
- 只需要在LB上配置一個(gè)公網(wǎng)IP即可
- 每臺(tái)RS的網(wǎng)關(guān)地址必須是LB的IP
- 支持IP地址和端口的轉(zhuǎn)換,即前端LB和后端RS提供服務(wù)的端口可以不一致
- LB節(jié)點(diǎn)上必須開(kāi)啟數(shù)據(jù)轉(zhuǎn)發(fā)功能,否則返回的數(shù)據(jù)無(wú)法到達(dá)客戶(hù)端。在Linux下使用以下方法打開(kāi)數(shù)據(jù)轉(zhuǎn)發(fā)功能 # 在/etc/sysctl.conf中添加以下內(nèi)容 net.ipv4.ip_forward = 1 # 值為0表示不開(kāi)啟轉(zhuǎn)發(fā)功能,1表示開(kāi)啟轉(zhuǎn)發(fā)功能 # 修改完成后執(zhí)行以下命令使配置生效 sysctl -p
FULL NAT與NAT的區(qū)別
FULL NAT與NAT的區(qū)別主要在對(duì)報(bào)文的處理方面:
- FULL NAT在客戶(hù)端請(qǐng)求VIP時(shí),不僅替換了報(bào)文中的目的IP,還替換了源IP;VIP返回給客戶(hù)端時(shí)也替換了源IP
- FULL NAT因?yàn)橐鎿Q源IP所以性能比NAT下降10%
2.3、TUN模式
TUN,即Virtual Server via IP Tunneling,通過(guò)IP隧道技術(shù)實(shí)現(xiàn)虛擬服務(wù)器。LB采用IP隧道技術(shù)將用戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)到某個(gè)RS,RS直接將數(shù)據(jù)返回給用戶(hù),不需要再經(jīng)過(guò)LB。在TUN模式中,LB與RS不需要在同一個(gè)網(wǎng)段;同時(shí)LB只處理用戶(hù)請(qǐng)求報(bào)文,使得集群吞吐量大大提高。TUN模式架構(gòu)如下圖所示:
- TUN模式中LB和RS之間的傳輸不需要修改報(bào)文,而是通過(guò)單獨(dú)建立的IP隧道傳輸
- TUN模式必須在所有的RS上綁定VIP
- TUN模式使用IP隧道,在增加了運(yùn)維方面的難度
3、LVS的負(fù)載調(diào)度算法
LVS的負(fù)載調(diào)度算法可以分為靜態(tài)和動(dòng)態(tài)兩種。靜態(tài)算法是僅根據(jù)算法進(jìn)行調(diào)度,而不考慮后端RS的實(shí)際連接和負(fù)載情況;動(dòng)態(tài)算法可以根據(jù)后端RS的實(shí)際連接和負(fù)載來(lái)進(jìn)行請(qǐng)求調(diào)度。
靜態(tài)算法有四種,分別是RR、WRR、DH和SH。
- RR輪詢(xún)算法:LB將請(qǐng)求按照順序輪流分配到后端RS,它均等對(duì)待后端每一臺(tái)RS,適用于后端RS節(jié)點(diǎn)處理性能差不多的場(chǎng)景
- WRR加權(quán)輪詢(xún)算法:LB根據(jù)RS的權(quán)重分配任務(wù)
- DH目的地址哈希調(diào)度算法:以目的IP地址為關(guān)鍵字查找一個(gè)靜態(tài)哈希表來(lái)獲取需要的RS
- SH源地址哈希調(diào)度算法:以源IP地址為關(guān)鍵字查找一個(gè)靜態(tài)哈希表來(lái)獲取需要的RS
動(dòng)態(tài)算法有六種,分別是LC、WLC、SED、NQ、LBLC和LBLCR
- LC最少連接算法:LB將請(qǐng)求動(dòng)態(tài)的調(diào)度到已建立連接最少的后端RS上。在后端RS性能相近的情況下適用該算法可以較好的平衡負(fù)載
- WLC加權(quán)最少連接算法:在LC的基礎(chǔ)上根據(jù)權(quán)重來(lái)將請(qǐng)求動(dòng)態(tài)的調(diào)度到后端的RS上,用于在后端RS性能相差較大的環(huán)境中
- SED最短延遲調(diào)度算法:基于WLC算法。如果ABC三臺(tái)RS的權(quán)重分別為1、2、3,則使用SED時(shí)會(huì)進(jìn)行以下計(jì)算,A - (1+1)/1;B - (2+1)/2;C - (3+1)/3,LB會(huì)將請(qǐng)求交給運(yùn)算結(jié)果最小的RS
- NQ永不排隊(duì)/最少隊(duì)列算法:無(wú)需排隊(duì),如果有RS的連接數(shù)為0則直接將請(qǐng)求調(diào)度給該RS而不進(jìn)行SED計(jì)算
- LBLC基于地址的最小連接數(shù)調(diào)度算法:將來(lái)自同一個(gè)目的IP地址的請(qǐng)求分配給同一臺(tái)RS,如果該RS的負(fù)載已滿(mǎn),則將請(qǐng)求分配給連接數(shù)最小的RS,并將該RS做為下一次分配的首選RS
- LBLCR帶復(fù)制的基于地址的最小連接數(shù)調(diào)度算法:與LBLC不同的是,該算法維護(hù)的是從同一個(gè)目的IP地址到一組RS的映射,請(qǐng)求的RS會(huì)從該組RS中選擇得出
| 常用服務(wù) | 調(diào)度算法 |
| Web、mali、MySQL | RR、WLC、WRR |
| web cache、DB cache | LBLC、LBLCR |
| 防火墻集群 | SH、DH |
轉(zhuǎn)載于:https://www.cnblogs.com/yu2006070-01/p/10391475.html
總結(jié)
以上是生活随笔為你收集整理的青蛙学Linux—高性能负载均衡集群软件LVS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL--常见ALTER TABLE
- 下一篇: 我曾七次鄙视自己的灵魂