LVS-NAT模型/LVS-DR模型實踐

    友情提醒:實驗環境爲:Centos 6.6 x86_64 + vmware workstation 10

     內容概括:

         1)LVS的點滴彙總

         2)實現LVS-nat模型

         3)實現LVS-DR模型

    

一  LVS的點滴彙總

      LVS是Linux Virtual Server的簡稱,基於IP和端口的負載均衡軟件。該開源項目的發起者和主要開發者爲章文嵩博士。

    1.1)LVS的組件:

          有2部分組成:

                ipvs:工作在內核空間netfilter/iptables框架的input鏈上。

                ipvsadm:工作在用戶空間的一個命令工具,主要用於複製均衡規則的定製和管理

          ipvsadm定義好集羣服務和負載均衡規則後,ipvs在input鏈上截取相應端口和目標地址的服務包,改寫目標地址,通過forward,postrouting鏈發往後端的真正提供服務的主機。

          iptables規則和ipvsadm定義的規則不能共存。

    1.2)LVS支持的協議:

            目前支持:tcp/udp/sctp/ah/esp/ah_esp

    1.3)術語約定:

          主機類:

                    Director:調度器,做爲網絡構架的唯一入口。
                    Real Server:簡稱RS,隱藏於後端提供服務的真正主機。
              
            IP類:
                      用戶(cip)<--->(vip)LVS-Director(dip)<---->(rip)real server

     1.4)LVS的工作模型由四種:

              lvs-nat: 後端real server真正隱藏,接受和返回給客戶端的數據包均需經由 lvs-Director轉發,

後端realserver 與 lvs要求在同一個物理局域網內。

              lvs-dr:   Lvs-Director接受客戶端的請求數據包,給返回給客戶端的應答包由後端realserver直接返回,後端realserver與lvs要求在同一個物理局域網內。         
              lvs-tun:   Lvs-Director接受客戶端的請求數據包,給返回給客戶端的應答包由後端realserver直接返回,後端realserver與lvs不在同一個物理局域網內,可以誇地域實現。              

              lvs-fullnat: 這個目前不是LVS標準模型,由阿里巴巴集團開發人員研製出的一種新型結構,是lvs-nat模型的改進型,Lvs-Director與realserver可以跨路由器協同工作。

       1.5)LVS的調度方法:

     靜態方法:調度時僅根據算法本身實現調度,而不管後端realserver的負載情況,追求的是起點公平。
         RR:round-robin,輪詢

根據配置lvs-director指定的realserver的次序,挨個來應答請求。

存在的問題是:不論realserver性能的高低而得到同等的待遇,沒有發揮出高性能realsever的能力。

         WRR:weighted round-robin,加權輪詢:給lvs一個權重值,值越大承受越多。
                                計算方法:overhead=conn/weight    

在配置director上配置realserver時,指定了每個realserver的權重值,比如第一realserver 權重 1 ,第二個realserver的權重爲4,那麼前5個連接請求第二個realserver佔據4個後第一個realserver才佔據1個,二者之間始終保存1:4的關係。

存在問題:可能會出現這種場景:第二個realserver上的4個鏈接都沒有斷開,而第一個realserve上的唯一的一個連接處理完畢已經空閒,而第二個realserver還在處理4個連接。新來了5個連接,第二個realserver分的4個,第一個realserver分的1個。此時第二個realserve上有8個連接要處理,而第一個realserve上只需處理1個鏈接。

         RR與WRR,算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,是一種無狀態調度,不管服務器的當前連接數和響應速度。

       

         DH:destination ip hashing,目標地址散列調度,特殊場景中使用,例如有多出口時。

該算法是針對目標IP地址的負載均衡,通過散列(Hash)函數將目標IP地址與後臺Realserver組成key:value對應關係的散列表,根據請求包文的目標IP地址,作爲鍵(Hash Key)從靜態分配的散列表找出對應的緩存或出口服務器。                    

         SH:source hashing,源地址哈希,來源相同的主機始終發向同一個realserver實現會話綁定。

它採用的散列函數與目標地址散列調度算法 的相同。除了將請求的目標IP地址換成請求的源IP地址外,它的算法流程與目標地址散列調度算法的基本相似。在實際應用中,源地址散列調度和目標地址散列 調度可以結合使用在防火牆集羣中,它們可以保證整個系統的唯一出入口。               

       

       動態方法:根據算法及後端RS當前的負載狀況實現調度 。根據overhead值挑選最小的realserver進行應答響應。     

           LC:least connection
                            計算方法:overhead=Active*256+Inactive

這種調度算法分配連接時根據overhead和在realserver上的順序來分配連接的。連接來臨時overhead小的分的連接,若overhead相同,按照在director上的realserve順序來分配。
           WLC:weighted least connection
                             計算方法:overhead=(Active*256+Inactive)/weight

wlc是lc的改進,在分配連接時增加了weight值,使得權重大的realserver分的連接數增加。可以給性能高的realserver配置合理的權重值,使其發揮更大的能力。當權重設計不合理,會出現權重高的機器忙死,權重低的機器閒死。wlc是默認的調度方式。

                 SED:Shorted Expection Delay,最短期望延遲
                             計算方法:overhead=(Active+1)*256/weight

