lvs集群學習筆記之原理

lvs集群學習筆記之原理

lvs集群學習筆記之原理

集群 負載均衡 lvs 原理


什么是集群

集群(Cluster):計算機集合為解決某個特定問題組合起來形成的單個系統 。
分為:

    LB(Load Banlancing):負載均衡

    HA(High Availability):高可用。提高服務可用性,避免出現單點故障

    HP(High Performance):高性能 
    分布式存儲與運算

什么是負載均衡

在現實情況中當我們遇到了單臺服務器性能不足的時候,這時我們有兩種提升方案:

Scale Up:向上擴展、垂直擴展、縱向擴展;用性能好的主機替代性能差的主機,性價比差;

Scale Out: 向外擴展、水平擴展,即以新增服務器和現有服務器組成集群來應對性能不足的問題

在以上兩種解決方案中我們一般選擇向外擴展 因為:

向上擴展所付出的代價和得到性能的提升不成正比, 大多時候提升服務器一倍的性能需要花費三倍的價格
向外擴展也有很多問題, 例如:如何協調兩臺服務器提供一服務,用戶在兩臺服務器進行輪調時如何保存其的session信息

負載均衡或者負載均衡集群的作用就是將:

**向外擴張的服務器群組組成一個負載均衡集群,前端通過負載均衡調度器來對用戶請求通過調度算法合理分發到后端服務器中, 來達到負載均衡的目的.**

負載均衡解決方案

硬件解決方案:

            F5公司: BIG-IP

            Citrix公司: Netscaler

            A10公司: A10

            Array 

            Redware
軟件解決方案:
             四層: LVS
             七層: HAproxy, Nginx, Varnish....

lvs簡介

LVS(Linux Virtual Server)是目前阿里巴巴首席科學家章文嵩博士在大學期間的一款開源的負載均衡軟件, 可實現四層的負載均衡。

首先解釋下下文中出現的各種術語:
    Director: 負載均衡調度器, 負責在前端接受用戶請求根據特定的算法轉發到后端Real Server
    Real Server: 后端提供服務的服務器
    VIP: Director接受用戶請求的IP地址
    DIP: Director和Real Server聯系的IP地址
    RIP: Real Server的IP地址
    CIP: Client IP, 客戶端的IP地址

lvs內核空間模型

lvs架構.jpg-144.6kB

LVS其實由兩個組件組成, 在用戶空間的ipvsadm和內核空間的ipvs, ipvs工作在INPUT鏈上, 如果有請求報文被ipvs事先定義,就會將請求報文直接截取下根據其特定的模型修改請求報文, 再轉發到POSTROUTING鏈上送出TCP/IP協議棧
其報文流經過程如下:

        1.當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
        2.當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
        3.LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義             的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里             面的目的地址及端口沒有在規則里面,那么這條數據包將被放行至用戶空間。

        4.如果數據包里面的目的地址及端口在規則里面,那么這條數據報文將被修改目的地址為事先定義            好的后端服務器,并送往POSTROUTING鏈。

        5.最后經由POSTROUTING鏈發往后端服務器。

lvs特點

lvs具有以下特點:
        1、ipvs工作于netfilter框架上。
        2、 規則: 
                簡單來說就是把ip加端口定義為ipvs集群服務,ipvs會為此請求定義一個或多個后端服務
                目標地址未必會改,但是報文會被強行轉發給后端的服務器。 
        3、ipvs組件: ipvsadm(用戶空間,用來編寫規則) + ipvs(內核空間) 
        4、ipvs工作在第四層:
             (1)四層交換、四層路由。 做第四層轉發。(osi模型中的網絡層)
             (2)只能基于ip和port轉發,無法在應用層,session級別轉發
             (3) 不用到達應用層空間,就能轉發
        即工作在第四層不能進行7層負載均衡,但基于4層可以不要管上層協議進行負載均衡,只要支持
        tcp或udp就行。
        5、 lvs 性能很好,但是由于只第四層,不能到用戶空間,因此不能進行更加精細的控制。 在精細控制方面,haproxy和Ngnix可以更好的實現。 
        6、lvs通常作為總入口,更精細化的切割可能使用,haproxy或者Nginx實現

