LVS即Linux Virtual Server,虛擬服務(wù)器是一個(gè)可高擴(kuò)展且高可用的服務(wù)器,構(gòu)建在真實(shí)服務(wù)器集群上。服務(wù)器群集的體系結(jié)構(gòu)對(duì)最終用戶完全透明,用戶與群集系統(tǒng)進(jìn)行交互,就好像它只
LVS即Linux Virtual Server,虛擬服務(wù)器是一個(gè)可高擴(kuò)展且高可用的服務(wù)器,構(gòu)建在真實(shí)服務(wù)器集群上。服務(wù)器群集的體系結(jié)構(gòu)對(duì)最終用戶完全透明,用戶與群集系統(tǒng)進(jìn)行交互,就好像它只是一個(gè)高性能的虛擬服務(wù)器一樣。請(qǐng)參考下圖:
真實(shí)服務(wù)器和負(fù)載均衡器可以通過高速LAN(局域網(wǎng))或地理上分散的WAN(廣域網(wǎng))互連。負(fù)載均衡器可以將請(qǐng)求分配給后端不同的服務(wù)器,而對(duì)外則只顯示為單個(gè)IP的虛擬服務(wù)。分配的工作方式可以使用IP負(fù)載均衡技術(shù)或應(yīng)用級(jí)負(fù)載均衡技術(shù)。通過透明地添加或刪除集群中的節(jié)點(diǎn)來實(shí)現(xiàn)系統(tǒng)的可伸縮性。通過檢測(cè)節(jié)點(diǎn)或守護(hù)程序故障并適當(dāng)?shù)刂匦屡渲孟到y(tǒng)來提供高可用性。
Linux Virtual Server Project的基本目標(biāo)是:使用集群技術(shù)為Linux構(gòu)建高性能,高可用性的服務(wù)器,提供良好的可擴(kuò)展性,可靠性和可維護(hù)性。
為什么需要LVS?
隨著互聯(lián)網(wǎng)的爆炸性增長及其在我們生活中日益重要的作用,互聯(lián)網(wǎng)上的流量急劇增加。服務(wù)器上的工作負(fù)載也隨之迅速增加,因此服務(wù)器很容易在短時(shí)間內(nèi)過載,尤其是對(duì)于一些受歡迎的網(wǎng)站。為了克服服務(wù)器的過載問題,有兩種解決方案:一種是單服務(wù)器解決方案,即將服務(wù)器升級(jí)到性能更高的服務(wù)器,但是當(dāng)請(qǐng)求增加時(shí)它很快就會(huì)過載,因此我們必須再次升級(jí),升級(jí)過程復(fù)雜且成本高;另一種是多服務(wù)器解決方案,即在服務(wù)器集群上構(gòu)建可擴(kuò)展的網(wǎng)絡(luò)服務(wù)系統(tǒng)。當(dāng)負(fù)載增加時(shí),我們可以簡(jiǎn)單地將新服務(wù)器或更多服務(wù)器添加到集群中以滿足不斷增長的請(qǐng)求。因此,為網(wǎng)絡(luò)服務(wù)構(gòu)建服務(wù)器集群系統(tǒng)更具可擴(kuò)展性和成本效益。
有幾種方法可以構(gòu)建服務(wù)器集群:
A. 基于DNS的負(fù)載均衡集群
DNS負(fù)載平衡可能是構(gòu)建網(wǎng)絡(luò)服務(wù)集群的最簡(jiǎn)單方法。它使用域名系統(tǒng)通過將域名解析為服務(wù)器的不同IP地址來將請(qǐng)求分發(fā)到不同的服務(wù)器。當(dāng)DNS請(qǐng)求到達(dá)DNS服務(wù)器以解析域名時(shí),DNS服務(wù)器根據(jù)調(diào)度策略(例如以循環(huán)方式)發(fā)出一個(gè)服務(wù)器IP地址,然后使用相同的本地緩存名稱服務(wù)器從客戶端發(fā)出后續(xù)請(qǐng)求在指定的名稱解析生存時(shí)間(TTL)中發(fā)送到同一服務(wù)器。
但是,由于客戶端和分層DNS系統(tǒng),很容易導(dǎo)致服務(wù)器之間的動(dòng)態(tài)負(fù)載不平衡,因此服務(wù)器不容易處理其峰值負(fù)載。在DNS服務(wù)器上無法很好地選擇名稱映射的TTL值,TTL值很小的話,會(huì)導(dǎo)致DNS流量很高,DNS服務(wù)器將成為瓶頸。而如果TTL值過高,則動(dòng)態(tài)負(fù)載不平衡將變得更糟。即使TTL值設(shè)置為零,調(diào)度粒度是每個(gè)主機(jī),不同用戶的訪問模式可能會(huì)導(dǎo)致動(dòng)態(tài)負(fù)載不平衡,因?yàn)橛行┤丝赡軓木W(wǎng)站上拉大量頁面,而其他人可能只是瀏覽幾頁而已。
B. 基于調(diào)度程序的負(fù)載均衡集群
Dispatcher,也稱為負(fù)載均衡器,可用于在群集中的服務(wù)器之間分配負(fù)載,以便服務(wù)器的并行服務(wù)可以在單個(gè)IP地址上顯示為虛擬服務(wù),并且最終用戶可以像單個(gè)服務(wù)器一樣進(jìn)行交互而不知道集群中的所有服務(wù)器。與基于DNS的負(fù)載平衡相比,調(diào)度程序可以以精細(xì)的粒度(例如每個(gè)連接)調(diào)度請(qǐng)求,以便在服務(wù)器之間實(shí)現(xiàn)更好的負(fù)載平衡。當(dāng)一臺(tái)或多臺(tái)服務(wù)器發(fā)生故障時(shí),可以屏蔽故障。服務(wù)器管理變得越來越容易,管理員可以隨時(shí)使用服務(wù)器或更多服務(wù)器,而且不會(huì)中斷最終用戶的服務(wù)。
負(fù)載均衡可以在兩個(gè)級(jí)別完成,即應(yīng)用級(jí)和IP級(jí)。例如,Reverse-proxy和pWEB是用于構(gòu)建可伸縮Web服務(wù)器的應(yīng)用程序級(jí)負(fù)載平衡方法。他們將HTTP請(qǐng)求轉(zhuǎn)發(fā)到群集中的不同Web服務(wù)器,獲取結(jié)果,然后將其返回給客戶端。由于在應(yīng)用程序級(jí)別處理HTTP請(qǐng)求和回復(fù)的開銷很高,當(dāng)服務(wù)器節(jié)點(diǎn)數(shù)量增加到5或更多時(shí),應(yīng)用程序級(jí)負(fù)載均衡器將成為新的瓶頸。
LVS工作方式
現(xiàn)在虛擬服務(wù)器以三種方式實(shí)現(xiàn)。Linux Director中共有三種IP負(fù)載均衡技術(shù)(數(shù)據(jù)包轉(zhuǎn)發(fā)方法)。它們是通過NAT的虛擬服務(wù)器,通過IP隧道的虛擬服務(wù)器和通過直接路由的虛擬服務(wù)器。即NAT/DR/IP Tunneling。
以下小節(jié)將解釋它們的優(yōu)缺點(diǎn)。VS/NAT,VS/TUN 和 VS/DR的比較總結(jié)在下表中:
A. NAT
通過NAT的虛擬服務(wù)器的優(yōu)點(diǎn)是真實(shí)服務(wù)器可以運(yùn)行任何支持TCP / IP協(xié)議的操作系統(tǒng),真實(shí)服務(wù)器可以使用私有Internet地址,并且負(fù)載均衡器只需要1個(gè)IP地址。
缺點(diǎn)是通過NAT的虛擬服務(wù)器的可擴(kuò)展性是有限的。當(dāng)服務(wù)器節(jié)點(diǎn)的數(shù)量增加到大約20或更多時(shí),負(fù)載平衡器可能是整個(gè)系統(tǒng)的瓶頸,因?yàn)檎?qǐng)求包和響應(yīng)包都需要由負(fù)載平衡器重寫。假設(shè)TCP數(shù)據(jù)包的平均長度為536字節(jié),重寫數(shù)據(jù)包的平均延遲約為60us(在奔騰處理器上,使用更高的處理器可以減少一點(diǎn)),負(fù)載均衡器的最大吞吐量為8.93 MB /秒。假設(shè)真實(shí)服務(wù)器的平均吞吐量為400Kbytes / s,負(fù)載均衡器可以調(diào)度22個(gè)真實(shí)服務(wù)器。
B. IP Tunneling
在通過NAT的虛擬服務(wù)器中,請(qǐng)求和響應(yīng)數(shù)據(jù)包都需要通過負(fù)載均衡器,當(dāng)服務(wù)器節(jié)點(diǎn)數(shù)量增加到20個(gè)或更多時(shí),負(fù)載均衡器可能成為新的瓶頸,因?yàn)榫W(wǎng)絡(luò)接口的吞吐量最終有限。從許多Internet服務(wù)(例如Web服務(wù))可以看出,請(qǐng)求數(shù)據(jù)包通常很短,而響應(yīng)數(shù)據(jù)包通常包含大量數(shù)據(jù)。
在通過IP隧道的虛擬服務(wù)器中,負(fù)載均衡器僅調(diào)度對(duì)不同真實(shí)服務(wù)器的請(qǐng)求,而真實(shí)服務(wù)器直接向用戶返回回復(fù)。因此,負(fù)載均衡器可以處理大量請(qǐng)求,它可以調(diào)度超過100個(gè)真實(shí)服務(wù)器,并且它不會(huì)成為系統(tǒng)的瓶頸。因此,使用IP隧道將大大增加負(fù)載均衡器的最大服務(wù)器節(jié)點(diǎn)數(shù)。即使負(fù)載均衡器只有100Mbps全雙工網(wǎng)絡(luò)適配器,虛擬服務(wù)器的最大吞吐量也可以達(dá)到1Gbps以上。
IP隧道功能可用于構(gòu)建高性能的虛擬服務(wù)器。構(gòu)建虛擬代理服務(wù)器非常好,因?yàn)楫?dāng)代理服務(wù)器獲得請(qǐng)求時(shí),它可以直接訪問Internet以獲取對(duì)象并將它們直接返回給用戶。
C. Direct Routing
與通過隧道方法在虛擬服務(wù)器中一樣,DR模式僅通過直接路由處理虛擬服務(wù)器中的客戶端到服務(wù)器的流量,而由后端的真實(shí)服務(wù)器直接相應(yīng)數(shù)據(jù)包并發(fā)送到客戶端。這可以大大提高虛擬服務(wù)器的可擴(kuò)展性。
與通過IP隧道方法的虛擬服務(wù)器相比,這種方法沒有隧道開銷,但要求負(fù)載均衡器的接口和真實(shí)服務(wù)器的接口必須在同一網(wǎng)段。
LVS的架構(gòu)
對(duì)于整個(gè)系統(tǒng)的可擴(kuò)展性,可用性和可管理性,我們通常采用下圖所示的LVS集群中的三層架構(gòu)。
三層結(jié)構(gòu)包括:
Load Balancer
它是整個(gè)集群系統(tǒng)的前端機(jī)器,并在一組服務(wù)器之間平衡來自客戶端的請(qǐng)求,以便客戶端認(rèn)為所有服務(wù)都來自單個(gè)IP地址。
服務(wù)器群集
它是一組運(yùn)行實(shí)際網(wǎng)絡(luò)服務(wù)的服務(wù)器,例如Web,郵件,F(xiàn)TP,DNS和媒體服務(wù)。
共享存儲(chǔ)
為服務(wù)器提供共享存儲(chǔ)空間,以便服務(wù)器可以輕松擁有相同的內(nèi)容并提供相同的服務(wù)。
負(fù)載均衡器是服務(wù)器集群系統(tǒng)的單一入口點(diǎn),它可以運(yùn)行在Linux內(nèi)核中實(shí)現(xiàn)IP負(fù)載平衡技術(shù)的IPVS,或在Linux內(nèi)核中實(shí)現(xiàn)應(yīng)用程序級(jí)負(fù)載平衡的KTCPVS。當(dāng)使用IPVS時(shí),所有服務(wù)器都需要提供相同的服務(wù)和內(nèi)容,負(fù)載均衡器根據(jù)指定的調(diào)度算法和每個(gè)服務(wù)器的負(fù)載將新的客戶端請(qǐng)求轉(zhuǎn)發(fā)給服務(wù)器。無論選擇哪個(gè)服務(wù)器,客戶端都應(yīng)該得到相同的結(jié)果。當(dāng)使用KTCPVS時(shí),服務(wù)器可以具有不同的內(nèi)容,負(fù)載均衡器可以根據(jù)請(qǐng)求的內(nèi)容將請(qǐng)求轉(zhuǎn)發(fā)到不同的服務(wù)器。由于KTCPVS是在Linux內(nèi)核中實(shí)現(xiàn)的,因此中繼數(shù)據(jù)的開銷很小,因此它可以具有高吞吐量。
可以根據(jù)系統(tǒng)接收的負(fù)載更改服務(wù)器集群的節(jié)點(diǎn)數(shù)目。當(dāng)集群中所有服務(wù)器都過載時(shí),可以添加更多新服務(wù)器來處理不斷增加的工作負(fù)載。對(duì)于大多數(shù)Internet服務(wù)(如Web),請(qǐng)求可以在不同的服務(wù)器上并行運(yùn)行。因此,隨著服務(wù)器集群的節(jié)點(diǎn)數(shù)量的增加,整體的性能幾乎可以線性擴(kuò)展。
共享存儲(chǔ)可以是數(shù)據(jù)庫系統(tǒng),網(wǎng)絡(luò)文件系統(tǒng)或分布式文件系統(tǒng)。服務(wù)器節(jié)點(diǎn)需要?jiǎng)討B(tài)更新的數(shù)據(jù)應(yīng)該存儲(chǔ)在基于數(shù)據(jù)的系統(tǒng)中,當(dāng)服務(wù)器節(jié)點(diǎn)并行地讀取或?qū)懭霐?shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)時(shí),數(shù)據(jù)庫系統(tǒng)可以保證并發(fā)數(shù)據(jù)訪問的一致性。靜態(tài)數(shù)據(jù)通常保存在網(wǎng)絡(luò)文件系統(tǒng)(如NFS和CIFS)中,以便所有服務(wù)器節(jié)點(diǎn)可以共享數(shù)據(jù)。但是,單個(gè)網(wǎng)絡(luò)文件系統(tǒng)的可擴(kuò)展性是有限的,例如,單個(gè)NFS / CIFS只能支持從4到8個(gè)服務(wù)器的數(shù)據(jù)訪問。對(duì)于大規(guī)模集群系統(tǒng),分布式/集群文件系統(tǒng)可以用于共享存儲(chǔ),例如GPFS,Coda和GFS,然后共享存儲(chǔ)也可以根據(jù)系統(tǒng)要求進(jìn)行擴(kuò)展。
負(fù)載均衡器,服務(wù)器集群和共享存儲(chǔ)通常由高速網(wǎng)絡(luò)連接,如100Mbps以太網(wǎng)和千兆以太網(wǎng),這樣網(wǎng)絡(luò)在系統(tǒng)成長時(shí)不會(huì)成為系統(tǒng)的瓶頸。
LVS高可用
隨著越來越多的任務(wù)關(guān)鍵型應(yīng)用程序在Internet上運(yùn)行,提供高可用性服務(wù)變得越來越重要。集群系統(tǒng)的一個(gè)優(yōu)點(diǎn)是它具有硬件和軟件冗余,因?yàn)榧合到y(tǒng)由許多獨(dú)立節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)運(yùn)行一個(gè)操作系統(tǒng)和應(yīng)用軟件的副本。通過檢測(cè)節(jié)點(diǎn)或守護(hù)程序故障并適當(dāng)?shù)刂匦屡渲孟到y(tǒng),可以實(shí)現(xiàn)高可用性,從而可以由集群中的其余節(jié)點(diǎn)接管工作負(fù)載。
事實(shí)上,高可用性是一個(gè)很大的領(lǐng)域。高級(jí)的高可用系統(tǒng)可以具有可靠的通信子系統(tǒng),成員管理子系統(tǒng),并發(fā)控制子系統(tǒng)等,需要比較多的學(xué)習(xí)成本。但是,我們現(xiàn)在可以使用一些現(xiàn)有的軟件包來構(gòu)建高度可用的LVS集群系統(tǒng)。
通常,在負(fù)載均衡器上運(yùn)行服務(wù)監(jiān)視器守護(hù)程序以定期檢查服務(wù)器運(yùn)行狀況,如下圖所示。如果在指定時(shí)間內(nèi)服務(wù)器訪問請(qǐng)求或ICMP ECHO_REQUEST沒有響應(yīng),服務(wù)監(jiān)視器將認(rèn)為服務(wù)器已經(jīng)掛掉,并將其從負(fù)載均衡器的可用服務(wù)器列表中刪除,因此不會(huì)向這個(gè)掛掉的服務(wù)器再轉(zhuǎn)發(fā)請(qǐng)求。當(dāng)服務(wù)監(jiān)視器檢測(cè)掛掉的服務(wù)器恢復(fù)工作時(shí),服務(wù)監(jiān)視器將服務(wù)器添加回可用服務(wù)器列表。因此,負(fù)載均衡器可以自動(dòng)掩蓋服務(wù)守護(hù)進(jìn)程或服務(wù)器的故障。此外,管理員還可以使用系統(tǒng)工具添加新服務(wù)器以提高系統(tǒng)吞吐量或刪除服務(wù)器以進(jìn)行系統(tǒng)維護(hù),而無需關(guān)閉整個(gè)系統(tǒng)服務(wù)。
現(xiàn)在負(fù)載均衡器可能成為整個(gè)系統(tǒng)的單一故障點(diǎn)。為了防止整個(gè)系統(tǒng)因負(fù)載均衡器故障而停止運(yùn)行,我們需要設(shè)置負(fù)載均衡器的備份(或多個(gè)備份)。兩個(gè)心跳守護(hù)程序分別在主服務(wù)器和備份服務(wù)器上運(yùn)行,它們通過定期檢測(cè)到“我還活著”這樣的消息。當(dāng)備份的心跳守護(hù)進(jìn)程在指定時(shí)間內(nèi)無法聽到來自主服務(wù)器的心跳消息時(shí),它將接管虛擬IP地址以提供負(fù)載均衡服務(wù)。當(dāng)失敗的負(fù)載均衡器恢復(fù)工作時(shí),有兩種解決方案,一種是自動(dòng)成為備份負(fù)載均衡器,另一種是主動(dòng)負(fù)載均衡器釋放VIP地址,并且恢復(fù)一次接管VIP地址并成為主要負(fù)載均衡器。
主負(fù)載均衡器具有連接狀態(tài),即連接轉(zhuǎn)發(fā)到哪個(gè)服務(wù)器。如果備份負(fù)載均衡器在沒有這些連接信息的情況下接管,則客戶端必須再次將其請(qǐng)求發(fā)送到訪問服務(wù)。為了使負(fù)載均衡器故障轉(zhuǎn)移對(duì)客戶端應(yīng)用程序透明,我們?cè)贗PVS中實(shí)現(xiàn)連接同步,主IPVS負(fù)載均衡器通過UDP多播將連接信息同步到備份負(fù)載均衡器。當(dāng)備份負(fù)載均衡器在主要負(fù)載均衡器發(fā)生故障后接管時(shí),備份負(fù)載均衡器將具有大多數(shù)連接狀態(tài),因此幾乎所有連接都可以通過備份負(fù)載均衡器繼續(xù)訪問服務(wù)。
免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。