Linux伺服器集群系統(二)
章文嵩 ([email protected])
2002 年 4 月
本文主要介紹了LVS叢集的體系結構。先給出LVS叢集的通用體系結構,並討論了其的設計原則和相應的特點;最後將LVS叢集應用於建立可伸縮的Web、Media、Cache和Mail等網路服務。
1.引言
在過去的十幾年中,Internet從幾個研究機構相連為資訊共享的網路發展成為擁有大量應用和服務的全球性網路,它正成為人們生活中不可缺少的 一部分。雖然Internet發展速度很快,但建設和維護大型網路服務依然是一項挑戰性的任務,因為系統必須是高效能的、高可靠的,尤其當訪問負載不斷增 長時,系統必須能被擴充套件來滿足不斷增長的效能需求。由於缺少建立可伸縮網路服務的框架和設計方法,這意味著只有擁有非常出色工程和管理人才的機構才能建立 和維護大型的網路服務。
針對這種情形,本文先給出LVS叢集的通用體系結構,並討論了其的設計原則和相應的特點;最後將LVS叢集應用於建立可伸縮的Web、Media、Cache和Mail等網路服務。
2.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 核心中實現一種高效狀態同步機制,將主排程器的狀態資訊及時地同步到從排程器。當從排程器接管時,絕大部分已建立的連線會持續下去。
基於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的媒體叢集
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服務可能需要幾個Gbps的吞吐率,單臺伺服器(例如SUN目前最高階的Enterprise 10000伺服器)遠不能達到這個吞吐率。可見,通過PC伺服器叢集實現可伸縮Cache服務是很有效的方法,也是效能價格比最高的方法。
基於LVS的Cache叢集的體系結構如圖4所示:第一層是負載排程器,一般採用IP負載均衡技術,可以使得整個系統有較高的吞吐率; 第二層是Cache伺服器池,一般Cache伺服器放置在接近主幹Internet連線處,它們可以分佈在不同的網路中。排程器可以有多個,放在離客戶接 近的地方。
圖4:基於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框架實現高可伸縮、高可用的郵件服務系統。它的體系結構如圖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叢集的技術、實現和應用。
- J.H. Howard. An Overview of the Andrew File System. In Proceedings of the USENIX Winter Technical Conference, Dallas, TX, USA, February 1998.
- Kenneth W. Preslan, Andrew P. Barry, Jonathan E. Brassow, Grant M. Erickson, Erling Nygaard, Christopher J. Sabol, Steven R. Soltis, David C. Teigland, and Matthew T. O'Keefe. A 64-bit, Shared Disk File System for Linux. In Proceeding of 16th IEEE Mass Storage Systems Symposium, San Diego, CA, USA. March 15-18, 1999.
- Global File System Website. http://www.globalfilesystem.org.
- Coda File System Website. http://www.coda.cs.cmu.edu.
- InterMezzo File System Website. http://www.inter-mezzo.org.
- Alan Robertson, et al. Linux High Availability Project. http://www.linux-ha.org.
- Jerry Glomph Black. LVS testimonials from Real Networks. March 2000. http://marc.theaimsgroup.com/?l=linux-virtual-server&m=95385809030794&w=2
- Michael Sparks. Load Balancing the UK National JANET Web Cache Service Using Linux Virtual Servers. November 1999. http://wwwcache.ja.net/JanetService/PilotService.html.
章文嵩,開放原始碼及 Linux核心的開發者,著名的Linux叢集專案--LVS(Linux Virtual Server)的創始人和主要開發人員。他目前工作於國家並行與分散式處理重點實驗室,主要從事叢集技術、作業系統、物件儲存與資料庫的研究。他一直在自 由軟體的開發上花費大量時間,並以此為樂。