LVS服務器集羣系統結構

一、引言
在過去的十幾年中,Internet從幾個研究機構相連爲信息共享的網絡發展成爲擁有大量應用和服務的全球性網絡,
它正成爲人們生活中不可缺少的一部分。
雖然Internet發展速度很快,但建設和維護大型網絡服務依然是一項挑戰性的任務,
因爲系統必須是高性能的、高可靠的,尤其當訪問負載不斷增長時,系統必須能被擴展來滿足不斷增長的性能需求。
由於缺少建立可伸縮網絡服務的框架和設計方法,這意味着只有擁有非常出色工程和管理人才的機構才能建立和維護大型的網絡服務。

針對這種情形,本文先給出LVS集羣的通用體系結構,並討論了其的設計原則和相應的特點;
最後將LVS集羣應用於建立可伸縮的Web、Media、Cache和Mail等網絡服務。

二、LVS集羣的通用體系結構
LVS集羣採用IP負載均衡技術和基於內容請求分發技術。
調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,
且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。
整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。
圖1:LVS集羣的體系結構



爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。
一般來說,LVS集羣採用三層結構,其體系結構如圖1所示,
三層主要組成部分爲:
.  負載調度器(load balancer),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,
   而客戶認爲服務是來自一個IP地址(我們可稱之爲虛擬IP地址)上的。
.  服務器池(server pool),是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等。
.  共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

調度器是服務器集羣系統的唯一入口點(Single Entry Point),它可以採用IP負載均衡技術、基於內容請求分發技術或者兩者相結合。
. 在IP負載均衡技術中,需要服務器池擁有相同的內容提供相同的服務。
  當客戶請求到達時,調度器只根據服務器負載情況和設定的調度算法從服務器池中選出一個服務器,
  將該請求轉發到選出的服務器,並記錄這個調度;當這個請求的其他報文到達,也會被轉發到前面選出的服務器。
. 在基於內容請求分發技術中,服務器可以提供不同的服務,當客戶請求到達時,調度器可根據請求的內容選擇服務器執行請求。
  因爲所有的操作都是在Linux操作系統核心空間中將完成的,它的調度開銷很小,所以它具有很高的吞吐率。

服務器池的結點數目是可變的。
當整個系統收到的負載超過目前所有結點的處理能力時,可以在服務器池中增加服務器來滿足不斷增長的請求負載。
對大多數網絡服務來說,請求間不存在很強的相關性,請求可以在不同的結點上並行執行,
所以整個系統的性能基本上可以隨着服務器池的結點數目增加而線性增長。

共享存儲通常是數據庫、網絡文件系統或者分佈式文件系統。
服務器結點需要動態更新的數據一般存儲在數據庫系統中,同時數據庫會保證併發訪問時數據的一致性。
靜態的數據可以存儲在網絡文件系統(如NFS/CIFS)中,
但網絡文件系統的伸縮能力有限,一般來說,NFS/CIFS服務器只能支持3~6個繁忙的服務器結點。
對於規模較大的集羣系統,可以考慮用分佈式文件系統,如AFS[1]、GFS[2.3]、Coda[4]和Intermezzo[5]等。
分佈式文件系統可爲各服務器提供共享的存儲區,它們訪問分佈式文件系統就像訪問本地文件系統一樣,
同時分佈式文件系統可提供良好的伸縮性和可用性。
此外,當不同服務器上的應用程序同時讀寫訪問分佈式文件系統上同一資源時,應用程序的訪問衝突需要消解才能使得資源處於一致狀態。
這需要一個分佈式鎖管理器(Distributed Lock Manager),它可能是分佈式文件系統內部提供的,也可能是外部的。
開發者在寫應用程序時,可以使用分佈式鎖管理器來保證應用程序在不同結點上併發訪問的一致性。

負載調度器、服務器池和共享存儲系統通過高速網絡相連接,如100Mbps交換網絡、Myrinet和Gigabit網絡等。
使用高速的網絡,主要爲避免當系統規模擴大時互聯網絡成爲整個系統的瓶頸。

Graphic Monitor是爲系統管理員提供整個集羣系統的監視器,它可以監視系統的狀態。
Graphic Monitor是基於瀏覽器的,所以無論管理員在本地還是異地都可以監測系統的狀況。
爲了安全的原因,瀏覽器要通過HTTPS(Secure HTTP)協議和身份認證後,才能進行系統監測,並進行系統的配置和管理。

