LVS(Linus Virtual Server):三種IP負載均衡方式比較+另三種Web負載均衡方式

我還寫了一篇:【系統架構】億級Web系統搭建(1):Web負載均衡(阿里)html

還有個姊妹篇也能夠參考這個文章:六大Web負載均衡原理與實現

什麼是LVS (Linux Virtual Server)?  

首先簡單介紹一下LVS (Linux Virtual Server)究竟是什麼東西,其實它是一種集羣(Cluster)技術,採用IP負載均衡技術和基於內容請求分發技術。調度器具備很好的吞吐率,將請求均衡地轉移到不一樣的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。 
  爲此,在設計時須要考慮系統的透明性、可伸縮性、高可用性和易管理性。通常來講,LVS集羣採用三層結構,其體系結構如圖所示: 
前端


LVS主要組成部分

  負載調度器(load balancer/ Director),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(咱們可稱之爲虛擬IP地址)上的。 
  服務器池(server pool/ Realserver),是一組真正執行客戶請求的服務器,執行的服務通常有WEB、MAIL、FTP和DNS等。 
  共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。web


LVS負載均衡方式:

 (1)NAT模式-Virtual Server via Network Address Translation NAT(VS/NAT)

  VS/NAT是一種最簡單的方式,全部的RealServer只須要將本身的網關指向Director便可。客戶端能夠是任意操做系統,但此方式下,一個Director可以帶動的RealServer比較有限。在VS/NAT的方式下,Director也能夠兼爲一臺RealServer。VS/NAT的體系結構如圖所示。 
算法

(2)TUN隧道模式-Virtual Server via IP Tunneling(VS/TUN)

  IP隧道(IP tunneling)是將一個IP報文封裝在另外一個IP報文的技術,這可使得目標爲一個IP地址的數據報文能被封裝和轉發到另外一個IP地址。IP隧道技術亦稱爲IP封裝技術(IP encapsulation)。IP隧道主要用於移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態創建的,隧道一端有一個IP地址,另外一端也有惟一的IP地址。它的鏈接調度和管理與VS/NAT中的同樣,只是它的報文轉發方法不一樣。調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,將請求報文封裝在另外一個IP報文中,再將封裝後的IP報文轉發給選出的服務器;服務器收到報文後,先將報文解封得到原來目標地址爲 VIP 的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,因此就處理這個請求,而後根據路由表將響應報文直接返回給客戶。 
後端

(3)DR直接路由模式-Virtual Server via Direct Routing(VS/DR)

 VS/DR方式是經過改寫請求報文中的MAC地址部分來實現的Director和RealServer必需在物理上有一個網卡經過不間斷的局域網相連。 RealServer上綁定的VIP配置在各自Non-ARP的網絡設備上(如lo或tunl),Director的VIP地址對外可見,而RealServer的VIP對外是不可見的。RealServer的地址便可以是內部地址,也能夠是真實地址。 
 
  VS/DR的工做流程如圖所示:它的鏈接調度和管理與VS/NAT和VS/TUN中的同樣,它的報文轉發方法又有不一樣,將報文直接路由給目標服務器。在VS/DR中,調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改成選出服務器的MAC地址,再將修改後的數據幀在與服務器組的局域網上發送。由於數據幀的MAC地址是選出的服務器,因此服務器確定能夠收到這個數據幀,從中能夠得到該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,而後根據路由表將響應報文直接返回給客戶。 
  VS/DR的方式是目前大型網站使用最普遍的一種負載均衡手段。瀏覽器


三種負載均衡方式比較

  VS/NAT 的優勢是服務器能夠運行任何支持TCP/IP的操做系統,它只須要一個IP地址配置在調度器上,服務器組能夠用私有的IP地址。缺點是它的伸縮能力有限,當服務器結點數目升到20時,調度器自己有可能成爲系統的新瓶頸,由於在VS/NAT中請求和響應報文都須要經過負載調度器。咱們在Pentium166 處理器的主機上測得重寫報文的平均延時爲60us,性能更高的處理器上延時會短一些。假設TCP報文的平均長度爲536 Bytes,則調度器的最大吞吐量爲8.93 MBytes/s. 咱們再假設每臺服務器的吞吐量爲800KBytes/s,這樣一個調度器能夠帶動10臺服務器。(注:這是很早之前測得的數據) 
  基於 VS/NAT的的集羣系統能夠適合許多服務器的性能要求。若是負載調度器成爲系統新的瓶頸,能夠有三種方法解決這個問題:混合方法、VS/TUN和 VS/DR。在DNS混合集羣系統中,有若干個VS/NAT負調度器,每一個負載調度器帶本身的服務器集羣,同時這些負載調度器又經過RR-DNS組成簡單的域名。 
  但VS/TUN和VS/DR是提升系統吞吐量的更好方法。 
  對於那些將IP地址或者端口號在報文數據中傳送的網絡服務,須要編寫相應的應用模塊來轉換報文數據中的IP地址或者端口號。這會帶來實現的工做量,同時應用模塊檢查報文的開銷會下降系統的吞吐率。 
  在VS/TUN 的集羣系統中,負載調度器只將請求調度到不一樣的後端服務器,後端服務器將應答的數據直接返回給用戶。這樣,負載調度器就能夠處理大量的請求,它甚至能夠調度百臺以上的服務器(同等規模的服務器),而它不會成爲系統的瓶頸。即便負載調度器只有100Mbps的全雙工網卡,整個系統的最大吞吐量可超過 1Gbps。因此,VS/TUN能夠極大地增長負載調度器調度的服務器數量。 
  VS/TUN調度器能夠調度上百臺服務器,而它自己不會成爲系統的瓶頸,能夠用來構建高性能的超級服務器。VS/TUN技術對服務器有要求,即全部的服務器必須支持「IP Tunneling」或者「IP Encapsulation」協議。目前,VS/TUN的後端服務器主要運行Linux操做系統,咱們沒對其餘操做系統進行測試。由於「IP Tunneling」正成爲各個操做系統的標準協議,因此VS/TUN應該會適用運行其餘操做系統的後端服務器。 
  跟VS/TUN方法同樣,VS/DR調度器只處理客戶到服務器端的鏈接,響應數據能夠直接從獨立的網絡路由返回給客戶。這能夠極大地提升LVS集羣系統的伸縮性。跟VS/TUN相比,這種方法沒有IP隧道的開銷,可是要求負載調度器與實際服務器都有一塊網卡連在同一物理網段上,服務器網絡設備(或者設備別名)不做ARP響應,或者能將報文重定向(Redirect)到本地的Socket端口上。 
  三種LVS負載均衡技術的優缺點概括如下表:緩存