lvs實現方式

    lvs的實現方法為實現模型和負載均衡調度算法

    實現模型為:
            1、NAT
            2、DR
            3、TUN
            4、FULLNAT
    負載均衡調度算法分為兩種:靜態和動態

            靜態:
                RR
                WRR
                SH
                DH
            動態:
                LC
                WLC
                SED
                NQ
                LBLC
                LBLCR

    這些后文會一一介紹。

lvs實現方式之nat模型

lvs-nat.jpg-116.9kB
     如圖實現過程如下:
         1、客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),后面統稱為CIP),目標地址為VIP(負載均衡器前端地址,后面統稱為VIP)。

    2、負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的目標地址改為了后端服務器的RIP地址并將報文根據算法發送出去。

    3、報文送到Real Server后,由于報文的目標地址是自己,所以會響應該請求,并將響應報文返還給LVS。

    4、然后lvs將此報文的源地址修改為本機并發送給客戶端。注意:在NAT模式中,Real Server的網關必須指向LVS,否則報文無法送達客戶端。

   5、 NAT模型其實就是一個多路的DNAT,客戶端對VIP進行請求,Director通過事先指定好的調度算法計算出應該轉發到哪臺RS上, 并修改請求報文的目標地址為RIP,通過DIP送往RS. 當RS響應客戶端報文給CIP,經過Director時,

Director又會修改源地址為VIP并將響應報文發給客戶端. 這段過程對于用戶來說是透明的.


    關于nat模型有幾點需要注意:
            1、RS和Director必須要在同一個IP網段中
            2、RS的網關必須指向DIP
            3、可以實現端口映射
            4、請求報文和響應報文都會經過Director
            5、RS可以是任意操作系統
            6、DIP和RIP只能是內網IP

lvs實現方式之dr

lvs-dr.jpg-122.8kB

如圖過程如下:
        1、客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

        2、負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,并將此包發送給RS。

        3、RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文后,將響應報文通過lo接口送給eth0網卡直接發送給客戶端。注意:需要設置lo接口的VIP不能響應本地網絡內的arp請求。

    DR模型是一個較為復雜的模型. DR模型比較詭異, 因為VIP在Director和每一個RS上都存在,                  客戶端對VIP(Director)請求時,Director接收到請求會將請求報文的源MAC地址和目標MAC地址修改為本機DIP所在網卡的MAC地址和指定的RS的RIP所在網卡的MAC地址, RS接收到請求報文后直接對CIP發出響應報文, 而不需要通過Director

實現DR模型有一個最為關鍵的問題,大家都知道Linux主機配置一個IP地址會向本網絡進行廣播來通告其他主機或網絡設備IP地址對應的MAC地址,那么VIP分別存在于Director和RS,IP不就沖突了么,我們該如何解決這個問題?
 事實上LVS并不能幫助我們解決這個麻煩的問題:
     我們有很多種方法可以解決上面的問題:
         1、網絡設備中設置VIP地址和DIrector的MAC地址進行綁定
         2、Linux系統中有一個軟件可以實現對ARP廣播進行過濾, arptables
         3、可以修改內核參數來實現, arp_ignore, arp_announce  
 實現DR模型需要注意的:
     1、RS和Director可以不在同一IP網段中, 但是一定要在同一物理網絡中
     2、請求報文必須經過Director, 但是響應報文一定不能通過Director
     3、RS的網關不能是Director
     4、不能實現端口映射
     5、RS可以是大部分操作系統
     6、DIP和RIP可以是公網地址


lvs實現方式之tun

lvs-tun.jpg-117.1kB

如圖tun工作流程如下:
        1、客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

        2、負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,并將此包發送給RS。

        3、RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,并將響應報文通過lo接口送給eth0網卡直接發送給客戶端。注意:需要設置lo接口的VIP不能在共網上出現。

     tun模型原理如下:
        TUN模型通過隧道的方式在公網中實現請求報文的轉發,客戶端請求VIP(Director),Director不修改             請求報文的源IP和目標IP,而是在IP首部前附加DIP和對應RIP的地址并轉發到RIP上,RS收到請求報             文, 本地的接口上也有VIP, 遂直接響應報文給CIP。

    需要注意的要點是:
                1、RIP,DIP,VIP都是公網地址 
                2、RS的網關不能指向DIP 
                3、請求報文必須通過Director, 響應報文一定不能經過Director 
                4、不支持端口映射 
                5、RS的操作系統必須支持隧道功能

lvs實現方式之FULLNAT

