LVS基本原理

LVS基本原理

簡介

負載調度器、真實服務器羣節點一起被稱爲LVS。LVS負載調度器(有時也稱爲負載平衡器),接收所服務的所有接入服務集羣的請求,並決定集羣中的哪個節點應該回復其請求。

1)負載調度器(Director):作爲整個集羣的前端,主要將用戶請求分發至真實服務器中進行處理。

2)真實服務器池:由多個功能相同的真實服務器組成,爲用戶提供真正的網絡服務,如Web服務、郵件服務等。且虛擬服務器集羣作爲一個可伸縮的集羣,可自由添加或刪除真實服務器而並不影響整個集羣的正常工作。

3)共享存儲:作用就是讓每一個用戶訪問的資源都是一樣的。服務器支持寫操作,才建議使用。

一、LVS集羣架構

 

用戶(CIP,源IP)通過層層路由的Internet網絡與負載均衡器(VIP,服務客戶端的IP)聯繫,負載均衡器通過(DIP,與後端通信的IP)經過交換機(局域網)或路由器(Internet)連接。

在數據的傳遞過程中,發向真實服務器的入站數據先到達VIP,經過負載均衡器及到達DIP,最後到達真實服務器的RIP。

二、LVS在內核中的過程

 

 

1、當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間

2、PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈

3、IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集羣服務進行比對,如果用戶請求的就是定義的集羣服務,那麼此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈

4、POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麼此時通過選路,將數據包最終發送給後端的服務器

三、lvs的組成

lvs有兩段代碼組成,ipvsadm和ipvs

ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。

ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)。

四、lvs集羣的類型

在LVS集羣中,集羣作爲一個整體,通常使用負載均衡器(Director)作爲 與外部通訊的中介,因此把如何將數據從外部請求經由負載均衡器轉發至內部真實服務器的方式作爲對LVS集羣分類的依據。目前LVS數據轉發主要有三種方式:網絡地址轉換(LVS-NAT),直接路由(LVS-DR)和IP隧道(LVS-TUN)。即使在一個負載均衡器上可以實現多種轉發方法,一般在實際的使用中我們只選擇其中一種轉發方式。

在實除的集羣部署中,我們發現與LVS配合使用的最佳的轉發方法是LVS-DR,而其中最容易構建的方式是LVS-NAT。然而一般情況下,在使用LVS集羣處理關鍵的數據轉發時,我們不會用到LVS-TUN,因爲LVS-TUN的轉發方法允許真實服務器和負載均衡器在不同的物理網段中,這使得只要斷開了負載均衡器和真實服務器之間的連接,客戶端計算機發出的請求兢會丟失,從而增加整個集羣發生崩潰的可能性。

1)直接路由(LVS-DR)

 

 

①、當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。

②、PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

③、IPVS比對數據包請求的服務是否爲集羣服務,若是則將請求報文中的源MAC地址[CIP]修改爲DIP的MAC地址,將目標MAC地址[VIP]修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈[LVS]。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址

④、由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址[ARP廣播],那麼此時數據包將會發至Real Server。

⑤、RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過自己的lo接口傳送給eth0網卡然後向外發出[ARP廣播]

     此時的源IP地址爲VIP,目標IP爲CIP.         

     注意:如果沒有給RS設置外網IP,RS將ARP廣播查找CIP,內網沒有就提交給網關,網關直接外網發送出去,會有可能提高網關壓力

 

⑥、響應報文最終送達至客戶端

 

特點:多了一個mac地址,作用是讓rs可以找到客戶端,直接發送響應報文,並且整個過程的客戶端ip(cip)和負載均衡器的ip都沒有改變,只是mac地址變了,目的是讓客戶知道,你發送請求的報文,和響應你報文的是一個人。

2)網絡地址轉換(LVS-NAT)

①、當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。

②、PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

③、IPVS比對數據包請求的服務是否爲集羣服務,若是,修改數據包的目標IP地址爲後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP ④、POSTROUTING鏈通過選路,將數據包發送給Real Server

⑤、Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP

⑥、Director Server在響應客戶端前,此時會將源IP地址修改爲自己的VIP地址,然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP

3)IP隧道(LVS-TUN)

 

①、當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。

②、PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

③、IPVS比對數據包請求的服務是否爲集羣服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP爲爲DIP,目標IP爲RIP。然後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP ④、POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因爲在外層封裝多了一層IP首部,所以可以理解爲此時通過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP

⑤、RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,而且目標是自己的lo接口VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP

⑥、響應報文最終送達至客戶端

三種類型比較

 

五、LVS的調度方法

在討論了將數據包轉發給集羣內部的節點的王種方式後,來看一下如何在集羣節點麼間分配工作負荷。當有用戶訪問負載均衡器上的VIP請求集羣服務時,負載均衡器需要從真實服務器池中選擇一臺真實服務器爲其提供服務。負載均衡器可用於作出該決定的調度方法分成兩個基本的類別;靜態調度和動態調度。

靜態:僅根據調度算法本身,不考慮背後服務器的負載

(1)rr:round robin,輪流,輪詢

調度器通過“輪詢”的調度算法,按照順序將請求分配到後端的真實服務器上,無論後端服務器的負載狀態如何,都會平均“輪詢”調度。

(2)WRR:weightd round robin,帶權重的輪序

指的是能者多勞,服務器性能強的,就會分配的比較多。所以根據後端真實服務器的性能來進行調度,根據後端真實服務器負載情況,修改權重值來實現動態的調度

(3)sh:source hashing 源地址hash

源地址與挑選地址綁定,將來自於同一個源IP的請求將始終被定向至同一個RS,這個目的是爲了session持久功能,僅實現session的綁定.

(4)dh:destination hashing,目標地址hash,主要用於實現當你的內部主機上有多個防火牆出口時有用。 (僅作了解)

動態:根據算法及各RS當前的負載狀況進行調度

(1)lc:least connection,最少連接,通過監控後端RS的連接數,根據TCP協議中的某些計數器來判斷。將請求調度到已建立的連接數最少後端的真實服務器上。

計算方法:Overhead=Active*256+Inactive,Overhead越小,表示負載越低

(2)wlc:weight lc,加權的lc

計算方法:Overhead=(Active*256+Inactive)/weight

(3)sed:shortest expertion delay最短期望延遲

Overhead = (ACTIVE+1)*256/加權,數目最小的,接受下次請求

(4)nq:Never Queue,永不排隊

無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。

(5)lblc:Locality-Based Least connection基於本地的最小連接

該算法根據請求的目標IP地址找出該目標IP地址最近使用的Real Server,若該服務器是可用的且沒有超載,就會使用“最少鏈接”來挑選一臺可用的服務器,將請求發送到該服務器

(6)lblcr:Replicated lblc帶複製功能的lblc,是dh算法的一種改進

該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

轉載:linux運維部落

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