指標 VS/NAT VS/TUN VS/DR
服務器操做系統 任意 支持隧道 多數(支持Non-arp)
服務器網絡 私有網絡 局域網/廣域網 局域網
服務器數目(100M網絡) 10~20 100 大於100
服務器網關 負載均衡器 本身的路由 本身的路由
效率 通常 最高

  注:以上三種方法所能支持最大服務器數目的估計是假設調度器使用100M網卡,調度器的硬件配置與後端服務器的硬件配置相同,並且是對通常Web服務。使用更高的硬件配置(如千兆網卡和更快的處理器)做爲調度器,調度器所能調度的服務器數量會相應增長。當應用不一樣時,服務器的數目也會相應地改變。因此,以上數據估計主要是爲三種方法的伸縮性進行量化比較。服務器


附:其餘Web負載均衡算法

  • HTTP重定向負載均衡 
      當用戶發來請求的時候,Web服務器經過修改HTTP響應頭中的Location標記來返回一個新的url,而後瀏覽器再繼續請求這個新url,實際上就是頁面重定向。經過重定向,來達到「負載均衡」的目標。例如,咱們在下載PHP源碼包的時候,點擊下載連接時,爲了解決不一樣國家和地域下載速度的問題,它會返回一個離咱們近的下載地址。重定向的HTTP返回碼是302。網絡

    優勢:比較簡單。 
    缺點:瀏覽器須要兩次請求服務器才能完成一次訪問,性能較差。重定向服務自身的處理能力有可能成爲瓶頸,整個集羣的伸縮性國模有限;使用HTTP302響應碼重定向,有可能使搜索引擎判斷爲SEO做弊,下降搜索排名。架構

  • DNS域名解析負載均衡 
      DNS(Domain Name System)負責域名解析的服務,域名url其實是服務器的別名,實際映射是一個IP地址,解析過程,就是DNS完成域名到IP的映射。而一個域名是能夠配置成對應多個IP的。所以,DNS也就能夠做爲負載均衡服務。 
      事實上,大型網站老是部分使用DNS域名解析,利用域名解析做爲第一級負載均衡手段,即域名解析獲得的一組服務器並非實際提供Web服務的物理服務器,而是一樣提供負載均衡服務的內部服務器,這組內部負載均衡服務器再進行負載均衡,將請求分發到真是的Web服務器上。

    優勢:將負載均衡的工做轉交給DNS,省掉了網站管理維護負載均衡服務器的麻煩,同時許多DNS還支持基於地理位置的域名解析,即會將域名解析成舉例用戶地理最近的一個服務器地址,這樣能夠加快用戶訪問速度,改善性能。 
    缺點:不能自由定義規則,並且變動被映射的IP或者機器故障時很麻煩,還存在DNS生效延遲的問題。並且DNS負載均衡的控制權在域名服務商那裏,網站沒法對其作更多改善和更強大的管理。

  • 反向代理負載均衡 
      反向代理服務能夠緩存資源以改善網站性能。實際上,在部署位置上,反向代理服務器處於Web服務器前面(這樣纔可能緩存Web相應,加速訪問),這個位置也正好是負載均衡服務器的位置,因此大多數反向代理服務器同時提供負載均衡的功能,管理一組Web服務器,將請求根據負載均衡算法轉發到不一樣的Web服務器上。Web服務器處理完成的響應也須要經過反向代理服務器返回給用戶。因爲web服務器不直接對外提供訪問,所以Web服務器不須要使用外部ip地址,而反向代理服務器則須要配置雙網卡和內部外部兩套IP地址。

    優勢:和反向代理服務器功能集成在一塊兒,部署簡單。 
    缺點:反向代理服務器是全部請求和響應的中轉站,其性能可能會成爲瓶頸。

 

參考: LVS:三種負載均衡方式比較+另三種負載均衡方式 

相關文章
相關標籤/搜索