LVS介紹及工作原理圖解

    很多人使用過LVS集羣系統,但對於LVS集羣,大多數人不清楚它到底是個什麼東西。接下來我們就聊聊LVS及其工作原理。

一.lvs介紹

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

二.Lvs原理介紹

  圖示如下:

 wKioL1e0Dn-h5jr3AAHedmcs4p4189.png

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

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

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

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

三.lvs組成結構

 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種不同的模型
 1、lvs-nat  (Network Address Translation)(建議小規模使用)

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

 3、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對應的服務器組,根據“最小連接”原則,從服務器組中挑選一臺服務器。若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。






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