SED雖是wlc的改進,但是並沒有克服權重設置不合理帶來的缺陷:當權重設計不合理,會出現權重高的機器忙死,權重低的機器閒死。

               NQ:Never Queue  ,永不排隊

NQ是SED的改進,初始時讓每個realserver根據權重分的一個連接,而後按照SED的overhead的計算公式,決定下面的連接分配情況。


            LBLC:基於本地的最少連接 Local-Based Least Connection
                     動態方式的DH算法

將去往相同地址的連接定向到同一個出口上,若在出口上設定有緩存服務器,這能提高cache命中率。當出口server負擔過重時也會定向至另外的server上,雖然這降低了命中,破壞lvs的初衷。

             LBLCR:帶複製的LBLC

 出口服務器上配置有緩存功能,將去往某些域名的連接出口定向至1號server上,這樣提高cache命中,當1號負擔過重時,將部分連接調至2號server上,同時將cache中的內容也複製一份給2號server。




       1.6)ipvsadm命令的使用格式:

                 安裝命令:#yum -y install ipvsadm  

                 用法:

                         管理集羣服務:創建,修改,刪除
                             #ipvsadm -A|-E -t|-u|-f  service-address [-s scheduler]
                             #ipvsadm -D -t|-u|-f service-address
                                -A:創建
                                -E:修改
                                -D:刪除
                                -t:tcp,後面的service-address的格式:vip:port,如:192.168.0.1:80
                                -u:udp,後面的service-address的格式:vip:port,如:192.168.0.1:80
                                -f:承載協議爲tcp或udp,但該類報文會經由iptables/netfilter打標記,即防火牆標記,其service-address的格式“FWM",例如 "10"
                                 -s scheduler:指定算法。默認爲wlc
       

                          管理集羣服務的RS:添加,修改,移除
                            #ipvsadm -a|-e -t|-u|-f service-address -r server-address [-g|-i|-m] [-w weight]
                            #ipvsadm -d -t|-u|-f  service-address -r server-address
                            #ipvsadm -C

                              -r server-address:指明Real Server,格式:ip[:port],如:192.168.1.1:80
                              -g:指明lvs類型爲 lvs-dr,默認類型。
                              -i:指明lvs類型爲 lvs-tun
                              -m:指明lvs類型爲lvs-nat
                              -w weight:指定權重。
                              -d:刪除已定義的realserver
                              -C:清空已定義的ipvsadm的規則
                         
        

                           規則存取:

                                保存規則:

                                   #service ipvsadm save
                                      -->規則保存至/etc/sysconfig/ipvsadm
                                   #ipvsadm  -S > /etc/sysconfig/ipvsadm
                                   #ipvsadm-save > /etc/sysconfig/ipvsadm
                                讀取規則:

                                    #service ipvsadm restart 
                                   #ipvsadm  -R < /etc/sysconfig/ipvsadm
                                   #ipvsadm-restore</etc/sysconfig/ipvsadm
      

                         規則和統計數據查看:
                                  #ipvsadm -L -n  [option]
                                  #ipvsadm -Z
                                        -L 顯示規則
                                        -n 數字表示

                                        -Z 情況數據統計值

                                        option:

                                                 -c  顯示當前的活動鏈接分配
                                                 --stats 顯示統計數據
                                                 --rates 列出速率
                                                 --exact 顯示精確值
                                         

二  Lvs-Nat模型的實現:

       2.1)Lvs-nat模型下數據包ip頭地址的轉換

            請求包頭:client(cip,vip)--->lvs(dip)-->(cip,rip)-->realserver
            響應包頭: client(vip,cip)<---lvs(dip)<--(rip,cip)<--realserver

      2.2) Lvs-nat架構特性:
           (1):rip爲私有地址,vip爲公網地址
           (2):read sever網關指向dip,rip與dip在同一網段中。
           (3):請求和相應報文都經由Director轉發,lvs在高負載場景下成爲系統同瓶頸。
           (4):lvs必須爲linux,real server可以是任意OS

      2.3)實驗環境:

主機
角色
IP地址
Test01
LVS Director

vip:192.168.100.1

        [vmnet8]

dip:172.16.0.1

        [vmnet3]

Test02

LVS realserver,提供簡單的web服務

rip:172.16.0.2

       [vmnet3]

Test03

LVS realserver,提供簡單的web服務

rip:172.16.0.3

        [vmnet3]

win7
客戶機,發起web請求

cip:192.168.100.100

        [vmnet8]

         實驗拓撲圖:

wKiom1VjJciis-HGAAC3R7NYzcw895.jpg

    2.4)實驗步驟:

        2.4.1) 網卡橋接,I地址設定和相應的web服務

設定Test02:

