1. 程式人生 > >LVS 工作模式以及工作原理

LVS 工作模式以及工作原理

LVS 簡介

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

  • 負載排程器(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的基本格式:

             

              在這個通訊的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地址:
      /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 ;這樣雖然效率比較高,但是有安全漏洞。 

         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;

       #client 傳送給VIP的package:
       SOURCE 202.100.1.2:3478  EDST   202.103.106.5:80

        (2). VIP 收到package後,會根據LVS設定的LB演算法選擇一個合適的realserver,然後把package 的DST IP 修改為realserver:   

       # VIP 傳送給realserver的package:
        SOURCE   202.100.1.2:3478  EDST   172.16.0.3:8000
        (3). realserver 收到這個package後判斷dst ip 是自己,就處理這個package ,處理完後把這個包傳送給LVS VIP:
       # realserver 處理完成後傳送給VIP的package:
        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:

       #VIP收到package 後修改sourceip 傳送給client的包:
       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;

       #client 傳送給VIP的package:
       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   

       # VIP 傳送給realserver的package:
        SOURCE   172.24.101.135[lb ip]  EDST   172.16.0.3:8000
        (3). realserver 收到這個package後判斷dst ip 是自己,就處理這個package ,處理完後把這個包傳送給LVS VIP:
       # realserver 處理完成後傳送給VIP的package:
        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:

       #VIP收到package 後修改sourceip 傳送給client的包:
       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;

       #client 傳送給VIP的package:
       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

       # VIP 傳送給realserver的package:
        client 傳送的包  DST   172.16.0.3:8000
        (3). realserver 收到這個package後判斷dst ip 是自己,然後解析出來的package的dst是VIP;會檢測我們的網絡卡上是否幫了VIP的ip地址;如果幫了就會處理這個包,如果沒有直接丟掉。 我們一般在realserver上面 lo:0 綁定了VIP的ip地址,就可以處理
       # realserver 處理完成後直接傳送給client響應包:
        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上面