LVS原理

轉自http://blog.csdn.net/caoshuming_500/article/details/8291940

LVS 簡介

         LVS 是 Linux  Virtual Server ,Linux 虛擬服務器;是一個虛擬的服務器集羣【多臺機器 LB IP】。LVS 集羣分爲三層結構:html

  • 負載調度器(load balancer):它是整個LVS 集羣對外的前端機器,負責將client請求發送到一組服務器[多臺LB IP]上執行,而client端認爲是返回來一個同一個IP【一般把這個IP 稱爲虛擬IP/VIP】
  • 服務器池(server pool):一組真正執行client 請求的服務器,通常是咱們的web服務器;除了web,還有FTP,MAIL,DNS
  • 共享存儲(shared stored):它爲 server pool 提供了一個共享的存儲區,很容易讓服務器池擁有相同的內容,提供相同的服務[不是很理解]

LVS 有4中經常使用的模式,分別講一下4中模式的區別:前端

LVS  DR 模式

  1. DR(Direct  Routing)模式的網絡結構:

        2.  工做的基本原理:

        (1). client 發送一個pv請求給VIP;VIP 收到這請求後會跟LVS設置的LB算法選擇一個LB 比較合理的realserver,而後把此請求的package 的MAC地址修改成realserver的MAC地址;下面是咱們通訊的package的基本格式:web

              

  

              在這個通訊的Package 有六個主要的字段:src mac 、 dst mac 、 src ip 、 src prot 、  dst ip 、 dst ip ;  如今這個包裏面的 dst mac 是LVS VIP的網卡MAC [在TCP 三次握手完成時就只知道dsp ip 和dsp mac了]算法

  •  DR 模式會把packet 裏面的dst mac  改爲 realserver的MAC 地址;而後VIP會把這個包廣播到當前的這個LAN裏面;因此,要提早保證VIP 和 全部的realserver 在同一個網段,也就是在用過LAN裏面。

             同一個網段:用子網掩碼來實現的,咱們知道咱們的網絡中有局域網,一個局域網有不少臺機器,這些LAN裏面的全部機器都公用一個外網IP;咱們是怎樣界定這個LAN的呢?用的就是網段號;IP只是是32位二進制數表示,這32位分爲:網絡位 + 主機位;表如今子網掩碼是就是:網絡位是1,主機位是0;這樣網絡位 = IP  按位 與  子網掩碼;因此,咱們在把realserver 掛到LVS上前,須要確認DR模式,且IP 在同一個網段內。安全

  • ARP協議會把這個包發送給真正的realserver【根據MAC 找到機器】
  • 把這個src ip----->realserver 的mac 地址創建一個hash表;這這次鏈接未斷開前,同一個client發送的請求經過查詢hash表,在次發送到這臺realserver上面;
  • realserver 收到這個pachet後,首先判斷dst ip 是不是本身的IP地址;若是不是就丟掉包;若是是就處理這個包。因此,DR模式還要在全部的realserver 的機器上面綁定VIP的ip地址:

 

[html]  view plain  copy
 
 
  1. /sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255   -----> 這個要注意!  

 

  •  這樣realserver 發現package 的dst 本身能識別【綁定了2個IP】,會處理這個包,處理完後把package的src  mac  dst mac  src ip   dst ip 都修改後再經過ARP 發送給VIP,經過VIP 發送給client。   realserver 發送給 VIP的package的格式:

             

  •  realserver 處理這個包後,會跟dst 爲client ip 直接發送給 client ip;不通過lvs ;這樣雖然效率比較高,可是有安全漏洞。 

 

                  LVS DR 工做的基本原理package 的詳細信息:http://os.51cto.com/art/201105/264303.htm服務器

         3.  LVS DR模式的注意狀況:

  •   LVS 的VIP 和 realserver 必須在同一個網段,否則廣播後全部的包都會丟掉: 提早確認LVS/硬件LB 是什麼模式,是否須要在同一個網段
  •   全部的realserver 都必須綁定VIP的IP地址,不然realserver 收到package後發現dst 不是本身的I怕,全部包都會丟掉。
  •   realserver·處理完包後直接把package 經過dst IP 發送給 client ,不經過LVS/迎接IP 了這樣的LVS /VIP 效率會更高一點。【經過把realserver的ip暴漏給外界,不是很安全】

