LVS原理詳解

來源:互聯網
上載者:User

標籤:lvs   nat   dr   tun   fullnat   rr   

LVS原理詳解


LVS簡介

  Internet的快速增長使多媒體網路伺服器面對的訪問數量快速增加,伺服器需要具備提供大量並發訪問服務的能力,因此對於大負載的伺服器來講, CPU、I/O處理能力很快會成為瓶頸。由於單台伺服器的效能總是有限的,簡單的提高硬體效能並不能真正解決這個問題。為此,必須採用多伺服器和負載平衡技術才能滿足大量並發訪問的需要。Linux 虛擬伺服器(Linux Virtual Servers,LVS) 使用負載平衡技術將多台伺服器組成一個虛擬伺服器。它為適應快速增長的網路訪問需求提供了一個負載能力易於擴充,而價格低廉的解決方案。

LVS結構與工作原理一.LVS的結構

  LVS由前端的負載平衡器(Load Balancer,LB)和後端的真實伺服器(Real Server,RS)群組成。RS間可通過區域網路或廣域網路串連。LVS的這種結構對使用者是透明的,使用者只能看見一台作為LB的虛擬伺服器(Virtual Server),而看不到提供服務的RS群。當使用者的請求發往虛擬伺服器,LB根據設定的包轉寄策略和負載平衡調度演算法將使用者請求轉寄給RS。RS再將使用者請求結果返回給使用者。
  

二.LVS核心模型

650) this.width=650;" src="http://www.178linux.com/wp-content/plugins/ueditor/ueditor/themes/default/images/spacer.gif" alt="Alt text" longdesc="http://www.178linux.com/lvs-kernel.jpg" style="height:auto;vertical-align:middle;border:0px;" />650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20160327/1459080857959729.jpg" title="1459080857959729.jpg" alt="lvs-kernel.jpg" style="height:auto;vertical-align:middle;border:0px;" />

1.當用戶端的請求到達負載平衡器的核心空間時,首先會到達PREROUTING鏈。

2.當核心發現請求資料包的目的地址是本機時,將資料包送往INPUT鏈。

3.LVS由使用者空間的ipvsadm和核心空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當資料包到達INPUT鏈時,首先會被IPVS檢查,如果資料包裡面的目的地址及連接埠沒有在規則裡面,那麼這條資料包將被允許存取至使用者空間。

4.如果資料包裡面的目的地址及連接埠在規則裡面,那麼這條資料報文將被修改目的地址為事先定義好的後端伺服器,並送往POSTROUTING鏈。

5.最後經由POSTROUTING鏈發往後端伺服器。

三.LVS的包轉寄模型1.NAT模型:

650) this.width=650;" src="http://www.178linux.com/wp-content/plugins/ueditor/ueditor/themes/default/images/spacer.gif" alt="Alt text" longdesc="http://www.178linux.com/lvs-nat.jpg" style="height:auto;vertical-align:middle;border:0px;" />650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20160327/1459080766382866.jpg" title="1459080766382866.jpg" alt="lvs-nat.jpg" style="height:auto;vertical-align:middle;border:0px;" />

①.用戶端將請求發往前端的負載平衡器,請求報文源地址是CIP(用戶端IP),後面統稱為CIP),目標地址為VIP(負載平衡器前端地址,後面統稱為VIP)。

②.負載平衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將用戶端請求報文的目標地址改為了後端伺服器的RIP地址並將報文根據演算法發送出去。

③.報文送到Real Server後,由於報文的目標地址是自己,所以會響應該請求,並將響應報文返還給LVS。

④.然後lvs將此報文的源地址修改為本機並發送給用戶端。注意:在NAT模式中,Real Server的網關必須指向LVS,否則報文無法傳遞的用戶端

2.DR模型:

650) this.width=650;" src="http://www.178linux.com/wp-content/plugins/ueditor/ueditor/themes/default/images/spacer.gif" alt="Alt text" longdesc="http://www.178linux.com/lvs-dr.jpg" style="height:auto;vertical-align:middle;border:0px;" />650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20160327/1459080772348620.jpg" title="1459080772348620.jpg" alt="lvs-dr.jpg" style="height:auto;vertical-align:middle;border:0px;" />

