一、LVS簡(jiǎn)介
了解LVS之前我們先來了解一下幾種需求:
- 可伸縮性(Scalability),當(dāng)服務(wù)的負(fù)載增長(zhǎng)時(shí),系統(tǒng)能被擴(kuò)展來滿足需求,且不降低服務(wù)質(zhì)量。
- 高可用性(Availability),盡管部分硬件和軟件會(huì)發(fā)生故障,整個(gè)系統(tǒng)的服務(wù)必須是每天24小時(shí)每星期7天可用的。
- 可管理性(Manageability),整個(gè)系統(tǒng)可能在物理上很大,但應(yīng)該容易管理。
- 價(jià)格有效性(Cost-effectiveness),整個(gè)系統(tǒng)實(shí)現(xiàn)是經(jīng)濟(jì)的、易支付的。
上述的幾種需求是xian現(xiàn)在網(wǎng)絡(luò)服務(wù)的軟硬件系統(tǒng)的重要需求。
針對(duì)上述需求,一個(gè)基于IP層和基于請(qǐng)求內(nèi)容分發(fā)的負(fù)載均衡調(diào)度解決方案應(yīng)運(yùn)而生,這種解決方法在Linux內(nèi)核中實(shí)現(xiàn),主要實(shí)現(xiàn)方式是將一組服務(wù)器構(gòu)成一個(gè)實(shí)現(xiàn)可伸縮性。高可用性的服務(wù)器集群,我們稱之為L(zhǎng)inux虛擬服務(wù)器(Linux Virtual Server),在LVS集群中,服務(wù)器集群對(duì)應(yīng)于客戶端來說是透明的,客戶端訪問我們的LVS集群,就像是訪問一臺(tái)高性能,高可用計(jì)算機(jī)一樣。
系統(tǒng)的可伸縮性是通過在服務(wù)器集群中添加或者刪除節(jié)點(diǎn)來實(shí)現(xiàn)。
二.LVS集群的通用結(jié)構(gòu)
LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。調(diào)度器具有很好的吞吐率,將請(qǐng)求均衡地轉(zhuǎn)移到不同的服務(wù)器上執(zhí)行,且調(diào)度器自動(dòng)屏蔽掉服務(wù)器的故障,從而將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器。

