乾貨 | LVS虛擬服務器簡介

圖片描述

LVS即Linux Virtual Server,虛擬服務器是一個可高擴展且高可用的服務器,構建在真實服務器集羣上。服務器羣集的體系結構對最終用戶完全透明,用戶與羣集系統進行交互,就好像它只是一個高性能的虛擬服務器一樣。請參考下圖:

clipboard.png

真實服務器和負載均衡器可以通過高速LAN(局域網)或地理上分散的WAN(廣域網)互連。負載均衡器可以將請求分配給後端不同的服務器,而對外則只顯示爲單個IP的虛擬服務。分配的工作方式可以使用IP負載均衡技術或應用級負載均衡技術。通過透明地添加或刪除集羣中的節點來實現系統的可伸縮性。通過檢測節點或守護程序故障並適當地重新配置系統來提供高可用性。

Linux Virtual Server Project的基本目標是:使用集羣技術爲Linux構建高性能,高可用性的服務器,提供良好的可擴展性,可靠性和可維護性。

爲什麼需要LVS?

隨着互聯網的爆炸性增長及其在我們生活中日益重要的作用,互聯網上的流量急劇增加。服務器上的工作負載也隨之迅速增加,因此服務器很容易在短時間內過載,尤其是對於一些受歡迎的網站。爲了克服服務器的過載問題,有兩種解決方案:一種是單服務器解決方案,即將服務器升級到性能更高的服務器,但是當請求增加時它很快就會過載,因此我們必須再次升級,升級過程複雜且成本高;另一種是多服務器解決方案,即在服務器集羣上構建可擴展的網絡服務系統。當負載增加時,我們可以簡單地將新服務器或更多服務器添加到集羣中以滿足不斷增長的請求。因此,爲網絡服務構建服務器集羣系統更具可擴展性和成本效益。

有幾種方法可以構建服務器集羣:

A. 基於DNS的負載均衡集羣

DNS負載平衡可能是構建網絡服務集羣的最簡單方法。它使用域名系統通過將域名解析爲服務器的不同IP地址來將請求分發到不同的服務器。當DNS請求到達DNS服務器以解析域名時,DNS服務器根據調度策略(例如以循環方式)發出一個服務器IP地址,然後使用相同的本地緩存名稱服務器從客戶端發出後續請求在指定的名稱解析生存時間(TTL)中發送到同一服務器。

但是,由於客戶端和分層DNS系統,很容易導致服務器之間的動態負載不平衡,因此服務器不容易處理其峯值負載。在DNS服務器上無法很好地選擇名稱映射的TTL值,TTL值很小的話,會導致DNS流量很高,DNS服務器將成爲瓶頸。而如果TTL值過高,則動態負載不平衡將變得更糟。即使TTL值設置爲零,調度粒度是每個主機,不同用戶的訪問模式可能會導致動態負載不平衡,因爲有些人可能從網站上拉大量頁面,而其他人可能只是瀏覽幾頁而已。

B. 基於調度程序的負載均衡集羣

Dispatcher,也稱爲負載均衡器,可用於在羣集中的服務器之間分配負載,以便服務器的並行服務可以在單個IP地址上顯示爲虛擬服務,並且最終用戶可以像單個服務器一樣進行交互而不知道集羣中的所有服務器。與基於DNS的負載平衡相比,調度程序可以以精細的粒度(例如每個連接)調度請求,以便在服務器之間實現更好的負載平衡。當一臺或多臺服務器發生故障時,可以屏蔽故障。服務器管理變得越來越容易,管理員可以隨時使用服務器或更多服務器,而且不會中斷最終用戶的服務。

負載均衡可以在兩個級別完成,即應用級和IP級。例如,Reverse-proxy和pWEB是用於構建可伸縮Web服務器的應用程序級負載平衡方法。他們將HTTP請求轉發到羣集中的不同Web服務器,獲取結果,然後將其返回給客戶端。由於在應用程序級別處理HTTP請求和回覆的開銷很高,當服務器節點數量增加到5或更多時,應用程序級負載均衡器將成爲新的瓶頸。