此處輸入圖片的描述

    FULLNAT實現原理:
                    FULLNAT是近幾年才出現的,客戶端請求VIP(Director),Director修改請求報文的源地址(DIP)和目標地址(RIP)并轉發給RS, FULLNAT模型一般是Director和RS處在復雜的內網環境中的實現。
    實現FULLNAT模型需要注意的:
        1、VIP是公網地址, DIP和RIP是內網地址, 但是無需在同一網絡中
        2、請求報文需要經過Director, 響應報文也要通過Director
        3、RIP接收到的請求報文的源地址為DIP,目標地址為RIP
        4、支持端口映射
        5、RS可以是任意的操作系統

lvs之算法

lvs到底是根據什么來將請求負載均衡到real server上去的呢?
         事實上lvs支持10中算法來決定如何將用戶請求調度到real server上去。

調度算法分為兩種:靜態算法和動態算法。
           靜態調度算法: 根據算法本身進行調度, 不考慮RS的狀態  
           動態調度算法: 根據算法和RS的實時負載進行調度


靜態算法

①.RR:輪詢調度(Round Robin)
  調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載?

②.WRR:加權輪詢(Weight RR)
  調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。

③.DH:目標地址散列調度(Destination Hash )
  根據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

④.SH:源地址 hash(Source Hash)
  源地址散列”調度算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空?

 

動態算法

    ①.LC:最少鏈接(Least Connections)
  調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用”最小連接”調度算法可以較好地均衡負載。

    ②.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)
  在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載?調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。

    ③.SED:最短延遲調度(Shortest Expected Delay )
  在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處于活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處于無連接狀態。

    ④.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)
  無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對于DNS的UDP不需要考慮非活動連接,而httpd的處于保持狀態的服務就需要考慮非活動連接給服務器的壓力。

    ⑤.LBLC:基于局部性的最少鏈接(locality-Based Least Connections)
  基于局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統?該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器?

    ⑥. LBLCR:帶復制的基于局部性最少連接(Locality-Based Least Connections with Replication)
  帶復制的基于局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統?它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射?該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器?同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

原創文章,作者:Net17_desperado,如若轉載,請注明出處:http://www.www58058.com/65436

(0)
Net17_desperadoNet17_desperado
上一篇 2017-01-03
下一篇 2017-01-03

相關推薦

  • 第四周作業

    1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 [root@localhost ~]# chmod -R g=,o=  /home/tuser1 [root@localhost home]# ll drwx——  3 root&…

    Linux干貨 2016-12-26
  • vim編輯器

    導讀:      本章將主要介紹Linux中的一種常用文本編輯器vim,具體內容如下:       □使用vi和vim的三種主要模式       ?移動光標,進入插入模式       ?改變、刪除、復制文本     &n…

    Linux干貨 2016-08-15
  • 安全與加密、申請CA證書

    本章內容 v  1、安全機制  2、對稱加密  3、不對稱加密 4、散列算法  5、PKI 和CA v 在互聯網數據傳輸的過程的,數據的安全私密性是及其重要的,所以就有數據的加密和解密的過程。 數據加密,是一門歷史悠久的技術,指通過加密算法和加密密鑰將明文轉變為密文,而解密則是通過解密算法和解密密鑰將密文恢復為明文。它…

    Linux干貨 2016-12-04
  • 簡單易懂的CentOS啟動流程

    在使用Linux操作系統時,我們只需要按下電源鍵,等待一會兒,登錄終端就呈現在我們眼前,在這段時間內,操作系統究竟做了哪些事情? 先上一張流程梗概圖,你會對啟動流程有個大致的了解 啟動流程詳解 POST加電自檢   主板在接通電源后,系統首先由POST程序來對CPU、主板、內存、硬盤子系統、顯示子系統串并行接口、鍵盤、CD-ROm光驅等硬件進行檢測 讀取MB…

    Linux干貨 2016-09-11
  • 文件查找

    文件查找: locate查找:     locate:     依賴于事先構建好的索引庫,操作系統剛完成沒有       系統自動實現(周期性任務);      &nbs…

    Linux干貨 2016-08-15
  • class 11 壓縮軟件(二)、shell編程(三)和軟件包管理(一)

    一、壓縮軟件(二) tar tar [OPTION]… (1) 創建歸檔     tar -c -f / PATH/TO/SOMEFILE .tar FILE…     tar cf…

    Linux干貨 2016-08-21
欧美性久久久久