2.1. 爲什麼使用層次的體系結構
層次的體系結構可以使得層與層之間相互獨立,每一個層次提供不同的功能,在一個層次可以重用不同的已有軟件。
例如,
調度器層提供了負載平衡、可伸縮性和高可用性等,
在服務器層可以運行不同的網絡服務,如Web、Cache、Mail和Media等,來提供不同的可伸縮網絡服務。

明確的功能劃分和清晰的層次結構使得系統容易建設,以後整個系統容易維護,而且系統的性能容易被擴展。

2.2. 爲什麼是共享存儲
共享存儲如分佈式文件系統在這個LVS集羣系統是可選項。
當網絡服務需要有相同的內容,共享存儲是很好的選擇,否則每臺服務器需要將相同的內容複製到本地硬盤上。
當系統存儲的內容越多,這種無共享結構(Shared-nothing Structure)的代價越大,
因爲每臺服務器需要一樣大的存儲空間,任何的更新需要涉及到每臺服務器,系統的維護代價會非常高。

共享存儲爲服務器組提供統一的存儲空間,這使得系統的內容維護工作比較輕鬆,
如Webmaster只需要更新共享存儲中的頁面,對所有的服務器都有效。
分佈式文件系統提供良好的伸縮性和可用性,當分佈式文件系統的存儲空間增加時,所有服務器的存儲空間也隨之增大。
對於大多數Internet服務來說,它們都是讀密集型(Read-intensive)的應用,
分佈式文件系統在每臺服務器使用本地硬盤作Cache(如2Gbytes的空間),可以使得訪問分佈式文件系統本地的速度接近於訪問本地硬盤。

此外,存儲硬件技術的發展也促使從無共享的集羣向共享存儲的集羣遷移。
存儲區域網(Storage Area Networks)技術解決了集羣的每個結點可以直接連接/共享一個龐大的硬盤陣列,
硬件廠商也提供多種硬盤共享技術,如光纖通道(Fiber Channel)、共享SCSI(Shared SCSI)。
InfiniBand是一個通用的高性能I/O規範,使得存儲區域網中以更低的延時傳輸I/O消息和集羣通訊消息,並且提供很好的伸縮性。
InfiniBand得到絕大多數的大廠商的支持,如Compaq、Dell、Hewlett-Packard、IBM、Intel、Microsoft和SUN Microsystems等,
它正在成爲一個業界的標準。這些技術的發展使得共享存儲變得容易,規模生產也會使得成本逐步降低。

2.3. 高可用性
集羣系統的特點是它在軟硬件上都有冗餘。
系統的高可用性可以通過檢測節點或服務進程故障和正確地重置系統來實現,使得系統收到的請求能被存活的結點處理。

通常,我們在調度器上有資源監測進程來時刻監視各個服務器結點的健康狀況。
當服務器對ICMP ping不可達時或者探測她的網絡服務在指定的時間沒有響應時,
資源監測進程通知操作系統內核將該服務器從調度列表中刪除或者失效。這樣,新的服務請求就不會被調度到壞的結點。
資源監測進程能通過電子郵件或傳呼機向管理員報告故障。一旦監測進程到服務器恢復工作,通知調度器將其加入調度列表進行調度。
另外,通過系統提供的管理程序,管理員可發命令隨時可以將新機器加入服務來提高系統的處理性能,
也可以將已有的服務器切出服務,以便對服務器進行系統維護。

現在前端的調度器有可能成爲系統的單一失效點(Single Point of Failure)。
一般來說,調度器的可靠性較高,因爲調度器上運行的程序較少而且大部分程序早已經遍歷過,
但我們不能排除硬件老化、網絡線路或者人爲誤操作等主要故障。
爲了避免調度器失效而導致整個系統不能工作,我們需要設立一個從調度器作爲主調度器的備份。
兩個心跳(Heartbeat)進程[6]分別在主、從調度器上運行,它們通過串口線和UDP等心跳線來相互定時地彙報各自的健康狀況。
當從調度器不能聽得主調度器的心跳時,從調度器通過ARP欺騙(Gratuitous ARP)來接管集羣對外的Virtual IP Address,
同時接管主調度器的工作來提供負載調度服務。
當主調度器恢復時,這裏有兩種方法,
一是主調度器自動變成從調度器,
二是從調度器釋放Virtual IP Address,主調度器收回Virtual IP Address並提供負載調度服務。
這裏,多條心跳線可以使得因心跳線故障導致誤判(即從調度器認爲主調度器已經失效,其實主調度器還在正常工作)的概論降到最低。