LVS  NAT 模式

  1.  LVS NAT 模式的網絡結構:

        

            2.   NAT 模式的基本原理:

  •    NAT 模式工做原理的模擬圖:

                

  •    client:202.100.1.2 
        VIP:     202.103.106.5    

                  realserver : 172.16.0.2  172.16.0.3  分別提供http 和ftp服務網絡

        (1). 首先client 發送請求[package] 給VIP;框架

[html]  view plain  copy
 
 
  1. #client 發送給VIP的package:  
  2. SOURCE 202.100.1.2:3478  EDST   202.103.106.5:80  

 

        (2). VIP 收到package後,會根據LVS設置的LB算法選擇一個合適的realserver,而後把package 的DST IP 修改成realserver:   運維

[html]  view plain  copy
 
 
  1. # VIP 發送給realserver的package:  
  2.  SOURCE   202.100.1.2:3478  EDST   172.16.0.3:8000  

        (3). realserver 收到這個package後判斷dst ip 是本身,就處理這個package ,處理完後把這個包發送給LVS VIP:性能

 

 

[html]  view plain  copy
 
 
  1. # realserver 處理完成後發送給VIP的package:  
  2.  SOURCE   172.16.0.3:8000  EDST     202.100.1.2:3478    # lvs 收到這個package 後發現dst ip 不是本身的會不會丟掉?感受有錯誤  

 

       (4). LVS 收到這個package 後把sorce ip改爲VIP的IP,dst ip改爲 client ip而後發送給client:

[html]  view plain  copy
 
 
  1. #VIP收到package 後修改sourceip 發送給client的包:  
  2. SOURCE   202.103.106.5.80:80  EDST   202.100.1.2:3478  

 

           3. NAT 模式的注意事項:

  •  NAT 模式修改的是dst IP,直接走 switch 或pub 不須要修改MAC 因此,不須要VIP 和realserver 同在一個網段內。
  •  NAT 模式 package in  和package out 都須要通過LVS ;所以LVS 的可能會成爲一個系統瓶頸問題。

LVS  FULL NAT 模式

  1.   FULL NATT的基本原理:

              FULL NAT  在client請求VIP 時,不只替換了package 的dst ip,還替換了package的 src ip;但VIP 返回給client時也替換了src ip;仍是經過上面NAT 模式的工做緣由的圖進行分析 FULL NAT 的工做原理:

         (1). 首先client 發送請求[package] 給VIP;

[html]  view plain  copy
 
 
  1. #client 發送給VIP的package:  
  2. SOURCE 202.100.1.2:3478  EDST   202.103.106.5:80  

 

        (2). VIP 收到package後,會根據LVS設置的LB算法選擇一個合適的realserver,而後把package 的DST IP 修改成realserver;把sorce ip 改爲 lvs 集羣的LB IP   

[html]  view plain  copy
 
 
  1. # VIP 發送給realserver的package:  
  2.  SOURCE   172.24.101.135[lb ip]  EDST   172.16.0.3:8000  

        (3). realserver 收到這個package後判斷dst ip 是本身,就處理這個package ,處理完後把這個包發送給LVS VIP:

[html]  view plain  copy
 
 
  1. # realserver 處理完成後發送給VIP的package:  
  2.  SOURCE   172.16.0.3:8000  EDST     172.24.101.135[這個ip是 LVS VIP 集羣的一太機器]     

       (4). LVS 收到這個package 後把sorce ip改爲VIP的IP,dst ip改爲 client ip而後發送給client:

[html]  view plain  copy
 
 
  1. #VIP收到package 後修改sourceip 發送給client的包:  
  2. SOURCE   202.103.106.5.80:80  EDST   202.100.1.2:3478  

      2. FULL NAT 模式的注意事項:

  • FULL NAT 模式也不須要 LBIP 和realserver ip 在同一個網段;
  • full nat 跟nat 相比的優勢是:保證RS回包必定可以回到LVS;由於源地址就是LVS--> 不肯定
  • full nat  由於要更新sorce ip 因此性能正常比nat 模式降低 10%

