LVS 所提供的 IP 負(fù)載均衡的三種技術(shù)
1.LVS和負(fù)載均衡簡(jiǎn)介:
LVS是Linux Virtual Server的簡(jiǎn)寫,意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。
負(fù)載均衡就是有兩臺(tái)或者以上的服務(wù)器或者站點(diǎn)為我們提供服務(wù),我們將來(lái)自客戶端的請(qǐng)求靠某種算法盡量平均分?jǐn)偟竭@些集群中,從而避免一臺(tái)服務(wù)器因?yàn)樨?fù)載太高而出現(xiàn)故障。簡(jiǎn)而言之便是將所有的負(fù)載均分到多臺(tái)服務(wù)器中,即使其中某個(gè)出現(xiàn)故障,用戶也能正常訪問(wèn),得到服務(wù)。
廣泛使用的是用軟件的方式來(lái)實(shí)現(xiàn)負(fù)載均衡,實(shí)現(xiàn)效果不錯(cuò),并且不需要成本是很多企業(yè)選擇的方式。
以軟件實(shí)現(xiàn)的負(fù)載均衡有兩種方式:
- 基于應(yīng)用層負(fù)載均衡
- 基于IP層負(fù)載均衡
文章主要就是介紹基于IP層負(fù)載均衡;
2.基于 IP 層負(fù)載均衡:
基于 IP 層負(fù)載均衡:用戶通過(guò)虛擬 IP 地址(Virtual IP Address)訪問(wèn)服務(wù)時(shí),訪問(wèn)請(qǐng)求的報(bào)文會(huì)到達(dá)負(fù)載調(diào)度器,由它進(jìn)行負(fù)載均衡調(diào)度,從一組真實(shí)服務(wù)器選出一個(gè),將報(bào)文處理并轉(zhuǎn)發(fā)給選定服務(wù)器的地址。實(shí)服務(wù)器的回應(yīng)報(bào)文經(jīng)過(guò)負(fù)載調(diào)度器時(shí),將報(bào)文的源地址和源端口改為 Virtual IP Address 和相應(yīng)的端口,再把報(bào)文發(fā)給用戶。
而 IP 的負(fù)載技術(shù)有以下三種模式:
- 通過(guò)NAT實(shí)現(xiàn)虛擬服務(wù)器(VS/NAT)
- 通過(guò)IP隧道實(shí)現(xiàn)虛擬服務(wù)器(VS/TUN)
- 通過(guò)直接路由實(shí)現(xiàn)虛擬服務(wù)器(VS/DR)
3.VS/NAT 實(shí)現(xiàn)虛擬服務(wù)器
由于 IPv4 中 IP 地址空間的日益緊張和安全方面的原因,很多網(wǎng)絡(luò)使用保留 IP 地址(10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)。這些地址不在 Internet 上使用,而是專門為內(nèi)部網(wǎng)絡(luò)預(yù)留的。
當(dāng)內(nèi)部網(wǎng)絡(luò)中的主機(jī)要訪問(wèn) Internet 或被 Internet 訪問(wèn)時(shí),就需要采用網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation, 以下簡(jiǎn)稱NAT),將內(nèi)部地址轉(zhuǎn)化為 Internet 上可用的外部地址。
NAT 的工作原理是報(bào)文頭(目標(biāo)地址、源地址和端口等)被正確改寫后,客戶相信 它們連接一個(gè) IP 地址,而不同 IP 地址的服務(wù)器組也認(rèn)為它們是與客戶直接相連的。由此,可以用 NAT 方法將不同 IP 地址的并行網(wǎng)絡(luò)服務(wù)變成在一個(gè)IP地址上的一個(gè)虛擬服務(wù)。
VS/NAT(Virtual Server via Network Address Translation)實(shí)現(xiàn)的虛擬服務(wù)器是這樣的一個(gè)結(jié)構(gòu),主要經(jīng)過(guò)這樣的一些步驟:
LVS-NAT
- 客戶端通過(guò) Internet 向服務(wù)器發(fā)起請(qǐng)求,而請(qǐng)求的 IP 地址指向的是調(diào)度器上對(duì)外公布的 IP 地址;(因?yàn)樗⒉皇钦嬲幚碚?qǐng)求的服務(wù)器 IP 地址,所以稱之為 虛擬 IP 地址,簡(jiǎn)稱為 VIP,Virtual IP Address)
- 請(qǐng)求報(bào)文到達(dá)調(diào)度器(Load Balancer),調(diào)度器根據(jù)調(diào)度算法從一組真實(shí)的服務(wù)器(因?yàn)樗麄兪钦嬲幚碛脩粽?qǐng)求的服務(wù)器,所以稱為真實(shí)服務(wù)器,Real server。其 IP 地址也被稱為真實(shí) IP,簡(jiǎn)稱為 RIP)中選出一臺(tái)當(dāng)前負(fù)載不高的服務(wù)器。然后將客戶端的請(qǐng)求報(bào)文中的目標(biāo)地址(Load Balancer 的 VIP)和端口通過(guò) iptables 的 NAT 改寫為選定服務(wù)器的 IP 地址和服務(wù)的端口。最后將修改后的報(bào)文發(fā)送給選出的服務(wù)器。同時(shí),調(diào)度器在連接Hash 表中記錄這個(gè)連接;當(dāng)這個(gè)連接的下一個(gè)報(bào)文到達(dá)時(shí),從連接Hash表中可以得到原選定服務(wù)器的地址和端口,進(jìn)行同樣的改寫操作,并將報(bào)文傳給原選定的服務(wù)器。
- Real Server 接收到報(bào)文之后,做出了響應(yīng)的處理,然后將響應(yīng)的報(bào)文發(fā)送給 Load Balancer;
- Load Balancer 接收到響應(yīng)的報(bào)文時(shí),將報(bào)文的源地址和源端口改為Virtual IP Address和相應(yīng)的端口,再把報(bào)文發(fā)給用戶。
這樣,客戶所看到的只是在 Virtual IP Address 上提供的服務(wù),而服務(wù)器集群的結(jié)構(gòu)對(duì)用戶是透明的。
下面,舉個(gè)例子來(lái)進(jìn)一步說(shuō)明VS/NAT,如圖所示:
NAT-eg
VS/NAT 的配置如下表所示,所有到IP地址為205.100.106.2和端口為80的流量都被負(fù)載均衡地調(diào)度的真實(shí)服務(wù)器172.16.1.3:80和 172.16.1.4:8080上。目標(biāo)地址為205.100.106.2:21的報(bào)文被轉(zhuǎn)移到172.16.1.3:21上。而到其他端口的報(bào)文將被拒絕。
Protocol |
Virtual IP Address |
Port |
Real IP Address |
Port |
---|---|---|---|---|
TCP |
205.100.106.2 |
80 |
172.16.1.3 |
80 |
172.16.1.4 |
8080 |
|||
TCP |
205.100.106.2 |
21 |
172.16.1.3 |
21 |
當(dāng)客戶端訪問(wèn)Web服務(wù)的時(shí)候,報(bào)文中可能有以下的源地址和目標(biāo)地址:
SOURCE |
DEST |
---|---|
203.100.106.1:3456 |
205.100.106.2:80 |
報(bào)文到達(dá)調(diào)度器之后,調(diào)度器從調(diào)度列表中選出一臺(tái)服務(wù)器,例如是172.16.1.4:8080。該報(bào)文會(huì)被改寫為如下地址,并將它發(fā)送給選出的服務(wù)器。
SOURCE |
DEST |
---|---|
203.100.106.1:3456 |
172.16.1.4:8080 |
Real Server 收到修改后的報(bào)文之后,做出響應(yīng),然后將響應(yīng)報(bào)文返回到調(diào)度器,報(bào)文如下:
SOURCE |
DEST |
---|---|
172.16.1.4:8080 |
203.100.106.1:3456 |
響應(yīng)報(bào)文的源地址會(huì)被 Load Balacer 改寫為虛擬服務(wù)的地址,再將報(bào)文發(fā)送給客戶:
SOURCE |
DEST |
---|---|
205.100.106.2:80 |
203.100.106.1:3456 |
這樣,客戶認(rèn)為是從202.103.106.5:80服務(wù)得到正確的響應(yīng),而不會(huì)知道該請(qǐng)求是 Real Server1 還是 Real Server2 處理的。
這便是 VS/NAT 的處理數(shù)據(jù)包的整個(gè)過(guò)程,它有這樣的一些特點(diǎn):
- 集群節(jié)點(diǎn),也就是 Real Server 與 Load Balacer 必須在同一個(gè) IP 網(wǎng)絡(luò)中
- Load Balancer 位于 Real Server 與客戶端之間,處理進(jìn)出的所有通信
- RIP 通常是私有地址,僅用于各個(gè)集群節(jié)點(diǎn)之間的通信。
- Real Server 的網(wǎng)關(guān)必須指向 Load Balancer
- 支持端口映射:也就是Real Server 的端口可以自己設(shè)定,沒(méi)有必須是與 Load Balancer 一樣
VS/NAT 的優(yōu)勢(shì)在于可以做到端口映射,但是 Load Balancer 將可能成為集群的瓶頸。因?yàn)樗械某鋈雸?bào)文都需要 Load Balancer 處理,請(qǐng)求報(bào)文較小不是問(wèn)題,但是響應(yīng)報(bào)文往往較大,都需要 NAT 轉(zhuǎn)換的話,大流量的時(shí)候,Load Balancer 將會(huì)處理不過(guò)來(lái)。一般使用 VS/NAT 的話,處理 Real Server 數(shù)量達(dá)到 10~20 臺(tái)左右將是極限,并且效率往往不高。
4.VS/DR 實(shí)現(xiàn)虛擬服務(wù)器
在VS/NAT 的集群系統(tǒng)中,請(qǐng)求和響應(yīng)的數(shù)據(jù)報(bào)文都需要通過(guò)負(fù)載調(diào)度器,當(dāng)真實(shí)服務(wù)器的數(shù)目在10臺(tái)和20臺(tái)之間時(shí),負(fù)載調(diào)度器將成為整個(gè)集群系統(tǒng)的新瓶頸。大多數(shù) Internet服務(wù)都有這樣的特點(diǎn):請(qǐng)求報(bào)文較短而響應(yīng)報(bào)文往往包含大量的數(shù)據(jù)。
既然同時(shí)處理進(jìn)出報(bào)文會(huì)大大的影響效率,增加機(jī)器的負(fù)載,那么若是僅僅處理進(jìn)來(lái)的報(bào)文,即在負(fù)載調(diào)度器中只負(fù)責(zé)調(diào)度請(qǐng)求,而出去的報(bào)文由 Real Server 直接發(fā)給客戶端這樣豈不是高效許多。
VS/DR(Virtual Server via Direct Routing)利用大多數(shù)Internet服務(wù)的非對(duì)稱特點(diǎn),負(fù)載調(diào)度器中只負(fù)責(zé)調(diào)度請(qǐng)求,而服務(wù)器直接將響應(yīng)返回給客戶,可以極大地提高整個(gè)集群 系統(tǒng)的吞吐量。
VS/DR 實(shí)現(xiàn)的虛擬服務(wù)器是這樣的一個(gè)結(jié)構(gòu),主要經(jīng)過(guò)這樣的一些步驟:
DR-sturct
- 客戶端通過(guò) Internet 向服務(wù)器發(fā)起請(qǐng)求,而請(qǐng)求的 IP 地址指向的是調(diào)度器上對(duì)外公布的 IP 地址;
- 請(qǐng)求報(bào)文到達(dá)調(diào)度器(Load Balancer),調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器,不修改也不封裝IP報(bào)文,而是將數(shù)據(jù)幀的MAC地址改為選出服務(wù)器的MAC地址,再將修改后 的數(shù)據(jù)幀在與服務(wù)器組的局域網(wǎng)上發(fā)送。因?yàn)閿?shù)據(jù)幀的MAC地址是選出的服務(wù)器,所以服務(wù)器肯定可以收到這個(gè)數(shù)據(jù)幀;
- Real Server 接收到報(bào)文之后,發(fā)現(xiàn)報(bào)文的目標(biāo)地址 VIP 是在本地的網(wǎng)絡(luò)設(shè)備上,服務(wù)器處理這個(gè)報(bào)文,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。
change-MAC
在VS/DR中,根據(jù)缺省的TCP/IP協(xié)議棧處理,請(qǐng)求報(bào)文的目標(biāo)地址為VIP,響應(yīng)報(bào)文的源地址肯定也為VIP,所以響應(yīng)報(bào)文不需要作任何修改,可以直接返回給客戶,客戶認(rèn)為得到正常的服務(wù),而不會(huì)知道是哪一臺(tái)服務(wù)器處理的。
這便是 VS/DR 的處理數(shù)據(jù)包的整個(gè)過(guò)程,它有這樣的一些特點(diǎn):
- 集群節(jié)點(diǎn),也就是 Real Server 與 Load Balacer 必須在同一個(gè)物理網(wǎng)絡(luò)中(若是不同網(wǎng)段的話結(jié)構(gòu)將變得復(fù)雜)
- RIP 通常是私有地址,也可以是公網(wǎng)地址,以便于遠(yuǎn)程管理與監(jiān)控。
- Load Balancer 僅僅負(fù)責(zé)處理入站的請(qǐng)求,Real Server 將直接響應(yīng)客戶端
- Real Server 的網(wǎng)關(guān)不能指向 Load Balancer
- 不支持端口映射:也就是Real Server 的端口必須是與 Load Balancer 對(duì)外服務(wù)的一樣
5.VS/TUN 實(shí)現(xiàn)虛擬服務(wù)器
VS/DR 限制 Real Server 與 Load Balancer 必須在同一個(gè)物理網(wǎng)絡(luò)中,那若是分散在各地豈不是無(wú)法使用?所以有了 VS/TUN(Virtual Server via IP Tunneling)的誕生。
IP隧道(IP tunneling)是將一個(gè)IP報(bào)文封裝在另一個(gè)IP報(bào)文的技術(shù),這可以使得目標(biāo)為一個(gè)IP地址的數(shù)據(jù)報(bào)文能被封裝和轉(zhuǎn)發(fā)到另一個(gè)IP地址。IP隧道技術(shù)亦稱為IP封裝技術(shù)(IP encapsulation)。IP隧道主要用于移動(dòng)主機(jī)和虛擬私有網(wǎng)絡(luò)(Virtual Private Network),在其中隧道都是靜態(tài)建立的,隧道一端有一個(gè)IP地址,另一端也有唯一的IP地址。
我們利用IP隧道技術(shù)將請(qǐng)求報(bào)文封裝轉(zhuǎn)發(fā)給后端服務(wù)器,響應(yīng)報(bào)文能從后端服務(wù)器直接返回給客戶。但在這里,后端服務(wù)器有一組而非一個(gè),所以我們不可能靜態(tài)地建立一一對(duì)應(yīng)的隧道,而是動(dòng)態(tài)地選擇 一臺(tái)服務(wù)器,將請(qǐng)求報(bào)文封裝和轉(zhuǎn)發(fā)給選出的服務(wù)器。這樣,我們可以利用IP隧道的原理將一組服務(wù)器上的網(wǎng)絡(luò)服務(wù)組成在一個(gè)IP地址上的虛擬網(wǎng)絡(luò)服務(wù)。 VS/TUN的體系結(jié)構(gòu)如圖所示,各個(gè)服務(wù)器將VIP地址配置在自己的IP隧道設(shè)備上。
Tunnel-sturct
它的連接調(diào)度和管理與VS/NAT中的一樣,只是它的報(bào)文轉(zhuǎn)發(fā)方法不同。調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器, 將請(qǐng)求報(bào)文封裝在另一個(gè) IP 報(bào)文中,再將封裝后的 IP 報(bào)文轉(zhuǎn)發(fā)給選出的服務(wù)器;服務(wù)器收到報(bào)文后,先將報(bào)文解封獲得原來(lái)目標(biāo)地址為 VI P的報(bào)文,服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的 IP隧道設(shè)備上,所以就處理這個(gè)請(qǐng)求,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。
這便是 VS/TUN 的處理數(shù)據(jù)包的整個(gè)過(guò)程,它有這樣的一些特點(diǎn):
- 集群節(jié)點(diǎn),也就是 Real Server 與 Load Balacer 可以跨越公網(wǎng)
- RIP 必須是公網(wǎng)地址。
- Load Balancer 僅僅負(fù)責(zé)處理入站的請(qǐng)求,Real Server 將直接響應(yīng)客戶端
- Real Server 的網(wǎng)關(guān)不能指向 Load Balancer
- 不支持端口映射:也就是Real Server 的端口必須是與 Load Balancer 對(duì)外服務(wù)的一樣
這便是 LVS 所提供的 IP 負(fù)載均衡的三種技術(shù),我們可以根據(jù)自己的情況做出不同的選擇。