通常,當主調度器失效時,主調度器上所有已建立連接的狀態信息將丟失,已有的連接會中斷。
客戶需要向重新連接,從調度器纔會將新連接調度到各個服務器上,這對客戶會造成一定的不便。
爲此,IPVS調度器在Linux 內核中實現一種高效狀態同步機制,將主調度器的狀態信息及時地同步到從調度器。
當從調度器接管時,絕大部分已建立的連接會持續下去。

三、可伸縮Web服務
基於LVS的Web集羣的體系結構如圖2所示:
第一層是負載調度器,一般採用IP負載均衡技術,可以使得整個系統有較高的吞吐率;
第二層是Web服務器池,在每個結點上可以分別運行HTTP服務或HTTPS服務、或者兩者都運行;
第三層是共享存儲,它可以是數據庫,可以是網絡文件系統或分佈式文件系統,或者是三者的混合。
集羣中各結點是通過高速網絡相連接的。
圖2:基於LVS的Web集羣

對於動態頁面(如PHP、JSP和ASP等),需要訪問的動態數據一般存儲在數據庫服務器中。
數據庫服務運行在獨立的服務器上,爲所有Web服務器共享。
無論同一Web服務器上多個動態頁面訪問同一數據,還是不同Web服務器上多個動態頁面訪問同一數據,
數據庫服務器有鎖機制使得這些訪問有序地進行,從而保證數據的一致性。

對於靜態的頁面和文件(如HTML文檔和圖片等),可以存儲在網絡文件系統或者分佈式文件系統中。
至於選擇哪一種,看系統的規模和需求而定。通過共享的網絡文件系統或者分佈式文件系統,
Webmaster可以看到統一的文檔存儲空間,維護和更新頁面比較方便,對共享存儲中頁面的修改對所有的服務器都有效。

在這種結構下,當所有服務器結點超載時,管理員可以很快地加入新的服務器結點來處理請求,
而無需將Web文檔等複製到結點的本地硬盤上。
有些Web服務可能用到HTTP Cookie,它是將數據存儲在客戶的瀏覽器來追蹤和標識客戶的機制。
使用HTTP Cookie後,來同一客戶的不同連接存在相關性,這些連接必須被髮送到同一Web服務器。
一些Web服務使用安全的HTTPS協議,它是HTTP協議加SSL(Secure Socket Layer)協議。
另有些Web服務可能使用安全的HTTPS協議,它是HTTP協議加SSL協議。
當客戶訪問HTTPS服務(HTTPS的缺省端口爲443)時,會先建立一個SSL連接,來交換對稱公鑰加密的證書並協商一個SSL Key,
來加密以後的會話。在SSL Key的生命週期內,後續的所有HTTPS連接都使用這個SSL Key,
所以同一客戶的不同HTTPS連接也存在相關性。針對這些需要,IPVS調度器提供了持久服務的功能,
它可以使得在設定的時間內,來自同一IP地址的不同連接會被髮送到集羣中同一個服務器結點,可以很好地解決客戶連接的相關性問題。

四、可伸縮媒體服務
基於LVS的媒體集羣的體系結構如圖3所示:
第一層是負載調度器,一般採用IP負載均衡技術,可以使得整個系統有較高的吞吐率;
第二層是Web服務器池,在每個結點上可以運行相應的媒體服務;
第三層是共享存儲,通過網絡文件系統/分佈式文件系統存儲媒體節目。集羣中各結點是通過高速網絡相連接。
圖3:基於LVS的媒體集羣

基於LVS的媒體集羣

IPVS負載調度器一般使用直接路由方法(即VS/DR方法,將在以後文章中詳細敘述),來架構媒體集羣系統。
調度器將媒體服務請求較均衡地分發到各個服務器上,而媒體服務器將響應數據直接返回給客戶,
這樣可以使得整個媒體集羣系統具有很好的伸縮性。

媒體服務器可以運行各種媒體服務軟件。
目前,LVS集羣對於Real Media、Windows Media和Apple Quicktime媒體服務都有很好的支持,都有真實的系統在運行。
一般來說,流媒體服務都會使用一個TCP連接(如RTSP協議:Real-Time Streaming Protocol)進行帶寬的協商和流速的控制,
通過UDP將流數據返回客戶。
這裏,IPVS調度器提供功能將TCP和UDP集中考慮,保證來自同一客戶的媒體TCP和UDP連接會被轉發到集羣中同一臺媒體服務器,
使得媒體服務準確無誤地進行。