LVS工作方式

現在虛擬服務器以三種方式實現。Linux Director中共有三種IP負載均衡技術(數據包轉發方法)。它們是通過NAT的虛擬服務器,通過IP隧道的虛擬服務器和通過直接路由的虛擬服務器。即NAT/DR/IP Tunneling。

以下小節將解釋它們的優缺點。VS/NAT,VS/TUN 和 VS/DR的比較總結在下表中:

clipboard.png

A. NAT

通過NAT的虛擬服務器的優點是真實服務器可以運行任何支持TCP / IP協議的操作系統,真實服務器可以使用私有Internet地址,並且負載均衡器只需要1個IP地址。

缺點是通過NAT的虛擬服務器的可擴展性是有限的。當服務器節點的數量增加到大約20或更多時,負載平衡器可能是整個系統的瓶頸,因爲請求包和響應包都需要由負載平衡器重寫。假設TCP數據包的平均長度爲536字節,重寫數據包的平均延遲約爲60us(在奔騰處理器上,使用更高的處理器可以減少一點),負載均衡器的最大吞吐量爲8.93 MB /秒。假設真實服務器的平均吞吐量爲400Kbytes / s,負載均衡器可以調度22個真實服務器。

B. IP Tunneling

在通過NAT的虛擬服務器中,請求和響應數據包都需要通過負載均衡器,當服務器節點數量增加到20個或更多時,負載均衡器可能成爲新的瓶頸,因爲網絡接口的吞吐量最終有限。從許多Internet服務(例如Web服務)可以看出,請求數據包通常很短,而響應數據包通常包含大量數據。

在通過IP隧道的虛擬服務器中,負載均衡器僅調度對不同真實服務器的請求,而真實服務器直接向用戶返回回覆。因此,負載均衡器可以處理大量請求,它可以調度超過100個真實服務器,並且它不會成爲系統的瓶頸。因此,使用IP隧道將大大增加負載均衡器的最大服務器節點數。即使負載均衡器只有100Mbps全雙工網絡適配器,虛擬服務器的最大吞吐量也可以達到1Gbps以上。

IP隧道功能可用於構建高性能的虛擬服務器。構建虛擬代理服務器非常好,因爲當代理服務器獲得請求時,它可以直接訪問Internet以獲取對象並將它們直接返回給用戶。

C. Direct Routing

與通過隧道方法在虛擬服務器中一樣,DR模式僅通過直接路由處理虛擬服務器中的客戶端到服務器的流量,而由後端的真實服務器直接相應數據包併發送到客戶端。這可以大大提高虛擬服務器的可擴展性。

與通過IP隧道方法的虛擬服務器相比,這種方法沒有隧道開銷,但要求負載均衡器的接口和真實服務器的接口必須在同一網段。

LVS的架構

對於整個系統的可擴展性,可用性和可管理性,我們通常採用下圖所示的LVS集羣中的三層架構。

clipboard.png

三層結構包括:

Load Balancer
它是整個集羣系統的前端機器,並在一組服務器之間平衡來自客戶端的請求,以便客戶端認爲所有服務都來自單個IP地址。

服務器羣集
它是一組運行實際網絡服務的服務器,例如Web,郵件,FTP,DNS和媒體服務。

共享存儲
爲服務器提供共享存儲空間,以便服務器可以輕鬆擁有相同的內容並提供相同的服務。

負載均衡器是服務器集羣系統的單一入口點,它可以運行在Linux內核中實現IP負載平衡技術的IPVS,或在Linux內核中實現應用程序級負載平衡的KTCPVS。當使用IPVS時,所有服務器都需要提供相同的服務和內容,負載均衡器根據指定的調度算法和每個服務器的負載將新的客戶端請求轉發給服務器。無論選擇哪個服務器,客戶端都應該得到相同的結果。當使用KTCPVS時,服務器可以具有不同的內容,負載均衡器可以根據請求的內容將請求轉發到不同的服務器。由於KTCPVS是在Linux內核中實現的,因此中繼數據的開銷很小,因此它可以具有高吞吐量。

