乾貨 | LVS虛擬服務器簡介

圖片描述

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

clipboard.png

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

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入門指南及建立實例。

圖片描述

圖片描述

相關文章
相關標籤/搜索