共享存儲是媒體集羣系統中最關鍵的問題,因爲媒體文件往往非常大(一部片子需要幾百兆到幾千兆的存儲空間),
這對存儲的容量和讀的速度有較高的要求。對於規模較小的媒體集羣系統,例如有3至6個媒體服務器結點,
存儲系統可以考慮用帶千兆網卡的Linux服務器,使用軟件RAID和日誌型文件系統,再運行內核的NFS服務,會有不錯的效果。

對於規模較大的媒體集羣系統,最好選擇對文件分段(File Stripping)存儲和文件緩存有較好支持的分佈式文件系統;
媒體文件分段存儲在分佈式文件系統的多個存儲結點上,可以提高文件系統的性能和存儲結點間的負載均衡;
媒體文件在媒體服務器上自動地被緩存,可提高文件的訪問速度。否則,可以考慮自己在媒體服務器上開發相應的工具,
如緩存工具能定時地統計出最近的熱點媒體文件,將熱點文件複製到本地硬盤上,並替換緩存中的非熱點文件,
最後通知其他媒體服務器結點它所緩存的媒體文件以及負載情況;
在媒體服務器上有應用層調度工具,它收到客戶的媒體服務請求,若所請求的媒體文件緩存在本地硬盤上,
則直接轉給本地媒體服務進程服務,否則先考慮該文件是否被其他媒體服務器緩存;
如該文件被其他服務器緩存並且該服務器不忙,則將請求轉給該服務器上的媒體服務進程處理,
否則直接轉給本地媒體服務進程,從後端的共享存儲中讀出媒體文件。

共享存儲的好處是媒體文件的管理人員看到統一的存儲空間,使得媒體文件維護工作比較方便。
當客戶訪問不斷增加使得整個系統超載時,管理員可以很快地加入新的媒體服務器結點來處理請求。

Real公司以其高壓縮比的音頻視頻格式、Real媒體服務器和媒體播放器RealPlayer而聞名。
Real公司正在使用以上結構將由20多臺服務器組成的LVS可伸縮Web和媒體集羣,爲其全球用戶提供Web和音頻視頻服務。
Real公司的高級技術主管聲稱LVS擊敗所有他們嘗試過的商品化負載均衡產品[7]。

五、可伸縮Cache服務
有效的網絡Cache系統可以大大地減少網絡流量、降低響應延時以及服務器的負載。
但是,若Cache服務器超載而不能及時地處理請求,反而會增加響應延時。
所以,Cache服務的可伸縮性很重要,當系統負載不斷增長時,整個系統能被擴展來提高Cache服務的處理能力。
尤其,在主幹網上的Cache服務可能需要幾個Gbps的吞吐率,
單臺服務器(例如SUN目前最高端的Enterprise 10000服務器)遠不能達到這個吞吐率。
可見,通過PC服務器集羣實現可伸縮Cache服務是很有效的方法,也是性能價格比最高的方法。

基於LVS的Cache集羣的體系結構如圖4所示:
第一層是負載調度器,一般採用IP負載均衡技術,可以使得整個系統有較高的吞吐率;
第二層是Cache服務器池,一般Cache服務器放置在接近主幹Internet連接處,它們可以分佈在不同的網絡中。
調度器可以有多個,放在離客戶接近的地方。
圖4:基於LVS的Cache集羣

基於LVS的Cache集羣

IPVS負載調度器一般使用IP隧道方法(即VS/TUN方法,將在以後文章中詳細敘述),來架構Cache集羣系統,
因爲Cache服務器可能被放置不同的地方(例如在接近主幹Internet連接處),而調度器與Cache服務器池可能不在同一個物理網絡中。
採用VS/TUN方法,調度器只調度Web Cache請求,而Cache服務器將響應數據直接返回給客戶。
在請求對象不能在本地命中的情況下,Cache服務器要向源服務器發請求,將結果取回,最後將結果返回給客戶;
若採用NAT技術的商品化調度器,需要四次進出調度器,完成這個請求。
而用VS/TUN方法(或者VS/DR方法),調度器只調度一次請求,其他三次都由Cache服務器直接訪問Internet完成。
所以,這種方法對Cache集羣系統特別有效。