為此,在設(shè)計(jì)時(shí)需要考慮系統(tǒng)的透明性、可伸縮性、高可用性和易管理性。LVS集群的體系結(jié)構(gòu)如圖所示,它有三個(gè)主要組成部分:
- 負(fù)載調(diào)度器(load balancer),它是整個(gè)集群對(duì)外面的前端機(jī),負(fù)責(zé)將客戶的請(qǐng)求發(fā)送到一組服務(wù)器上執(zhí)行,而客戶認(rèn)為服務(wù)是來自一個(gè)IP地址上的。它可以是用IP負(fù)載均衡技術(shù)的負(fù)載調(diào)度器,也可以是基于內(nèi)容請(qǐng)求分發(fā)的負(fù)載調(diào)度器,還可以是兩者的結(jié)合。
- 服務(wù)器池(server pool),是一組真正執(zhí)行客戶請(qǐng)求的服務(wù)器,執(zhí)行的服務(wù)有WEB、MAIL、FTP和DNS等。
- 后端存儲(chǔ)(backend storage),它為服務(wù)器池提供一個(gè)共享的存儲(chǔ)區(qū),這樣很容易使得服務(wù)器池?fù)碛邢嗤膬?nèi)容,提供相同的服務(wù)。
調(diào)度器采用IP負(fù)載均衡技術(shù)、基于內(nèi)容請(qǐng)求分發(fā)技術(shù)或者兩者相結(jié)合。在IP負(fù)載均衡技術(shù)中,需要服務(wù)器池?fù)碛邢嗤膬?nèi)容提供相同的服務(wù)。當(dāng)客戶請(qǐng)求 到達(dá)時(shí),調(diào)度器只根據(jù)負(fù)載情況從服務(wù)器池中選出一個(gè)服務(wù)器,將該請(qǐng)求轉(zhuǎn)發(fā)到選出的服務(wù)器,并記錄這個(gè)調(diào)度;當(dāng)這個(gè)請(qǐng)求的其他報(bào)文到達(dá),也會(huì)被轉(zhuǎn)發(fā)到前面選 出的服務(wù)器。在基于內(nèi)容請(qǐng)求分發(fā)技術(shù)中,服務(wù)器可以提供不同的服務(wù),當(dāng)客戶請(qǐng)求到達(dá)時(shí),調(diào)度器可根據(jù)請(qǐng)求的內(nèi)容和服務(wù)器的情況選擇服務(wù)器執(zhí)行請(qǐng)求。因?yàn)樗?有的操作都是在操作系統(tǒng)核心空間中將完成的,它的調(diào)度開銷很小,所以它具有很高的吞吐率。
服務(wù)器池的結(jié)點(diǎn)數(shù)目是可變的。當(dāng)整個(gè)系統(tǒng)收到的負(fù)載超過目前所有結(jié)點(diǎn)的處理能力時(shí),可以在服務(wù)器池中增加服務(wù)器來滿足不斷增長(zhǎng)的請(qǐng)求負(fù)載。對(duì)大多數(shù)網(wǎng)絡(luò)服務(wù)來說,結(jié)點(diǎn)與結(jié)點(diǎn)間不存在很強(qiáng)的相關(guān)性,所以整個(gè)系統(tǒng)的性能可以隨著服務(wù)器池的結(jié)點(diǎn)數(shù)目增加而線性增長(zhǎng)。
后端存儲(chǔ)通常用容錯(cuò)的分布式文件系統(tǒng),如AFS、GFS、Coda和Intermezzo等。分布式文件系統(tǒng)為各服務(wù)器提供共享的存儲(chǔ)區(qū),它們?cè)L問 分布式文件系統(tǒng)就像訪問本地文件系統(tǒng)一樣。同時(shí),分布式文件系統(tǒng)提供良好的伸縮性和可用性。然而,當(dāng)不同服務(wù)器上的應(yīng)用程序同時(shí)訪問分布式文件系統(tǒng)上同一 資源時(shí),應(yīng)用程序的訪問沖突需要消解才能使得資源處于一致狀態(tài)。這需要一個(gè)分布式鎖管理器(Distributed Lock Manager),它可能是分布式文件系統(tǒng)內(nèi)部提供的,也可能是外部的。開發(fā)者在寫應(yīng)用程序時(shí),可以使用分布式鎖管理器來保證應(yīng)用程序在不同結(jié)點(diǎn)上并發(fā)訪 問的一致性。
三、LVS集群的幾種工作模式
1.NAT
客戶通過Virtual IP Address(虛擬服務(wù)的IP地址)訪問網(wǎng)絡(luò)服務(wù)時(shí),請(qǐng)求報(bào)文到達(dá)調(diào)度器,調(diào)度器根據(jù)連接調(diào)度算法從一組真實(shí)服務(wù)器中選出一臺(tái)服務(wù)器,將報(bào)文的目標(biāo)地址 Virtual IP Address改寫成選定服務(wù)器的地址,報(bào)文的目標(biāo)端口改寫成選定服務(wù)器的相應(yīng)端口,最后將修改后的報(bào)文發(fā)送給選出的服務(wù)器。
同時(shí),調(diào)度器在連接Hash 表中記錄這個(gè)連接,當(dāng)這個(gè)連接的下一個(gè)報(bào)文到達(dá)時(shí),從連接Hash表中可以得到原選定服務(wù)器的地址和端口,進(jìn)行同樣的改寫操作,并將報(bào)文傳給原選定的服務(wù)器。當(dāng)來自真實(shí)服務(wù)器的響應(yīng)報(bào)文經(jīng)過調(diào)度器時(shí),調(diào)度器將報(bào)文的源地址和源端口改為Virtual IP Address和相應(yīng)的端口,再把報(bào)文發(fā)給用戶。
2.TUN
在VS/NAT的集群系統(tǒng)中,請(qǐng)求和響應(yīng)的數(shù)據(jù)都是需要經(jīng)過負(fù)載均衡器的,當(dāng)真實(shí)服務(wù)器的數(shù)量在20臺(tái)以上,負(fù)載均衡器將成為整個(gè)系統(tǒng)的瓶頸,因?yàn)榇蠖鄶?shù)的Internet服務(wù)都有一個(gè)特點(diǎn),就是請(qǐng)求報(bào)文發(fā)來的數(shù)據(jù)都很少,而響應(yīng)的報(bào)文往往包含大量的數(shù)據(jù),因而對(duì)于我們的服務(wù)器來說,響應(yīng)回去的報(bào)文數(shù)據(jù)如果走的是負(fù)載均衡器,那么這么多RIP使用一根網(wǎng)線來返回?cái)?shù)據(jù),而負(fù)載均衡服務(wù)器的帶寬是有限的,這就是系統(tǒng)的瓶頸。
VS/TUN的對(duì)上述瓶頸的解決方案主要是它的報(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)文解封獲得原來目標(biāo)地址為VIP的報(bào)文,服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上,所有就處理這個(gè)請(qǐng)求,然后根據(jù)路由表將相應(yīng)報(bào)文直接返還給用戶。
在這里,請(qǐng)求報(bào)文的目標(biāo)地址為VIP,響應(yīng)報(bào)文的源地址也為VIP,所以響應(yīng)報(bào)文不需要作任何修改,可以直接返回給客戶。
3.DR
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ù)載情況,動(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ù)器的MAC地址,所以服務(wù)器肯定能夠接受到這個(gè)數(shù)據(jù)幀,從中可以獲得該IP報(bào)文,當(dāng)服務(wù)器發(fā)現(xiàn)報(bào)文的目標(biāo)地址VIP是在本地的網(wǎng)絡(luò)設(shè)備上,服務(wù)器會(huì)處理這個(gè)報(bào)文,然后根據(jù)路由表將相應(yīng)報(bào)文直接返還給用戶。