LVS介紹及工做原理圖解

    不少人使用過LVS集羣系統,但對於LVS集羣,大多數人不清楚它究竟是個什麼東西。接下來咱們就聊聊LVS及其工做原理。
前端

一.lvs介紹算法

  LVS的英文全名爲「Linux Virtual Server」,即Linux虛擬服務器,是一個虛擬的四層交換器集羣系統,根據目標地址和目標端口實現用戶請求轉發,自己不產生流量,只作用戶請求轉發,目前是負載均衡性能最好的集羣系統。後端

二.Lvs原理介紹服務器

  圖示以下:網絡

 wKioL1e0Dn-h5jr3AAHedmcs4p4189.png

  1.首先用戶向負載均衡器調度器(Director Server)發起請求,負載均衡器將請求發往至內核空間,交給內核模塊進行檢測。session

  2.內核模塊中的PREROUTING鏈首先會收到用戶請求,判斷目標地址是不是負載均衡器的IP地址,若是是,則將數據包發往INPUT鏈。架構

  3.IPVS模塊是工做在INPUT鏈上的,當用戶請求到達INPUT鏈上時,IPVS會將用戶請求和本身已定義好的集羣服務做對比,若是用戶請求的就是定義的集羣服務,那麼IPVA會強行修改數據包裏的目標IP地址和目標端口,並將新的數據包發往POSTROUTING鏈。負載均衡

  4.POSTROUTING連接收到數據包發現目標IP地址恰好是本身的後端的服務器,那麼經過選路,將數據包最終發送給後端的服務器。框架

三.lvs組成結構ide

 lvs有兩組代碼,ipvs和ipvsadm。

  ipvs(ip virtual server):即ip虛擬服務,是工做在內核空間上的一段代碼,主要是實現調度的代碼。

  ipvsadm:工做在用戶空間,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,誰是後端真實服務器。

四.lvs術語

  DS:Director Server,目標服務器,即負載均衡器。

  RS:Real Server,真實服務器,即後端服務器。

五.lvs關於IP的術語

  VIP:virtual IP是外部直接面向用戶請求,做爲用戶請求的目標IP地址。

  DIP:Director Server IP.主要用於和內部主機通訊的IP地址。

  RIP:Real Server IP

  CIP:Client IP,客戶端IP

注:負載均衡器使用雙網卡,一塊是指向外部的VIP,一塊是指向內部的IP,用於和內部服務器通訊。

六.lvs的類型  

根據架構有3種不一樣的模型
 一、lvs-nat  (Network Address Translation)(建議小規模使用)

 二、lvs-dr (Direct Routing 直接路由)(建議大規模使用,也是如今較多使用場景的方法)

 三、lvs-tun  (Tunneling 隧道)(lvs-tun模型比較少用,由於它不能實現全局負載均衡,不能根據用戶區域的距離來挑選最近的機房。這個最多爲了實現異地容災來實現的。比方說日本的機房地震了,而此時美國的機房仍然可以使用,那麼只要將指向到美國機房便可。而通常只有這種場景下才會用到隧道機制)

七.lvs-nat模型

   主要是修改目標IP地址爲挑選出新的RS的IP地址。即請求進入負載均衡器時作DNAT,響應出負載均衡器時作SNAT。

wKioL1e0BVPQH8SgAAJasAPdZvs716.png

1.當用戶請求到達Director Server,此時請求的數據報文會先到達內核的PREROUTING鏈,此時報文的源IP是CIP,目標IP是VIP。

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

3.IPVS內核模塊比對數據包請求的服務是否爲集羣服務,若是是,則修改數據包的目標IP爲後端服務器的IP,而後將數據包發至POSTROUTING鏈,作DNAT轉換。此時報文的源IP是CIP,目標IP是RIP

4.POSTROUTING鏈經過選路,將數據包發送到Real Server。

5.Real Server比對發現目標IP是本身的IP,開始創建響應報文發回給Director Server,此時報文的源IP是RIP,目標IP是CIP.

6.Director Server在響應客戶端以前,此時會將源IP地址修改成本身的IP地址,而後響應給客戶端,作SNAT轉換。此時報文的源IP是VIP。目標IP是CIP。

特性:

1.RS必須使用私有地址,將RS的網關指向DIP。

2.DIP和RIP必須是同一網段內。

3.請求和響應報文都要通過Director Server,高負載場景中,Director Server會出現性能瓶頸。

4.支持端口映射

5.RS可使用任意操做系統

八.lvs-dr模型

    將請求報文的目標MAC地址設定爲天選出來的RS的MAC地址。即作MAC地址轉換。

wKioL1e0BTKiIEF7AAH-Cao9-Po846.png

1.當用戶請求到達Director Server,此時請求的數據報文huixiandao內核空間的PREROUTING鏈,此時報文的IP是CIP,目標IP是VIP。

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

3.IPVS內核模塊比對數據包請求的服務是否爲集羣服務,若是是,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改成RIP的MAC地址,而後將數據包發至POETROUTING鏈中,此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址。

4.因爲DS和RS實在同一網絡中,因此二者之間的通訊時經過二層協議來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。