Cache服務器採用本地硬盤來存儲可緩存的對象,因爲存儲可緩存的對象是寫操作,且佔有一定的比例,
通過本地硬盤可以提高I/O的訪問速度。Cache服務器間有專用的多播通道(Multicast Channel),
通過ICP協議(Internet Cache Protocol)來交互信息。當一臺Cache服務器在本地硬盤中未命中當前請求時,
它可以通過ICP查詢其他Cache服務器是否有請求對象的副本,若存在,則從鄰近的Cache服務器取該對象的副本,
這樣可以進一步提高Cache服務的命中率。

爲150多所大學和地區服務的英國國家JANET Web Cache網在1999年11月用以上LVS結構實現可伸縮的Cache集羣[8],
只用了原有50多臺相互獨立Cache服務器的一半,用戶反映網絡速度跟夏天一樣快(學生放暑假)。
可見,通過負載調度可以摸平單臺服務器訪問的毛刺(Burst),提高整個系統的資源利用率。

六、可伸縮郵件服務
隨着Internet用戶不斷增長,很多ISP面臨他們郵件服務器超載的問題。當郵件服務器不能容納更多的用戶帳號時,
有些ISP買更高檔的服務器來代替原有的,將原有服務器的信息(如用戶郵件)遷移到新服務器是很繁瑣的工作,
會造成服務的中斷;有些ISP設置新的服務器和新的郵件域名,新的郵件用戶放置在新的服務器上,
如上海電信現在用不同的郵件服務器public1.sta.net.cn、public2.sta.net.cn到public9.sta.net.cn放置用戶的郵件帳號,
這樣靜態地將用戶分割到不同的服務器上,會造成郵件服務器負載不平衡,系統的資源利用率低,對用戶來說郵件的地址比較難記。
圖5:基於LVS的可伸縮郵件集羣

基於LVS的可伸縮郵件集羣

可以利用LVS框架實現高可伸縮、高可用的郵件服務系統。
它的體系結構如圖5所示:
在前端是一個採用IP負載均衡技術的負載調度器;
第二層是服務器池,有LDAP(Light-weight Directory Access Protocol)服務器和一組郵件服務器。
第三層是數據存儲,通過分佈式文件系統來存儲用戶的郵件。集羣中各結點是通過高速網絡相連接。

用戶的信息如用戶名、口令、主目錄和郵件容量限額等存儲在LDAP服務器中,可以通過HTTPS讓管理員進行用戶管理。
在各個郵件服務器上運行SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)、
IMAP4(Internet Message Access Protocol version 4)和HTTP/HTTPS服務。SMTP接受和轉發用戶的郵件,
SMTP服務進程查詢LDAP服務器獲得用戶信息,再存儲郵件。POP3和IMAP4通過LDAP服務器獲得用戶信息,口令驗證後,
處理用戶的郵件訪問請求。這裏,需要有機制避免不同服務器上的SMTP、POP3和IMAP4服務進程對用戶郵件的讀寫衝突。
HTTP/HTTPS服務是讓用戶通過瀏覽器可以訪問郵件。

IPVS調度器將SMTP、POP3、IMAP4和HTTP/HTTPS請求流負載較均衡地分發到各郵件服務器上,
從上面各服務的處理流程來看,不管請求被髮送到哪一臺郵件服務器處理,其結果是一樣的。
這裏,將SMTP、POP3、IMAP4和HTTP/HTTPS運行在各個郵件服務器上進行集中調度,有利於提高整個系統的資源利用率。

系統中可能的瓶頸是LDAP服務器,對LDAP服務中B+樹的參數進行優化,再結合高端的服務器,可以獲得較高的性能。
若分佈式文件系統沒有多個存儲結點間的負載均衡機制,則需要相應的郵件遷移機制來避免郵件訪問的傾斜。

這樣,這個集羣系統對用戶來說就像一個高性能、高可靠的郵件服務器(例如上海電信只要用一個郵件域名public.sta.net.cn就可以)。
當郵件用戶不斷增長時,只要在集羣中增加服務器結點和存儲結點。用戶信息的集中存儲使得用戶管理變得容易,
且集羣系統有利於提高資源利用率。



小結
本文給出LVS集羣的通用體系結構,並討論了它的設計原則和相應的特點;
最後將LVS集羣應用於建立可伸縮的Web、Media、Cache和Mail網絡服務,並指出了系統架設時應注意的要點。
我們將在後續的文章中詳細解釋LVS集羣的技術、實現和應用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章