LVS - 相關介紹、工作模式和排程演算法的說明

襲冷發表於2018-05-17
一、簡介
    LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬伺服器,LVS 已經是 Linux 核心標準的一部分。是一個虛擬的伺服器叢集系統,可以在unix/linux平臺下實現負載均衡叢集功能
    叢集就是一組相互獨立的計算機,通過高速的網路組成一個計算機系統,每個叢集節點都是執行其自己程式的一個獨立伺服器。常用開源叢集軟體有lvs、keepalived、haproxy、nginx、heartbeat等;常用商業叢集硬體有F5、Netscaler、Radware等

    
二、相關
    1、組成
        1). ipvs(Ip Virtual Server):一段程式碼工作在核心空間,叫ipvs,是真正生效實現排程的程式碼
        2). ipvsadm:另外一段是工作在使用者空間,叫ipvsadm,負責為ipvs核心框架編寫規則,定義誰是叢集服務,而誰是後端真實的伺服器(Real Server)

    2、原理
        1). 當使用者向負載均衡排程器(Director Server)發起請求,排程器將請求發往至核心空間
        2). PREROUTING鏈首先會接收到使用者請求,判斷目標IP確定是本機IP,將資料包發往INPUT鏈
        3). IPVS是工作在INPUT鏈上的,當使用者請求到達INPUT時,IPVS會將使用者請求和自己已定義好的叢集服務進行比對,如果使用者請求的就是定義的叢集服務,那麼此時IPVS會強行修改資料包裡的目標IP地址及埠,並將新的資料包發往POSTROUTING鏈
        4). POSTROUTING連結收資料包後發現目標IP地址剛好是自己的後端伺服器,那麼此時通過選路,將資料包最終傳送給後端的伺服器
 
    3、術語
        D S:Director Server,指的是前端負載均衡器節點
        R S:Real Server,後端真實的工作伺服器
        VIP:Virtual IP,向外部直接面向使用者請求,作為使用者請求的目標的IP地址
        DIP:Director Server IP,主要用於和內部主機通訊的IP地址
        RIP:Real Server IP,後端伺服器的IP地址。
        CIP:Client IP,訪問客戶端的IP地址。

三、工作模式
    1.VS/NAT(網路地址轉換)
        1). 原理
            (a). 當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP 
            (b). PREROUTING檢查發現資料包的目標IP是本機,將資料包送至INPUT鏈
            (c). INPUT鏈上的IPVS比對資料包請求的服務是否為叢集服務,若是,修改資料包的目標IP地址為後端真實伺服器RIP,然後將資料包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP 
            (d). POSTROUTING鏈通過選路,將資料包傳送給Real Server
            (e). Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP 
            (f). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP

        2). 特性
            (a). RS應該使用私有地址,RS的閘道器必須指向DIP
            (b). DIP和RIP必須在同一個網段內
            (c). 請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成為效能瓶頸
            (d). 支援埠對映
            (e). RS可以使用任意作業系統
            (f). 對Director Server壓力會比較大,請求和響應都需經過director server

    2、VS/TUN(IP隧道模式)
        1). 原理
            (a). 當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
            (b). PREROUTING檢查發現資料包的目標IP是本機,將資料包送至INPUT鏈
            (c). IPVS比對資料包請求的服務是否為叢集服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標IP為RIP。然後發至POSTROUTING鏈。 此時源IP為DIP,目標IP為RIP 
            (d). POSTROUTING鏈根據最新封裝的IP報文,將資料包發至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。 此時源IP為DIP,目標IP為RIP
            (e). RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裡面還有一層IP首部,而且目標是自己的lo介面VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo介面送給eth0網路卡,然後向外傳遞。 此時的源IP地址為VIP,目標IP為CIP

        2). 特性
            (a). RIP、VIP、DIP全是公網地址
            (b). RS的閘道器不會也不可能指向DIP
            (c). 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
            (d). 不支援埠對映
            (e). RS的系統必須支援隧道

    3、VS/DR(直接路由
        1). 原理
            (a). 當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
            (b). PREROUTING檢查發現資料包的目標IP是本機,將資料包送至INPUT鏈
            (c). IPVS比對資料包請求的服務是否為叢集服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將資料包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址 
            (d). 由於DS和RS在同一個網路中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麼此時資料包將會發至Real Server。
            (e). RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo介面傳送給eth0網路卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP 
            (f). 響應報文最終送達至客戶端

        2). 特性
            (a). 保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS
            (b). RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過網際網路對RIP進行直接訪問
            (c). RS跟Director Server必須在同一個物理網路中
            (d). 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
            (e). 不支援地址轉換,也不支援埠對映
            (f). RS可以是大多數常見的作業系統
            (g). RS的閘道器絕不允許指向DIP(因為我們不允許他經過director)
            (h). RS上的lo介面配置VIP的IP地址
            (i). RS和DS必須在同一機房中
            (-). 特a解決方案:
                  在前端路由器做靜態地址路由繫結,將對於VIP的地址僅路由到Director Server
                  在arp的層次上實現在ARP解析時做防火牆規則,過濾RS響應ARP請求。這是由iptables提供的
                  修改RS上核心引數(arp_ignore和arp_announce)將RS上的VIP配置在lo介面的別名上,並限制其不能響應對VIP地址解析請求
                  
四、排程演算法
    1、輪叫排程 rr (Round Robin)
        這種演算法是最簡單的,就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,排程器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去

    2、加權輪叫 wrr (Weighted Round Robin)
        這種演算法比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種優化和補充, LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A的2倍。權值越高的伺服器,處理的請求越多

    3、最少連結 lc (Least Connections)
        這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1 

    4、加權最少連結 wlc (Weighted Least Connections)
        這個演算法比 lc 多了一個權重的概念。

    5、基於區域性性的最少連線排程演算法 lblc (Locality-Based Least Connections)
        這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器

    6、帶複製的基於區域性性的最少連線的連線演算法 lblcr (Locality-Based Least Connections with Replication)
        記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高

    7、目標地址雜湊排程演算法 dh (Destination Hashing)
        該演算法是根據目標 IP 地址通過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器

    8、源地址雜湊排程演算法 sh (Source Hashing)

        與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源


五、參考資料

    http://www.cnblogs.com/liwei0526vip/p/6370103.html




相關文章