[root@Test02 ~]# service iptables stop
[root@Test02 ~]#setenforce 0
[root@Test02 ~]#yum -y install httpd
[root@Test02 ~]#ip addr add 172.16.0.2/24 dev eth2
[root@Test02 ~]#touch /var/www/html/index.html
[root@Test02 ~]#echo "<h1>privateli-Test02,web station,172.16.0.2 is my address</h1>">/var/www/html/index.html
[root@Test02 ~]#service httpd start
#實際中相同端口的集羣服務內容應該一致,但在這個實驗中爲了測試效果,故設定web內容不一致。

   wKiom1Vhbp-BAu8XAAQ5Ak_dYM4828.jpg

 設定Test03:

[root@Test03 ~]# service iptables stop
[root@Test03 ~]#setenforce 0
[root@Test03 ~]#yum -y install httpd
[root@Test03 ~]#ip addr add 172.16.0.3/24 dev eth2
[root@Test03 ~]#touch /var/www/html/index.html
[root@Test03 ~]#echo "<h1>privateli-Test03,web station,172.16.0.3 is my address</h1>">/var/www/html/index.html
[root@Test03 ~]#service httpd start
#實際中相同端口的集羣服務內容應該一致,但在這個實驗中爲了測試效果,故設定web內容不一致。

wKioL1VhbiLzm6NPAAIXVtIBVVQ465.jpg

wKioL1VhbuDhzqkGAAI9-im2fDI658.jpg


設定Test01:

[root@Test03 ~]# service iptables stop
[root@Test03 ~]#setenforce 0
[root@Test03 ~]#ip addr add 172.16.0.1/24 dev eth2
[root@Test03 ~]#ip addr add 192.168.100.1/24 dev eth1
[root@Test03 ~]#

wKioL1Vhh0exjd-8AAQtQ2qVWl8324.jpg


        2.4.2)路由設定:

用爲是LVS-NAT模型,需要realserver的 rip網卡的網關設定爲Directory的dip

[root@Test03 ~]# ip route add default via 172.16.0.1
[root@Test02 html]# ip route add default via 172.16.0.1

        2.4.3)Lvs-director Test01上啓動ipv4數據包轉發:

[root@Test01 ~]# echo 1 >/proc/sys/net/ipv4/ip_forward

        2.4.4)lvs-director上設定服務:

#安裝ipvadm工具

[root@Test01 ~]# yum -y install ipvsadm

#設定集羣服務:

[root@Test01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@Test01 ~]# ipvsadm -A -t 192.168.100.1:80 -s rr
[root@Test01 ~]# ipvsadm -a -t 192.168.100.1:80 -r 172.16.0.2:80 -m 
[root@Test01 ~]# ipvsadm -a -t 192.168.100.1:80 -r 172.16.0.3:80 -m 
[root@Test01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.1:80 rr
  -> 172.16.0.2:80                Masq    1      0          0         
  -> 172.16.0.3:80                Masq    1      0          0         
[root@Test01 ~]#

     

 

2.4.5)win7 上測試效果

wKiom1VhirGhVKj3AAMi0K1JbT0755.jpg


wKioL1VhlDPBJiKYAAFGgsGzEug250.jpg

再次刷新:

wKiom1VhksXysVqJAAFa1qkCass564.jpg

三 LVS-DR模型的實現:

    3.1)LVS-DR模型下數據包IP頭部和幀的轉換:

請求包文IP頭部:

client->(cip,vip)->Director->[MAC-DIP,MAC-RIP](cip,vip)--->(rip)realserver-->(lo:0 vip)realserver

響應報文的IP頭部:

client<--(vip,cip)<---(rip)realserver<--(vip,cip)---(lo:0vip)realserver

    3.2)構建特性:                   

(1):保證前端路由器將目標地址爲vip的請求報文通過ARP地址解析送往Director
      解決方案:
          靜態綁定:前段路由直接將VIP對應的mac地址靜態配置爲director的mac地址
          artables:在各RS上,通過arptables規則拒絕其響應對vip的arp廣播地址請求
          內核參數:在RS上修改內核參數,並結合地址的配置方式實現拒絕響應對vip的arp廣播請求
(2):RS的rip可以使用私有地址,也可使用公網地址
(3):請求報文必須經由director調度,但響應報文必須不能經由director
(4):各RIP必須與DIP在同一個物理網絡中
(5):不支持端口映射
(6):RS可以使用大多數的OS

(7):RS的網關一定不能指向Director

     3.3)部署要點:

(1)各RS直接回應client的請求,因此,各RS均得配置VIP,不然客戶端收到的數據包源地址不是vip,則會丟棄收到的數據包。
(2)Director不會修改/拆除請求報文的IP首部,而是
     通過封裝新的幀首部(源MAC爲director的dir
     端口的MAC,目標mac爲rs的rip端口的mac)
     Director的vip地址配置在dir網卡的別名上。

(3)RS上vip配置在lo網卡的別名上若lo:0,並配置有arp應答抑制;只有Director上的vip參與本地路由通  信,也就是參閱arp應答。

(4)linux上配置的IP地址屬於內核的而不是網卡, linux上響應報文從哪個接口出去就封裝該接口的IP源IP

因此,需設定RS上相應報文的從lo別名網卡(也就是配置有vip的網卡)發出,通過rip網卡流經網關返回給client。

     3.4)實驗環境

     3.5)實驗步驟

 未完待續。。。。。

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