Linux服務(wù)器集群系統(tǒng)之LVS集群的體系結(jié)構(gòu)
Linux集群系統(tǒng)是當(dāng)代許多公司采用的解決方案,Linux服務(wù)器集群通過(guò)多臺(tái)機(jī)器連接起來(lái),處理復(fù)雜的問(wèn)題。可以將同構(gòu)或者異構(gòu)的計(jì)算機(jī)連接起來(lái),協(xié)同完成特定的任務(wù)。這樣就構(gòu)成了集群。LVS是Linux virtual server的縮寫(xiě),他的意思是Linux虛擬機(jī)服務(wù)。本文主要介紹的是基于Linux下的集群系統(tǒng)。
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ù)器。整個(gè)服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明的,而且無(wú)需修改客戶端和服務(wù)器端的程序。
圖1:LVS集群的體系結(jié)構(gòu)
為此,在設(shè)計(jì)時(shí)需要考慮系統(tǒng)的透明性、可伸縮性、高可用性和易管理性。一般來(lái)說(shuō),LVS集群采用三層結(jié)構(gòu),其體系結(jié)構(gòu)如圖1所示,三層主要組成部分為:
負(fù)載調(diào)度器(load balancer),它是整個(gè)集群對(duì)外面的前端機(jī),負(fù)責(zé)將客戶的請(qǐng)求發(fā)送到一組服務(wù)器上執(zhí)行,而客戶認(rèn)為服務(wù)是來(lái)自一個(gè)IP地址(我們可稱之為虛擬IP地址)上的。
服務(wù)器池(server pool),是一組真正執(zhí)行客戶請(qǐng)求的服務(wù)器,執(zhí)行的服務(wù)有WEB、MAIL、FTP和DNS等。
共享存儲(chǔ)(shared storage),它為服務(wù)器池提供一個(gè)共享的存儲(chǔ)區(qū),這樣很容易使得服務(wù)器池?fù)碛邢嗤膬?nèi)容,提供相同的服務(wù)。
調(diào)度器是服務(wù)器集群系統(tǒng)的唯一入口點(diǎn)(Single Entry Point),它可以采用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ù)服務(wù)器負(fù)載情況和設(shè)定的調(diào)度算法從服務(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ù)器執(zhí)行請(qǐng)求。因?yàn)樗械牟僮鞫际窃贚inux操作系統(tǒng)核心空間中將完成的,它的調(diào)度開(kāi)銷很小,所以它具有很高的吞吐率。
服務(wù)器池的結(jié)點(diǎn)數(shù)目是可變的。當(dāng)整個(gè)系統(tǒng)收到的負(fù)載超過(guò)目前所有結(jié)點(diǎn)的處理能力時(shí),可以在服務(wù)器池中增加服務(wù)器來(lái)滿足不斷增長(zhǎng)的請(qǐng)求負(fù)載。對(duì)大多數(shù)網(wǎng)絡(luò)服務(wù)來(lái)說(shuō),請(qǐng)求間不存在很強(qiáng)的相關(guān)性,請(qǐng)求可以在不同的結(jié)點(diǎn)上并行執(zhí)行,所以整個(gè)系統(tǒng)的性能基本上可以隨著服務(wù)器池的結(jié)點(diǎn)數(shù)目增加而線性增長(zhǎng)。
共享存儲(chǔ)通常是數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)文件系統(tǒng)或者分布式文件系統(tǒng)。服務(wù)器結(jié)點(diǎn)需要?jiǎng)討B(tài)更新的數(shù)據(jù)一般存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)中,同時(shí)數(shù)據(jù)庫(kù)會(huì)保證并發(fā)訪問(wèn)時(shí)數(shù)據(jù)的一致性。靜態(tài)的數(shù)據(jù)可以存儲(chǔ)在網(wǎng)絡(luò)文件系統(tǒng)(如NFS/CIFS)中,但網(wǎng)絡(luò)文件系統(tǒng)的伸縮能力有限,一般來(lái)說(shuō),NFS/CIFS服務(wù)器只能支持3~6個(gè)繁忙的服務(wù)器結(jié)點(diǎn)。對(duì)于規(guī)模較大的集群系統(tǒng),可以考慮用分布式文件系統(tǒng),如AFS[1]、GFS[2.3]、Coda[4]和Intermezzo[5]等。分布式文件系統(tǒng)可為各服務(wù)器提供共享的存儲(chǔ)區(qū),它們?cè)L問(wèn)分布式文件系統(tǒng)就像訪問(wèn)本地文件系統(tǒng)一樣,同時(shí)分布式文件系統(tǒng)可提供良好的伸縮性和可用性。此外,當(dāng)不同服務(wù)器上的應(yīng)用程序同時(shí)讀寫(xiě)訪問(wèn)分布式文件系統(tǒng)上同一資源時(shí),應(yīng)用程序的訪問(wèn)沖突需要消解才能使得資源處于一致?tīng)顟B(tài)。這需要一個(gè)分布式鎖管理器(Distributed Lock Manager),它可能是分布式文件系統(tǒng)內(nèi)部提供的,也可能是外部的。開(kāi)發(fā)者在寫(xiě)應(yīng)用程序時(shí),可以使用分布式鎖管理器來(lái)保證應(yīng)用程序在不同結(jié)點(diǎn)上并發(fā)訪問(wèn)的一致性。
負(fù)載調(diào)度器、服務(wù)器池和共享存儲(chǔ)系統(tǒng)通過(guò)高速網(wǎng)絡(luò)相連接,如100Mbps交換網(wǎng)絡(luò)、Myrinet和Gigabit網(wǎng)絡(luò)等。使用高速的網(wǎng)絡(luò),主要為避免當(dāng)系統(tǒng)規(guī)模擴(kuò)大時(shí)互聯(lián)網(wǎng)絡(luò)成為整個(gè)系統(tǒng)的瓶頸。
Graphic Monitor是為系統(tǒng)管理員提供整個(gè)集群系統(tǒng)的監(jiān)視器,它可以監(jiān)視系統(tǒng)的狀態(tài)。Graphic Monitor是基于瀏覽器的,所以無(wú)論管理員在本地還是異地都可以監(jiān)測(cè)系統(tǒng)的狀況。為了安全的原因,瀏覽器要通過(guò)HTTPS(Secure HTTP)協(xié)議和身份認(rèn)證后,才能進(jìn)行系統(tǒng)監(jiān)測(cè),并進(jìn)行系統(tǒng)的配置和管理。
1. 為什么使用層次的體系結(jié)構(gòu)
層次的體系結(jié)構(gòu)可以使得層與層之間相互獨(dú)立,每一個(gè)層次提供不同的功能,在一個(gè)層次可以重用不同的已有軟件。例如,調(diào)度器層提供了負(fù)載平衡、可伸縮性和高可用性等,在服務(wù)器層可以運(yùn)行不同的網(wǎng)絡(luò)服務(wù),如Web、Cache、Mail和Media等,來(lái)提供不同的可伸縮網(wǎng)絡(luò)服務(wù)。明確的功能劃分和清晰的層次結(jié)構(gòu)使得系統(tǒng)容易建設(shè),以后整個(gè)系統(tǒng)容易維護(hù),而且系統(tǒng)的性能容易被擴(kuò)展。
2. 為什么是共享存儲(chǔ)
共享存儲(chǔ)如分布式文件系統(tǒng)在這個(gè)LVS集群系統(tǒng)是可選項(xiàng)。當(dāng)網(wǎng)絡(luò)服務(wù)需要有相同的內(nèi)容,共享存儲(chǔ)是很好的選擇,否則每臺(tái)服務(wù)器需要將相同的內(nèi)容復(fù)制到本地硬盤上。當(dāng)系統(tǒng)存儲(chǔ)的內(nèi)容越多,這種無(wú)共享結(jié)構(gòu)(Shared-nothing Structure)的代價(jià)越大,因?yàn)槊颗_(tái)服務(wù)器需要一樣大的存儲(chǔ)空間,任何的更新需要涉及到每臺(tái)服務(wù)器,系統(tǒng)的維護(hù)代價(jià)會(huì)非常高。
共享存儲(chǔ)為服務(wù)器組提供統(tǒng)一的存儲(chǔ)空間,這使得系統(tǒng)的內(nèi)容維護(hù)工作比較輕松,如Webmaster只需要更新共享存儲(chǔ)中的頁(yè)面,對(duì)所有的服務(wù)器都有效。分布式文件系統(tǒng)提供良好的伸縮性和可用性,當(dāng)分布式文件系統(tǒng)的存儲(chǔ)空間增加時(shí),所有服務(wù)器的存儲(chǔ)空間也隨之增大。對(duì)于大多數(shù)Internet服務(wù)來(lái)說(shuō),它們都是讀密集型(Read-intensive)的應(yīng)用,分布式文件系統(tǒng)在每臺(tái)服務(wù)器使用本地硬盤作Cache(如2Gbytes的空間),可以使得訪問(wèn)分布式文件系統(tǒng)本地的速度接近于訪問(wèn)本地硬盤。
此外,存儲(chǔ)硬件技術(shù)的發(fā)展也促使從無(wú)共享的集群向共享存儲(chǔ)的集群遷移。存儲(chǔ)區(qū)域網(wǎng)(Storage Area Networks)技術(shù)解決了集群的每個(gè)結(jié)點(diǎn)可以直接連接/共享一個(gè)龐大的硬盤陣列,硬件廠商也提供多種硬盤共享技術(shù),如光纖通道(Fiber Channel)、共享SCSI(Shared SCSI)。InfiniBand是一個(gè)通用的高性能I/O規(guī)范,使得存儲(chǔ)區(qū)域網(wǎng)中以更低的延時(shí)傳輸I/O消息和集群通訊消息,并且提供很好的伸縮性。InfiniBand得到絕大多數(shù)的大廠商的支持,如Compaq、Dell、Hewlett-Packard、IBM、Intel、Microsoft和SUN Microsystems等,它正在成為一個(gè)業(yè)界的標(biāo)準(zhǔn)。這些技術(shù)的發(fā)展使得共享存儲(chǔ)變得容易,規(guī)模生產(chǎn)也會(huì)使得成本逐步降低。
3. 高可用性
集群系統(tǒng)的特點(diǎn)是它在軟硬件上都有冗余。系統(tǒng)的高可用性可以通過(guò)檢測(cè)節(jié)點(diǎn)或服務(wù)進(jìn)程故障和正確地重置系統(tǒng)來(lái)實(shí)現(xiàn),使得系統(tǒng)收到的請(qǐng)求能被存活的結(jié)點(diǎn)處理。
通常,我們?cè)谡{(diào)度器上有資源監(jiān)測(cè)進(jìn)程來(lái)時(shí)刻監(jiān)視各個(gè)服務(wù)器結(jié)點(diǎn)的健康狀況。當(dāng)服務(wù)器對(duì)ICMP ping不可達(dá)時(shí)或者探測(cè)她的網(wǎng)絡(luò)服務(wù)在指定的時(shí)間沒(méi)有響應(yīng)時(shí),資源監(jiān)測(cè)進(jìn)程通知操作系統(tǒng)內(nèi)核將該服務(wù)器從調(diào)度列表中刪除或者失效。這樣,新的服務(wù)請(qǐng)求就不會(huì)被調(diào)度到壞的結(jié)點(diǎn)。資源監(jiān)測(cè)進(jìn)程能通過(guò)電子郵件或傳呼機(jī)向管理員報(bào)告故障。一旦監(jiān)測(cè)進(jìn)程到服務(wù)器恢復(fù)工作,通知調(diào)度器將其加入調(diào)度列表進(jìn)行調(diào)度。另外,通過(guò)系統(tǒng)提供的管理程序,管理員可發(fā)命令隨時(shí)可以將新機(jī)器加入服務(wù)來(lái)提高系統(tǒng)的處理性能,也可以將已有的服務(wù)器切出服務(wù),以便對(duì)服務(wù)器進(jìn)行系統(tǒng)維護(hù)。
現(xiàn)在前端的調(diào)度器有可能成為系統(tǒng)的單一失效點(diǎn)(Single Point of Failure)。一般來(lái)說(shuō),調(diào)度器的可靠性較高,因?yàn)檎{(diào)度器上運(yùn)行的程序較少而且大部分程序早已經(jīng)遍歷過(guò),但我們不能排除硬件老化、網(wǎng)絡(luò)線路或者人為誤操作等主要故障。為了避免調(diào)度器失效而導(dǎo)致整個(gè)系統(tǒng)不能工作,我們需要設(shè)立一個(gè)從調(diào)度器作為主調(diào)度器的備份。兩個(gè)心跳(Heartbeat)進(jìn)程[6]分別在主、從調(diào)度器上運(yùn)行,它們通過(guò)串口線和UDP等心跳線來(lái)相互定時(shí)地匯報(bào)各自的健康狀況。當(dāng)從調(diào)度器不能聽(tīng)得主調(diào)度器的心跳時(shí),從調(diào)度器通過(guò)ARP欺騙(Gratuitous ARP)來(lái)接管集群對(duì)外的Virtual IP Address,同時(shí)接管主調(diào)度器的工作來(lái)提供負(fù)載調(diào)度服務(wù)。當(dāng)主調(diào)度器恢復(fù)時(shí),這里有兩種方法,一是主調(diào)度器自動(dòng)變成從調(diào)度器,二是從調(diào)度器釋放Virtual IP Address,主調(diào)度器收回Virtual IP Address并提供負(fù)載調(diào)度服務(wù)。這里,多條心跳線可以使得因心跳線故障導(dǎo)致誤判(即從調(diào)度器認(rèn)為主調(diào)度器已經(jīng)失效,其實(shí)主調(diào)度器還在正常工作)的概論降到最低。
通常,當(dāng)主調(diào)度器失效時(shí),主調(diào)度器上所有已建立連接的狀態(tài)信息將丟失,已有的連接會(huì)中斷。客戶需要向重新連接,從調(diào)度器才會(huì)將新連接調(diào)度到各個(gè)服務(wù)器上,這對(duì)客戶會(huì)造成一定的不便。為此,IPVS調(diào)度器在Linux 內(nèi)核中實(shí)現(xiàn)一種高效狀態(tài)同步機(jī)制,將主調(diào)度器的狀態(tài)信息及時(shí)地同步到從調(diào)度器。當(dāng)從調(diào)度器接管時(shí),絕大部分已建立的連接會(huì)持續(xù)下去。
【編輯推薦】
- Linux集群原理與安裝配置匯總
- “懶惰”Linux集群管理員的11個(gè)秘訣
- 圖文詳解 文件柜內(nèi)DIY自己的Linux集群機(jī)
- 大型Linux集群的安裝節(jié)點(diǎn)和管理
- 大型Linux集群簡(jiǎn)介和硬件配置
- 高性能Linux集群基礎(chǔ)知識(shí)