LVS  IP TUNNEL 模式

  1. IP TUNNEL 模式的網絡結構圖:

       2. IP TUNNEL 模式的基本原理:

             仍是按NAT 模式的基本框架來講明TUNNEL 模式的基本原理:

        (1). 首先client 發送請求[package] 給VIP;

[html]  view plain  copy
 
 
  1. #client 發送給VIP的package:  
  2. SOURCE 202.100.1.2:3478  DST   202.103.106.5:80  

 

        (2). VIP 收到package後,會根據LVS設置的LB算法選擇一個合適的realserver;並把client發送的package 包裝到一個新的IP包裏面;新的IP包的dst是realserver的IP

[html]  view plain  copy
 
 
  1. # VIP 發送給realserver的package:  
  2.  client 發送的包  <strong>DST   172.16.0.3:8000</strong>  

        (3). realserver 收到這個package後判斷dst ip 是本身,而後解析出來的package的dst是VIP;會檢測咱們的網卡上是否幫了VIP的ip地址;若是幫了就會處理這個包,若是沒有直接丟掉。 咱們通常在realserver上面 lo:0 綁定了VIP的ip地址,就能夠處理

[html]  view plain  copy
 
 
  1. # realserver 處理完成後直接發送給client響應包:  
  2.  SOURCE   172.16.0.3:8000  DST      202.100.1.2:3478  【client ip】  

      3. IP TUNNEL 模式的注意:

  • TUNNEL 模式必須在全部的realserver 機器上面綁定VIP的IP地址
  • TUNNEL 模式的vip ------>realserver 的包通訊經過TUNNEL 模式,不論是內網和外網都能通訊,因此不須要lvs vip跟realserver 在同一個網段內
  • TUNNEL 模式 realserver會把packet 直接發給client 不會給lvs了
  • TUNNEL 模式走的隧道模式,因此運維起來比較難,因此通常不用

 

  LVS  DR、NAT、FULL NAT、IP TUNNEL 模式的區別:

  1.  是否須要lvs vip跟realserver 在同一個網段:

             DR 模式由於只修改 package的 MAC地址經過ARP廣播的形勢找到realserver,因此 要求LVS 的VIP 和realserver的IP 必須在同一個網段內,也就是在掛載VIP 時先確認LVS的工做模式,若是是DR模式須要先確認這個IP 只是否能掛在這個LVS下面。

            其餘模式由於都會修改DST ip 爲 realserver的IP 地址,因此不須要在同一個網段內

        2.   是否須要在realserver 綁定LVS vip 的IP 地址:

              realserver 收到package後會判斷dst ip 是不是本身的ip,若是不是就直接丟掉包;由於DR模式dst 沒有修改仍是LVS的VIP;因此須要在realserver上面綁定VIP;IP TUNNEL 模式只是對package 從新包裝一層,realserver解析後的IP包的DST  仍然是 LVS的VIP ;也須要在realserver上面綁定VIP;其餘的都不須要

        3.   四種模式的性能比較:

             由於DR模式   TP TUNELL 模式都是在package in 時通過LVS ;在package out是直接返回給client;因此兩者的性能比NAT 模式高;但IP TUNNEL 由於是TUNNEL 模式比較複雜,其性能不如DR模式;FULL NAT 模式由於不只要更換 DST IP 還更換 SOURCE IP  因此性能比NAT 降低10%

             因此,4中模式的性能以下:DR  --> IP TUNNEL  --->NAT ----->FULL NAT

 LVS 實踐中的積累

1. lvs 不會主動斷開鏈接

好比 client 經過LVS VIP 採用長連接方式訪問server,即便咱們把LVS下面的realserver的status.html文件刪除了;原本經過LVS 跟這臺realserver 連接的請求也不會被LVS

強制斷開;要等到client本身斷開鏈接;【在client主動斷開期間;client能夠跟這臺realserver 正常通訊】;這樣有個好處時在網絡抖動時;LVS不會頻繁的流量截斷,到不一樣的RS上面

相關文章
相關標籤/搜索