<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LVS負(fù)載均衡三種模型(NAT、DR、TUN)推導(dǎo)

          共 3765字,需瀏覽 8分鐘

           ·

          2020-10-02 22:29

          作者:喬梓鑫
          來源:SegmentFault 思否社區(qū)




          什么是負(fù)載均衡


          Load balancing,即負(fù)載均衡,是一種計算機技術(shù),用來在多個計算機(計算機集群)、網(wǎng)絡(luò)連接、CPU、磁盤驅(qū)動器或其他資源中分配負(fù)載,以達(dá)到最優(yōu)化資源使用、最大化吞吐率、最小化響應(yīng)時間、同時避免過載的目的。


          為什么需要負(fù)載均衡


          簡單點說就是現(xiàn)在用戶的訪問量過大,對于單機的計算機資源請求過多,導(dǎo)致負(fù)載過高,所以需要負(fù)載均衡技術(shù)。


          簡單的負(fù)載均衡模型


          最為簡單的負(fù)載均衡模型就是客戶端訪問負(fù)載均衡服務(wù)器,然后由該服務(wù)器轉(zhuǎn)發(fā)給真正的服務(wù)器。如下圖所示:




          該負(fù)載均衡服務(wù)器也是理想中的服務(wù)器,將其對應(yīng)到OSI七層網(wǎng)絡(luò)模型如下圖所示:




          這里的負(fù)載均衡服務(wù)器默認(rèn)是指LVS,所以是四層負(fù)載均衡服務(wù)器,這里對于為什么是四層做一個簡單的解釋(個人理解),首先該負(fù)載均衡服務(wù)器沒有實現(xiàn)TCP握手功能但是具有路由轉(zhuǎn)發(fā)功能,那么一定至少是工作在網(wǎng)絡(luò)層的,也就是前三層,對于負(fù)載均衡服務(wù)器它的主要功能是均衡負(fù)載,那么如何判斷客戶端的請求過載呢?這里就設(shè)計到第四層傳輸層,它需要知道有客戶端與服務(wù)端的連接數(shù)量,來判斷是否需要進(jìn)行均衡負(fù)載,那么這就需要負(fù)載均衡服務(wù)器具有"窺視"傳輸層的端口的功能,也就是得看得到客戶端和服務(wù)端的連接,所以說是四層服務(wù)器。


          LVS模型中的常見專用術(shù)語:


          1、 DS:Director Server。指的是前端負(fù)載均衡器節(jié)點,也即是四層負(fù)載均衡服務(wù)器(LVS)。
          2、 RS:Real Server。后端真實的工作服務(wù)器。
          3、 VIP:Virtual IP,向外部直接面向用戶請求,作為用戶請求的目標(biāo)的IP地址。
          4、 DIP:Director Server IP,主要用于和內(nèi)部主機通訊的IP地址。
          5、 RIP:Real Server IP,后端服務(wù)器的IP地址。
          6、 CIP:Client IP,訪問客戶端的IP地址


          NAT模型推導(dǎo)(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)


          假設(shè)現(xiàn)在有個客戶訪問www.baidu.com,在回車后該域名會解析為相應(yīng)的ip地址,但是百度有很多服務(wù)器,解析后的ip地址并不是真正的服務(wù)器的地址,而是類似于這里的負(fù)載均衡服務(wù)器的ip,這個ip是固定的,無論真正的服務(wù)器怎么變化,對于客戶來說發(fā)送的數(shù)據(jù)包只是一個源地址為CIP,目的地址為www.baidu.com域名解析后的虛擬地址VIP,如下圖所示:



          而現(xiàn)在真正的服務(wù)器對外暴露的IP為RIP,如果直接將該數(shù)據(jù)包轉(zhuǎn)發(fā)給服務(wù)端,服務(wù)端會丟棄,所以,這里利用NAT的方式將發(fā)送過來的數(shù)據(jù)包的目標(biāo)IP地址更換為RIP,這樣就可以發(fā)送到真正的服務(wù)器。這里假設(shè)發(fā)送給Server2,那么數(shù)據(jù)包會被轉(zhuǎn)化為CIP->RIP2,如下圖所示:




          在Server2收到該請求后,會對其進(jìn)行相應(yīng)的處理,首先會在內(nèi)部記錄該TCP連接——一個從RIP2到CIP的映射。




          我們知道當(dāng)我們在瀏覽器輸入www.baidu.com的時候瀏覽器會返回給我們一個頁面,也就是Server2收到客戶端的請求的時候,會返回一個數(shù)據(jù)包(這里假設(shè)就一個)給客戶端,也就是一個源地址為RIP2目的地址為CIP的數(shù)據(jù)包,但是我們知道客戶端和服務(wù)端一般不在同一個網(wǎng)段,所以該數(shù)據(jù)包會根據(jù)路由表的默認(rèn)路由發(fā)送到地址為默認(rèn)網(wǎng)關(guān)的地方,這里也就是負(fù)載均衡服務(wù)器的DIP。




          這個數(shù)據(jù)包如果直接發(fā)送給客戶端,客戶端統(tǒng)一不會接受而會拋棄,所以這里發(fā)送給客戶端的數(shù)據(jù)包也會被進(jìn)行轉(zhuǎn)換為一個源地址為VIP,目標(biāo)地址為CIP的數(shù)據(jù)包,這樣客戶端就會接受到服務(wù)端Server2返回的數(shù)據(jù)。



          LVS的NAT模型的內(nèi)容總結(jié):


          • 請求報文時,報文必須經(jīng)過director(負(fù)債均衡服務(wù)器),才能達(dá)到負(fù)載均衡的效果。同時在director上修改目標(biāo)ip為新的服務(wù)端地址(RIP)實現(xiàn)轉(zhuǎn)發(fā),也就是進(jìn)入負(fù)載均衡器時做DNAT。響應(yīng)報文時,在director上修改源ip實現(xiàn)轉(zhuǎn)發(fā),也就是響應(yīng)出負(fù)載均衡器時做SNAT。
          • Director的DIP和各real server的RIP必須在同一個物理網(wǎng)段中,并且RIP的網(wǎng)關(guān)要指向DIP。
          • NAT模型中一般VIP是公網(wǎng)地址,DIP和RIP一般是私網(wǎng)地址。使用NAT模型主要的目的是隱藏服務(wù)器ip。

          LVS的NAT模型的弊端:


          在我們輸入一個網(wǎng)站的時候,瀏覽器也就是服務(wù)端會給我們返回一個遠(yuǎn)遠(yuǎn)大于客戶端發(fā)送的消息的數(shù)據(jù),簡單點說就是在同一條道路上,奔向服務(wù)端的是卡丁車,而返回給客戶端的卻是擎天柱樣的重卡。這樣客戶端的數(shù)據(jù)流通就是不對稱的,在高并發(fā)的情形下,對負(fù)載均衡服務(wù)器的算力和帶寬都是極大的考驗,并且容易成為瓶頸。所以在負(fù)載均衡服務(wù)器中不使用該模式。


          DR模型(直接路由模式)


          我們回顧NAT模式的弊端在于服務(wù)端返回的數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于客戶端發(fā)送的數(shù)據(jù)這樣對于負(fù)載均衡服務(wù)器有較大的壓力,我們注意到,在服務(wù)端以及記錄了RIP2->CIP的連接了,為什么不直接將返回的數(shù)據(jù)發(fā)送給客戶端呢?這樣就不用通過負(fù)載均衡服務(wù)器了,現(xiàn)在我們假設(shè)該想法可以實現(xiàn),那么該模型被修改為如下圖所示:




          但是我們知道客戶端只接受從VIP發(fā)送來的數(shù)據(jù),所以,如果直接發(fā)送給客戶端,客戶端會丟棄,我們在往前看,服務(wù)端之所以會發(fā)送一個從RIP2到CIP的數(shù)據(jù)包,是因為接受到的數(shù)據(jù)包是從CIP到VIP的,所以才會保存一個從RIP2->CIP的連接,那么如果我們發(fā)送給服務(wù)端的數(shù)據(jù)就是一個源地址為CIP目標(biāo)地址為VIP的數(shù)據(jù)包的話,服務(wù)端也就會保存一個從VIP->CIP的連接,自然就發(fā)送了一個源地址為VIP到CIP的包,如果客戶端可以接受到的話,那么自然就會接受了。到這一步,模型的演變?yōu)槿缦聢D所示:




          那么問題又來了,如果負(fù)載均衡服務(wù)器發(fā)送一個CIP->VIP的數(shù)據(jù)包,服務(wù)端不會接受,在這里我們假設(shè)負(fù)載均衡服務(wù)器和服務(wù)端在同一個局域網(wǎng)中,那么負(fù)載均衡服務(wù)器就是知道服務(wù)端的MAC地址,在同一局域網(wǎng)的主機通過MAC實現(xiàn)數(shù)據(jù)包的交換,同時需要服務(wù)端內(nèi)部得有一個隱藏的地址VIP,這樣數(shù)據(jù)包根據(jù)MAC發(fā)送到Server端,然后由于內(nèi)部有一個VIP地址,該數(shù)據(jù)包就會被接受。如下圖所示:




          這樣我們就得到了LVS的直接路由模式(DR)


          LVS的DR模式內(nèi)容總結(jié)如下:


          • client發(fā)送請求到vip,lvs會對vip響應(yīng)arp,因此client將請求發(fā)到LVS。
          • LVS機器收到發(fā)往vip的報文后,根據(jù)目的IP和目的port匹配ipvs規(guī)則,將報文目的mac改為real server的mac,同時將源mac改為LVS的mac后,發(fā)送到real server。
          • real server收到之后,mac/IP都是本機的,就將報文交由系統(tǒng)處理。
          • 響應(yīng)報文因real server收到的報文源IP就是client IP,real server直接將請求回給client。如果client和real server是同一個網(wǎng)段,響應(yīng)報文直接通過二層透傳發(fā)送給client,報文目的mac即為client mac;如果client和real server不是同一個網(wǎng)段,響應(yīng)報文先發(fā)送到gateway,再走三層轉(zhuǎn)發(fā)返回client。

          LVS的DR模式的局限性:


          需要負(fù)載均衡服務(wù)器與服務(wù)端在同一個局域網(wǎng)中。


          LVS的TUN模式(tunneling)


          在LVS的DR模式中,我們需要負(fù)載均衡服務(wù)器與服務(wù)端在同一個局域網(wǎng)中,從而實現(xiàn)了MAC地址欺騙,而我們現(xiàn)在考慮負(fù)載均衡服務(wù)器與服務(wù)端不在一個局域網(wǎng)的場景(該場景非常常見),我們同樣采用DR的思路,將客戶端發(fā)送過來的數(shù)據(jù)包地址進(jìn)行修改,但是DR模式知識在數(shù)據(jù)鏈路層進(jìn)行了修改,無法實現(xiàn)網(wǎng)絡(luò)的跳轉(zhuǎn),所以只要我們實現(xiàn)網(wǎng)絡(luò)層的地址修改(欺騙),那么就無需讓負(fù)載均衡服務(wù)器和服務(wù)端在同一個局域網(wǎng)了。也就是說我們在CIP->VIP的外面包裹一層數(shù)據(jù)包(DIP->RIP2),那么這樣服務(wù)端既可以接受該數(shù)據(jù)包,同時也實現(xiàn)負(fù)載均衡服務(wù)器和服務(wù)端不在一個局域網(wǎng)的場景。



          LVS的TUN模式內(nèi)容總結(jié):


          • 客戶請求數(shù)據(jù)包,目標(biāo)地址VIP發(fā)送到負(fù)載均衡服務(wù)器上。
          • 負(fù)載均衡服務(wù)器接收到客戶請求包,進(jìn)行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然后發(fā)送出去。
          • RS節(jié)點服務(wù)器根據(jù)IP Tunnel包頭信息(此時就又一種邏輯上的隱形隧道,只有負(fù)載均衡服務(wù)器和RS之間懂)收到請求包,然后解開IP Tunnel包頭信息,得到客戶的請求包并進(jìn)行響應(yīng)處理。
          • 響應(yīng)處理完畢之后,RS服務(wù)器使用自己的出公網(wǎng)的線路,將這個響應(yīng)數(shù)據(jù)包發(fā)送給客戶端。源IP地址還是VIP地址。

          LVS的TUN模式的缺點:


          這種方式需要所有的服務(wù)器支持"IP Tunneling"(IP Encapsulation)協(xié)議


          以上就是LVS負(fù)載均衡三種模型的推導(dǎo)過程。




          點擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開更多互動和交流。

          -?END -

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人三级麻豆精品在线观看 | 国产精品一卡二卡三卡 | 五月丁香好婷婷网站入口 | 在线观看欧美日韩视频 | 亚洲中文日韩无码 |