LVS负载均衡(3)——LVS工作模式与工作原理
LVS介紹及工作原理
1. LVS 介紹
? ?LVS,Linux Virtual Server 的簡(jiǎn)寫(xiě),意即 Linux 虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng),可以在 UNIX/Linux 平臺(tái)下實(shí)現(xiàn)負(fù)載均衡集群功能。
? ?文章:LVS項(xiàng)目介紹
? ? ? ?LVS集群體系結(jié)構(gòu)
? ? ? ?LVS集群的IP負(fù)載均衡技術(shù)
? ? ? ?LVS集群中的負(fù)載調(diào)度
? ?早在 Linux 內(nèi)核 2.2 時(shí),IPVS 就已經(jīng)以內(nèi)核補(bǔ)丁的形式出現(xiàn)。從 2.4.23 版本開(kāi)始時(shí),IPVS 軟件就是合并到 Linux 內(nèi)核的常用版本的內(nèi)核補(bǔ)丁的集合。從 2.4.24 以后已經(jīng)成為 Linux 官方標(biāo)準(zhǔn)內(nèi)核的一部分。
? ?從上圖可以看出,LVS 負(fù)載均衡調(diào)度技術(shù)是在 Linux 內(nèi)核中實(shí)現(xiàn)的,因此被稱為 Linux 虛擬服務(wù)器。我們使用該軟件配置 LVS 時(shí)候,不能直接配置內(nèi)核中的 IPVS,而需要使用 IPVS 的管理工具 IPVSADM 進(jìn)行管理,當(dāng)然也可以用 Keepalived 軟件管理。
2. LVS 體系結(jié)構(gòu)與工作原理
? ?LVS 集群負(fù)載均衡器接收服務(wù)的所有入棧客戶端計(jì)算機(jī)請(qǐng)求,并根據(jù)調(diào)度算法決定哪個(gè)集群節(jié)點(diǎn)應(yīng)該處理回復(fù)請(qǐng)求。負(fù)載均衡器(簡(jiǎn)稱 LB)。
? ?LVS 虛擬服務(wù)器的體系結(jié)構(gòu)如下所示,一組服務(wù)器通過(guò)高速的局域網(wǎng)或者地理分布的廣域網(wǎng)相互連接,在它們的前段有一個(gè)負(fù)載調(diào)度器(Load Banlancer)。負(fù)載均衡調(diào)度器能無(wú)縫地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到真實(shí)服務(wù)器上,從而使得服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明的,客戶訪問(wèn)集群系統(tǒng)提供的網(wǎng)絡(luò)服務(wù)就像訪問(wèn)一臺(tái)高性能,高可用的服務(wù)器一樣。客戶程序不受服務(wù)器集群的影響不需做任何修改。系統(tǒng)的伸縮性通過(guò)在服務(wù)集群中透明地加入和刪除一個(gè)節(jié)點(diǎn)來(lái)達(dá)到,通過(guò)檢測(cè)節(jié)點(diǎn)或服務(wù)進(jìn)程故障和正確地重置系統(tǒng)達(dá)到高可用性。由于負(fù)載調(diào)度技術(shù)是在 Linux 內(nèi)核中實(shí)現(xiàn)的,稱為 Linux 虛擬服務(wù)器。
LVS工作模式與原理
1. LVS 相關(guān)術(shù)語(yǔ)命名約定
名稱 | 縮寫(xiě) | 說(shuō)明 |
虛擬 IP 地址 | VIP | VIP 為 Director 用于向客戶端計(jì)算機(jī)提供服務(wù)的 IP 地址。以別名存在或輔助 IP 形式存在 如:www.etiantian.org?域名就要解析到 VIP 上提供服務(wù) 問(wèn):為什么不把 VIP 像DIP一樣綁定在網(wǎng)卡上呢? 答:因?yàn)槿绻壎ㄔ诰W(wǎng)卡上,那么當(dāng)有主從 Director 時(shí),就會(huì)發(fā)生沖突。 |
真實(shí) IP 地址 | RIP | 在集群下面節(jié)點(diǎn)上使用的 IP 地址 |
Director 的 IP 地址 | DIP | Director 用于連接內(nèi)外網(wǎng)絡(luò)的 IP 地址,物理網(wǎng)卡上的 IP 地址 |
客戶端主機(jī) IP 地址 | CIP | 客戶端用戶計(jì)算機(jī)請(qǐng)求集群服務(wù)器的 IP 地址,改地址用作發(fā)送給集群的請(qǐng)求的源 IP 地址 |
? ?LVS 集群內(nèi)部的節(jié)點(diǎn)稱為真實(shí)服務(wù)器(Real Server),也叫集群節(jié)點(diǎn)。請(qǐng)求集群服務(wù)的計(jì)算機(jī)稱為客戶端計(jì)算機(jī)。
2. LVS 三種工作模式與原理
IP虛擬服務(wù)器軟件 IPVS
? ?在調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP 負(fù)載均衡技術(shù)是效率最高的。在已有的 IP 負(fù)載均衡技術(shù)中有通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換將一組服務(wù)器構(gòu)成一個(gè)高性能、高可用的虛擬服務(wù)器,我們稱為?VS/NAT?技術(shù)(Virtual Server via Network Address Translation)。大多數(shù)商業(yè)化的 IP 負(fù)載均衡調(diào)度器產(chǎn)品都使用 NAT 方法。
? ?在分析 VS/NAT 的缺點(diǎn)和網(wǎng)絡(luò)服務(wù)的非對(duì)稱性的基礎(chǔ)上,我們提出通過(guò) IP 隧道實(shí)現(xiàn)虛擬服務(wù)器的方法?VS/TUN?和通過(guò)直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法?VS/DR,他們可以極大地提高系統(tǒng)的伸縮性。所以 IPVS 實(shí)現(xiàn)了這三種 IP 負(fù)載均衡技術(shù),大致原理如下:
NAT模式—網(wǎng)絡(luò)地址轉(zhuǎn)換
? ?Virtual Server via Network Address Translation(VS/NAT)
? ?通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器 LB 重寫(xiě)請(qǐng)求報(bào)文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請(qǐng)求分配給后端的真實(shí)服務(wù)器;真實(shí)服務(wù)器的響應(yīng)報(bào)文處理之后,返回時(shí)必須要通過(guò)調(diào)度器時(shí),經(jīng)過(guò)調(diào)度器時(shí)報(bào)文的原地址被重寫(xiě),再返回給客戶,完成整個(gè)調(diào)度過(guò)程。
? ?過(guò)程:客戶端主機(jī)請(qǐng)求是攜帶著報(bào)文(CIP:VIP 80),請(qǐng)求到達(dá) LB 之后,LB 將其轉(zhuǎn)換為(CIP:RIP1 9000),然后該請(qǐng)求會(huì)到達(dá) RIP1 進(jìn)行處理,處理完畢之后返回報(bào)文(RIP:CIP),由于 RIP1 找不到 CIP 便會(huì)通過(guò)網(wǎng)關(guān)出去(RIP 應(yīng)該設(shè)置網(wǎng)關(guān)為 DIP),這樣報(bào)文到達(dá)網(wǎng)關(guān)(DIP)之后,調(diào)度器再進(jìn)行改寫(xiě)為(VIP:CIP 80),然后將數(shù)據(jù)包發(fā)給 CIP,這樣 CIP 接收到的報(bào)文就是(VIP:CIP)。
? ?總結(jié):
????1.NAT 技術(shù)獎(jiǎng)?wù)埱蟮膱?bào)文和響應(yīng)的報(bào)文通過(guò)調(diào)度器地址重寫(xiě)然后再轉(zhuǎn)發(fā)給內(nèi)部的服務(wù)器,報(bào)文返回時(shí)再改寫(xiě)原來(lái)的地址。
? ? ?2.主需要在調(diào)度器 LB 上配置 WAN 公網(wǎng) IP 即可,調(diào)度器也要有私網(wǎng) LAN IP 和節(jié)點(diǎn)內(nèi)部通信。內(nèi)部節(jié)點(diǎn)配置 LAN IP。
? ? ?3.每臺(tái)內(nèi)部 RS 節(jié)點(diǎn)的網(wǎng)關(guān),要配成 LB 的 LAN 內(nèi)物理網(wǎng)卡地址,這樣才能確保數(shù)據(jù)返回仍然經(jīng)過(guò) LB。
? ? ?4.由于請(qǐng)求與回傳數(shù)據(jù)都經(jīng)過(guò)負(fù)載均衡器,因此訪問(wèn)量大時(shí)有瓶頸。
? ? ?5.支持對(duì) IP 及端口進(jìn)行轉(zhuǎn)換,即 10.0.0.1:80 可以轉(zhuǎn)換到 10.0.0.2:8080
TUN模式-隧道模式
? ?采用 NAT 技術(shù)時(shí),由于請(qǐng)求和響應(yīng)報(bào)文都必須經(jīng)過(guò)調(diào)度器地址重寫(xiě),當(dāng)客戶請(qǐng)求越來(lái)越多時(shí),調(diào)度器處理能力將成為瓶頸。為了解決此事,調(diào)度器把請(qǐng)求報(bào)文通過(guò) IP 隧道轉(zhuǎn)發(fā)至真實(shí)服務(wù)器,而真實(shí)服務(wù)器將服務(wù)器響應(yīng)處理后直接返回給客戶,這樣調(diào)度器只處理請(qǐng)求入站報(bào)文,由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答數(shù)據(jù)比請(qǐng)求報(bào)文大很多,采用 VS/TUN 技術(shù)后,集群系統(tǒng)最大吞吐量可以提高 10 倍。
? ?VS/TUN 工作流程如下圖:它的連接調(diào)度和管理與 VS/NAT 中的一樣,只是它的報(bào)文轉(zhuǎn)發(fā)方法不同。調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器,調(diào)度器將原請(qǐng)求報(bào)文封裝在另一個(gè) IP 報(bào)文中,再將封裝后的 IP 報(bào)文轉(zhuǎn)發(fā)給選定的真實(shí)服務(wù)器;真實(shí)服務(wù)器收到報(bào)文后,先將收到的報(bào)文解封獲得原來(lái)目標(biāo)地址為 VIP 的報(bào)文,服務(wù)器發(fā)現(xiàn) VIP 地址被配置在本地的 IP 隧道設(shè)備上,所以就處理這個(gè)請(qǐng)求,然后根據(jù)路由表將相應(yīng)報(bào)文直接返回給客戶。(這種模式數(shù)據(jù)包封裝了一個(gè) IP 報(bào)文到達(dá)真實(shí)服務(wù)器上之后解包發(fā)現(xiàn) VIP 地址不是本身的,會(huì)不接受此報(bào)文,所以這種模式的每個(gè)真實(shí)服務(wù)器必須在 lo 網(wǎng)卡上配置VIP地址,這樣才能讓解開(kāi)后的報(bào)文發(fā)現(xiàn) VIP 地址在本地有,才能接受并處理)。
? ?問(wèn)題:
? ?1.當(dāng)用戶通過(guò)互聯(lián)網(wǎng)請(qǐng)求負(fù)載均衡器的時(shí)候,目標(biāo)地址是 VIP,通過(guò)路由器到達(dá)負(fù)載均衡集群網(wǎng)絡(luò)中,當(dāng)?shù)竭_(dá)網(wǎng)絡(luò)中之后,由于要和局域網(wǎng)主機(jī)進(jìn)行通信,但又沒(méi)有調(diào)度器的 MAC 地址,那么就會(huì)發(fā) ARP 廣播,廣播到達(dá)局域網(wǎng)各個(gè)主機(jī)之后就有可能真實(shí)服務(wù)器和調(diào)度器都應(yīng)答。
? ?答:讓所有真實(shí)服務(wù)器的網(wǎng)卡抑制 arp,讓所有真實(shí)服務(wù)器不要響應(yīng)目標(biāo)地址是 vip 的請(qǐng)求,只讓 vip 去響應(yīng)。?
? ?2.為什么要在 lo 網(wǎng)卡上綁定 vip 而不再其它網(wǎng)卡上綁定呢?
? ?答:防止局域網(wǎng) IP 地址沖突,lo 是一個(gè)屬于本地的網(wǎng)卡,在 lo 上綁定在局域網(wǎng)中不會(huì)沖突。
? ?總結(jié):
????1.負(fù)載均衡器通過(guò)把請(qǐng)求的報(bào)文通過(guò) IP 隧道的方式把請(qǐng)求的報(bào)文不經(jīng)過(guò)源目的地址的改寫(xiě),而是直接封裝成另外的 IP 報(bào)文
? ? ?2.由于真實(shí)服務(wù)器處理請(qǐng)求后直接響應(yīng)給客戶端,因此真實(shí)服務(wù)器最好有一個(gè)外網(wǎng) IP 地址,效率更高。如果是內(nèi)網(wǎng)也能出去,但是勢(shì)必會(huì)經(jīng)過(guò)一個(gè) NAT 映射,NAT 服務(wù)器又可能成為瓶頸,因?yàn)樗蟹?wù)器都走 NAT 服務(wù)器。
? ? ?3.由于調(diào)度器只處理入站請(qǐng)求的報(bào)文,因此集群系統(tǒng)的吞吐量可以提高 10 倍,但隧道模式會(huì)封裝報(bào)文再傳輸也會(huì)帶來(lái)一定的系統(tǒng)開(kāi)銷。TUN 模式適合 LAN/WAN。
? ? ?4.TUN 模式的 LAN 環(huán)境不如 DR 模式效率高,有的系統(tǒng)還要考慮 IP 隧道的支持問(wèn)題。
? ? ?5.所有的真實(shí)服務(wù)器還要綁定 VIP,抑制 ARP 等,配置復(fù)雜
? ? ?6.LAN 環(huán)境一般多采用 DR 模式,WAN 環(huán)境可以用 TUN 模式,但是當(dāng)前在 WAN 環(huán)境下,更多的被 DNS+haproxy/nginx等取代
DR模式—直接路由模式
? ?Virtual Server via Direct Routing
? ?VS/DR 模式通過(guò)改寫(xiě)請(qǐng)求報(bào)文的目標(biāo) MAC 地址,將請(qǐng)求發(fā)送到真實(shí)服務(wù)器,而真實(shí)服務(wù)器將相應(yīng)后的處理結(jié)果直接返回給可以。同 VS/TUN 技術(shù)一樣,VS/DR 技術(shù)可以極大地提高集群系統(tǒng)的伸縮性。而且,這種方法沒(méi)有 IP 隧道開(kāi)銷,對(duì)集群中的真實(shí)服務(wù)器也沒(méi)有必須支持 IP 隧道協(xié)議的要求,但是要求調(diào)度器與真實(shí)服務(wù)器都有一塊網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一個(gè)局域網(wǎng)環(huán)境。
? ?VS/DR 的工作流程如圖,它的連接調(diào)度和管理與 VS/NAT 和 VS/TUN 中的一樣,它的報(bào)文轉(zhuǎn)發(fā)方式又有不同,將報(bào)文直接路由給目標(biāo)服務(wù)器。在 VS/DR 中,調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,連接數(shù)多少等,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器,不修改目的IP地址和目的端口,也不封裝 IP 報(bào)文,而是將請(qǐng)求的數(shù)據(jù)幀的 MAC 地址改為選出服務(wù)器的 MAC 地址,再將修改后的數(shù)據(jù)幀在于服務(wù)器組的局域網(wǎng)中發(fā)送。因?yàn)閿?shù)據(jù)幀的 MAC 地址是選出的服務(wù)器,所以服務(wù)器肯定可以收到這個(gè)數(shù)據(jù)幀,從中可以獲得該 IP 報(bào)文。當(dāng)真實(shí)服務(wù)器發(fā)現(xiàn)報(bào)文的目標(biāo)地址不在本地網(wǎng)絡(luò)設(shè)備時(shí),就會(huì)拒絕處理,所以需要在本地綁定 VIP 地址,真實(shí)服務(wù)器處理這個(gè)報(bào)文,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。
???總結(jié):
????1.通過(guò)在 LB 上修改數(shù)據(jù)包的目的 MAC 地址實(shí)現(xiàn)轉(zhuǎn)發(fā)。注意,源地址仍然是 VIP 地址。
? ? ?2.由于只有請(qǐng)求的報(bào)文經(jīng)過(guò)調(diào)度器,而處理后響應(yīng)的報(bào)文無(wú)需經(jīng)過(guò)調(diào)度器,因此訪問(wèn)量大時(shí)使用效果特別好。(和 NAT 比)
? ? ?3.因 DR 模式是通過(guò) MAC 地址改寫(xiě)的機(jī)制實(shí)現(xiàn)的轉(zhuǎn)發(fā),因此所有節(jié)點(diǎn)和 LB 只能在一個(gè)局域網(wǎng) LAN 中。(小缺點(diǎn))
? ? ?4.需要注意 RS 節(jié)點(diǎn)的 VIP 的綁定(lo:vip1,lo:vip2...)和 ARP 抑制問(wèn)題。
? ? ?5.強(qiáng)調(diào)下:RS 節(jié)點(diǎn)的默認(rèn)網(wǎng)卡不需要是 LB 的 DIP,直接是 IDC 公網(wǎng)機(jī)房分配的上級(jí)路由器的 IP.(RS 帶有外網(wǎng)地址情況)
? ? ?6.由于 DR 模式僅進(jìn)行了 MAC 地址的改寫(xiě),因此調(diào)度器 LB 無(wú)法改變請(qǐng)求的報(bào)文的目的端口(和 NAT 要區(qū)別)
? ? ?7.調(diào)度器 LB 支持幾乎所有 Unix,Linux 系統(tǒng),目前無(wú) Windows 版,但是 RS 節(jié)點(diǎn)可以是 Windows (LVS NAT)
? ? ?8.效率高但是配置比較麻煩。訪問(wèn)量不是特別大的公司可用 haproxy/nginx 取代之。日:2000W PV 下都可用 haproxy+nginx
? ? ?9.直接對(duì)外的訪問(wèn)業(yè)務(wù),例如 web 服務(wù)做 RS 節(jié)點(diǎn),最好用公網(wǎng) IP 地址。不直接對(duì)外的業(yè)務(wù),如 Mysql,存儲(chǔ)用內(nèi)網(wǎng)IP地址
VS/NAT | VS/TUN | VS/DR | |
Real Server | config dr gw | Tunneling | Non-arp device/tie vip |
Server Network | private | LAN/WAN | LAN |
Server Number | 10~20(low) | 100(high) | 100(high) |
Real Server Gateway | load balancer | own router | own router |
| 優(yōu)點(diǎn) | 地址和端口轉(zhuǎn)換 | WAN環(huán)境,加密數(shù)據(jù) | 性能最高 |
缺點(diǎn) | 效率低 | 系統(tǒng)需要支持隧道協(xié)議 | 不能跨出 LAN |
3. LVS 調(diào)度算法
? LVS 的調(diào)度算法決定了如何在集群節(jié)點(diǎn)之間分布工作符合。當(dāng) Director 調(diào)度器收到來(lái)自客戶端計(jì)算機(jī)訪問(wèn)它的 VIP 上的集群服務(wù)的入站請(qǐng)求時(shí),Director 必須決定哪個(gè)集群節(jié)點(diǎn)應(yīng)該處理請(qǐng)求。Director 可用于做出該決定的調(diào)度方法分成兩個(gè)基本類別:
? 固定調(diào)度方法:rr、wrr、dh、sh
? 動(dòng)態(tài)調(diào)度算法:wlc、lc、lblc、lblcr、sed、nq
算法 | 說(shuō)明 |
rr | 輪詢調(diào)度(Round-Robin),將請(qǐng)求一次分配不同的 RS,也就是 RS 中均攤請(qǐng)求。這種算法簡(jiǎn)單,但是只適合于 RS 處理性能相差不大的情況 |
wrr | 加權(quán)輪詢調(diào)度(Weighted Round-Robin),它將依據(jù)不同 RS 的權(quán)值分配任務(wù)。權(quán)值越高的 RS 將優(yōu)先獲得任務(wù),并且分配到連接數(shù)將比權(quán)值低的 RS 更多。相同權(quán)值的 RS 得到相同數(shù)目的連接數(shù)。 |
lc | 最小連接數(shù)調(diào)度(Least-Connection),IPVS 表存儲(chǔ)了所有的活動(dòng)的鏈接。把新的連接請(qǐng)求發(fā)送到當(dāng)前連接數(shù)最小的 RS |
wlc | 加權(quán)最小連接數(shù)調(diào)度(Weighted Least-Connection),假設(shè)各臺(tái) RS 的權(quán)值依次為Wi(i=1..n),當(dāng)前的 TCP 連接數(shù)依次為 Ti(i=1..n)依次選取 Ti/Wi 為最小的 RS 作為下一個(gè)分配的 RS |
lblc | 基于地址的最小連接數(shù)調(diào)度(Locality-Based Least-Connection),將來(lái)自同一目的地址的請(qǐng)求分配給同一臺(tái) RS 節(jié)點(diǎn),如果這臺(tái)服務(wù)器尚未滿負(fù)荷,則分配連接數(shù) |
生成環(huán)境 LVS 調(diào)度算法選型
? 1.一般的網(wǎng)絡(luò)服務(wù),如 http、mail、mysql 等,常用調(diào)度算法:rr、wlc、wrr
? 2.web cache 和 db cache:基于局部性的最少鏈接 lblc、帶復(fù)制的基于局部性最少鏈接 lblcr
? 3.防火墻集群:源地址散列調(diào)度 sh 和 目標(biāo)地址散列調(diào)度 dh,可以保證整個(gè)系統(tǒng)的唯一出入口。
? 4.處理時(shí)間相對(duì)較長(zhǎng)的網(wǎng)絡(luò)服務(wù):最短預(yù)期延時(shí)調(diào)度 sed 和不排隊(duì)調(diào)度 nq
? 實(shí)際使用中,這些算法的使用范圍不限于這些。最好參考內(nèi)核中的調(diào)度算法的實(shí)現(xiàn)原理,根據(jù)具體的業(yè)務(wù)需求合理的選型。
常見(jiàn) LVS 負(fù)載均衡高可用解決方案:
? 1.通過(guò)自己開(kāi)發(fā)腳本解決:比較笨重,不推薦
? 2.heartbeat + lvs + ldirectord 配置:比較復(fù)雜,不易控制,很少使用
? 3.Piranha,Redhat 的一款基于 Web 的配置軟件:可以省去手工配置繁瑣工作,但是出問(wèn)題不知道原理,不推薦
?4.Keepalived+LVS:極力推薦的最優(yōu)方案,簡(jiǎn)單、易用、高效
轉(zhuǎn)載于:https://blog.51cto.com/pkbai/1874247
總結(jié)
以上是生活随笔為你收集整理的LVS负载均衡(3)——LVS工作模式与工作原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到自己的牙齿全部脱落是怎么回事啊
- 下一篇: 北京尚学堂|程序员的智慧