可以根據系統接收的負載更改服務器集羣的節點數目。當集羣中所有服務器都過載時,可以添加更多新服務器來處理不斷增加的工作負載。對於大多數Internet服務(如Web),請求可以在不同的服務器上並行運行。因此,隨着服務器集羣的節點數量的增加,整體的性能幾乎可以線性擴展。

共享存儲可以是數據庫系統,網絡文件系統或分佈式文件系統。服務器節點需要動態更新的數據應該存儲在基於數據的系統中,當服務器節點並行地讀取或寫入數據庫系統中的數據時,數據庫系統可以保證併發數據訪問的一致性。靜態數據通常保存在網絡文件系統(如NFS和CIFS)中,以便所有服務器節點可以共享數據。但是,單個網絡文件系統的可擴展性是有限的,例如,單個NFS / CIFS只能支持從4到8個服務器的數據訪問。對於大規模集羣系統,分佈式/集羣文件系統可以用於共享存儲,例如GPFS,Coda和GFS,然後共享存儲也可以根據系統要求進行擴展。

負載均衡器,服務器集羣和共享存儲通常由高速網絡連接,如100Mbps以太網和千兆以太網,這樣網絡在系統成長時不會成爲系統的瓶頸。

LVS高可用

隨着越來越多的任務關鍵型應用程序在Internet上運行,提供高可用性服務變得越來越重要。集羣系統的一個優點是它具有硬件和軟件冗餘,因爲集羣系統由許多獨立節點組成,每個節點運行一個操作系統和應用軟件的副本。通過檢測節點或守護程序故障並適當地重新配置系統,可以實現高可用性,從而可以由集羣中的其餘節點接管工作負載。

事實上,高可用性是一個很大的領域。高級的高可用系統可以具有可靠的通信子系統,成員管理子系統,併發控制子系統等,需要比較多的學習成本。但是,我們現在可以使用一些現有的軟件包來構建高度可用的LVS集羣系統。

通常,在負載均衡器上運行服務監視器守護程序以定期檢查服務器運行狀況,如下圖所示。如果在指定時間內服務器訪問請求或ICMP ECHO_REQUEST沒有響應,服務監視器將認爲服務器已經掛掉,並將其從負載均衡器的可用服務器列表中刪除,因此不會向這個掛掉的服務器再轉發請求。當服務監視器檢測掛掉的服務器恢復工作時,服務監視器將服務器添加回可用服務器列表。因此,負載均衡器可以自動掩蓋服務守護進程或服務器的故障。此外,管理員還可以使用系統工具添加新服務器以提高系統吞吐量或刪除服務器以進行系統維護,而無需關閉整個系統服務。

clipboard.png

現在負載均衡器可能成爲整個系統的單一故障點。爲了防止整個系統因負載均衡器故障而停止運行,我們需要設置負載均衡器的備份(或多個備份)。兩個心跳守護程序分別在主服務器和備份服務器上運行,它們通過定期檢測到“我還活着”這樣的消息。當備份的心跳守護進程在指定時間內無法聽到來自主服務器的心跳消息時,它將接管虛擬IP地址以提供負載均衡服務。當失敗的負載均衡器恢復工作時,有兩種解決方案,一種是自動成爲備份負載均衡器,另一種是主動負載均衡器釋放VIP地址,並且恢復一次接管VIP地址併成爲主要負載均衡器。

主負載均衡器具有連接狀態,即連接轉發到哪個服務器。如果備份負載均衡器在沒有這些連接信息的情況下接管,則客戶端必須再次將其請求發送到訪問服務。爲了使負載均衡器故障轉移對客戶端應用程序透明,我們在IPVS中實現連接同步,主IPVS負載均衡器通過UDP多播將連接信息同步到備份負載均衡器。當備份負載均衡器在主要負載均衡器發生故障後接管時,備份負載均衡器將具有大多數連接狀態,因此幾乎所有連接都可以通過備份負載均衡器繼續訪問服務。


點擊"產品文檔"瞭解Linux入門指南及創建實例。

圖片描述

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章