5.RS發現請求報文的MAC地址是本身的MAC地址,就接受此報文,處理完成之後,將響應報文經過IO接口傳送給eth0網卡,而後向外發出,不通過負載均衡器。此時源IP地址爲VIP,目標IP是CIP。

6.響應報文最終送至客戶端。

特性:

  1. 保證前端路由將目標地址爲VIP的報文所有發送給DS,而不是RS。

    解決方案:

    (1).在前端路由作靜態地址路由綁定,將對於VIP的地址僅路由到DS上。

    存在問題:用戶未必有權限操做路由,

    (2).arptables:在arp層次上實現arp解析時作防火牆規則,過濾RS響應arp請求,由iptables提供。

    (3).修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制不能響應對VIP地址的解析請求。

2.RS可使用私有地址,也可使用公網地址,若是使用公網地址,能夠直接對RIP進行直接訪問。

3.RS和DS必須在同一物理網絡中(即必須是同一物理網絡)。

4.全部的請求報文經由DS,但響應報文必須不能通過DS。

5.不支持地址轉換,即整個過程和不轉換IP地址,只轉換MAC地址。也不支持端口映射。

6.RS可使大多數操做系統

7.RS的網關絕對不容許指向DIP,由於不容許響應報文通過DS。

8.RS的lo接口配置VIP的地址。

九.lvs-tun模型

    在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址爲CIP,目標地址爲VIP)外部IP地址首部(源地址爲DIP,目標地址爲RIP)

wKioL1e0C8LCxSEXAANWPYAaQtc957.png

  1. 當用戶請求報文到達DS,此時請求的數據報文會先到內核的PREROUTING鏈。此時源IP是CIP,目標IP是VIP。

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

  3. IPVS比對數據包請求的服務是否爲集羣服務,若是是,在請求報文的首部再次封裝一層IP報文,封裝源IP爲DIP,目標IP是RIP,而後發至POSTROUTING鏈。此時源IP是爲DIP,目標IP是RIP。

  4. POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(由於外層封裝多了一層IP首部,因此能夠理解爲此時經過隧道傳輸)。此時源IP是DIP,目標IP是RIP。

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

  6. 響應報文送達至客戶端。

特性:

  1. RIP、VIP、DIP全爲公網地址。

  2. RS的網關不會也不可能指向DIP。

  3. 全部的請求報文經由DS,但響應報文必須不能通過DS。

  4. 不支持端口映射。

  5. RS的系統必須支持隧道模型。

十.LVS的調度算法

    分爲靜態方法和動態方法。

1.靜態算法

  • rr:round robin,輪循,按照順序將請求分配到後端真實服務器上,不考慮後端服務器負載。

  • wrr:weight round robin,帶權重的輪詢。意爲能者多勞,根據後端真實服務器的性能來進行調度,根據後端真實服務器的負載狀況,修改權重值來實現動態的調度。

  • sh:source hashing,源地址hash,未來自於同一個源IP的請求始終被丁香轉發到同一個RS,目的是爲了session持久功能,僅實現session的綁定。

  • dh:destination hashing,目標地址hash,主要用於實現當你的內部主機有多個防火牆出口時有用。

2.動態算法

  • lc:least connection,最少鏈接,經過監控後端RS的鏈接數,根據TCP協議中的某些計數器來判斷,將請求調度到已創建的鏈接數最少後端的真實服務器。計算方法:Overhead=Active*256+Inactive

Overhead:負載均衡

Overhead越小,表示負載越低。

  • wlc:weight lc,加權最少鏈接

    在集羣系統中的服務器,若是性能差別較大的狀況下,調度器能夠根據採用「加權的最少鏈接」調度算法來提升負載均衡性能,權值較高的RS將會承接更大比例的負載鏈接。因此調度器能夠根據「加權的最少鏈接」來判斷服務器的負載狀況,並動態調整其權重值。

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

  • sed:shortest expertion delay最短時間望延遲

    基於WLC算法,Overhead = (ACTIVE+1)*256/加權,再也不考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是爲了考慮加權的時候,非活動鏈接過多缺陷:當權限過大的時候,會倒置空閒服務器一直處於無鏈接狀態。

    計算方法:Overhead=((Active+1)*256)/weight, 讓權重大的優先接收請求

  • nq:Never Queue,永不排隊
    能夠理解第一個請求上來先輪一圈,就是每一個都先響應一次,而後在接着使用上面那種方法計算讓誰響應。若是有臺Real Server的鏈接數=0就直接分配過去,不須要在進行sed運行。

  • lblc:Locality-Based Least connection基於本地的最小鏈接
    基於局部性的最少鏈接算法是針對請求報文的目標IP地址的負載均衡調度。主要用於Cache集羣系統,由於Cache中客戶請求報文的目標IP會不斷髮生改變。因此該算法根據請求的目標IP地址找出該目標IP地址最近使用的Real Server,若該服務器是可用的且沒有超載,就會使用「最少連接」來挑選一臺可用的服務器,將請求發送到該服務器

  • lblcr:Replicated lblc帶複製功能的lblc,是dh算法的一種改進帶複製功能的lblc也是針對目標IP地址作負載均衡。主要是根據請求的目標IP找到目標IP對應的服務器組,根據「最小鏈接」原則,從服務器組中挑選一臺服務器。若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按「最小鏈接」原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。

相關文章
相關標籤/搜索