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