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

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


 LVS彙總

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

    1.1)LVS的組件:

          

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

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

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

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

    LVS支持的協議:

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

    術語約定:

          主機類:

                    Director:調度器,做爲網絡構架的唯一入口。

                    Real Server:簡稱RS,隱藏於後端提供服務的真正主機。

              

            IP類:

                      用戶(cip)<--->(vip)LVS-Director(dip)<---->(rip)real server

     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可以跨路由器協同工作。

       LVS的調度方法:

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

         RR:round-robin,輪詢。

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

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

         WRR:weighted round-robin,加權輪詢:給lvs一個權重值,值越大承受越多。

                                   

在配置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和在realserver上的順序來分配連接的。連接來臨時overhead小的分的連接,若overhead相同,按照在director上的realserve順序來分配。

           WLC:weighted least connection

                             

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

                 SED:Shorted Expection Delay,最短期望延遲

                             

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。

       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的格式            -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

       

                         

                                        -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

     

        路由設定:

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

1

2

[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數據包轉發:


 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。

     實驗特點     實驗步驟    實驗環境


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