①.用戶端將請求發往前端的負載平衡器,請求報文源地址是CIP,目標地址為VIP。

②.負載平衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將用戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,並將此包發送給RS。

③.RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文後,將響應報文通過lo介面送給eth0網卡直接發送給用戶端。注意:需要設定lo介面的VIP不能響應本網內的arp請求

3.TUN模型:

650) this.width=650;" src="http://www.178linux.com/wp-content/plugins/ueditor/ueditor/themes/default/images/spacer.gif" alt="Alt text" longdesc="http://www.178linux.com/lvs-tun.jpg" style="height:auto;vertical-align:middle;border:0px;" />650) this.width=650;" src="http://www.178linux.com/ueditor/php/upload/image/20160327/1459080780521075.jpg" title="1459080780521075.jpg" alt="lvs-tun.jpg" style="height:auto;vertical-align:middle;border:0px;" />

①.用戶端將請求發往前端的負載平衡器,請求報文源地址是CIP,目標地址為VIP。

②.負載平衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將在用戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。

③.RS收到請求報文後,會首先拆開第一層封裝,然後發現裡面還有一層IP首部的目標地址是自己lo介面上的VIP,所以會處理次請求報文,並將響應報文通過lo介面送給eth0網卡直接發送給用戶端。注意:需要設定lo介面的VIP不能在共網上出現

四.LVS的調度演算法LVS的調度演算法分為靜態與動態兩類。1.靜態演算法(4種):只根據演算法進行調度 而不考慮後端伺服器的實際串連情況和負載情況

①.RR:輪叫調度(Round Robin)
  調度器通過”輪叫”調度演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的串連數和系統負載

②.WRR:加權輪叫(Weight RR)
  調度器通過“加權輪叫”調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的伺服器處理更多的訪問流量。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。

③.DH:目標地址散列調度(Destination Hash )
  根據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。

④.SH:源地址 hash(Source Hash)
  源地址散列”調度演算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空

2.動態演算法(6種):前端的調度器會根據後端真實伺服器的實際串連情況來分配請求

①.LC:最少連結(Least Connections)
  調度器通過”最少串連”調度演算法動態地將網路請求調度到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統效能,採用”最小串連”調度演算法可以較好地均衡負載。

②.WLC:加權最少串連(預設採用的就是這種)(Weighted Least Connections)
  在叢集系統中的伺服器效能差異較大的情況下,調度器採用“加權最少連結”調度演算法最佳化負載平衡效能,具有較高權值的伺服器將承受較大比例的活動串連負載調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。

③.SED:最短延遲調度(Shortest Expected Delay )
  在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非使用中,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動串連過多缺陷:當許可權過大的時候,會倒置空閑伺服器一直處於無串連狀態。

④.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)
  無需隊列。如果有台 realserver的串連數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動串連,才用NQ,SED要考慮活動狀態串連,對於DNS的UDP不需要考慮非活動串連,而httpd的處於保持狀態的服務就需要考慮非活動串連給伺服器的壓力。

⑤.LBLC:基於局部性的最少連結(locality-Based Least Connections)
  基於局部性的最少連結”調度演算法是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用“最少連結”的原則選出一個可用的伺服器,將請求發送到該伺服器

⑥. LBLCR:帶複製的基於局部性最少串連(Locality-Based Least Connections with Replication)
  帶複製的基於局部性最少連結”調度演算法也是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統它與LBLC演算法的不同之處是它要維護從一個目標IP地址到一組伺服器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按”最小串連”原則從伺服器組中選出一台伺服器,若伺服器沒有超載,將請求發送到該伺服器;若伺服器超載,則按“最小串連”原則從這個叢集中選出一台伺服器,將該伺服器加入到伺服器組中,將請求發送到該伺服器同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。


本文出自 “地球有危險” 部落格,請務必保留此出處http://779834367.blog.51cto.com/7182184/1762248

LVS原理詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.