企業集羣平臺LVS負載均衡算法分析與實現

一、LVS集羣常見架構圖

wKioL1cdqYuR1FM-AABfNtjHVlQ038.jpg


    Load Balancer層:位於整個集羣系統的最前端,由一臺或多臺負載調度器(Director Server)組成。LVS核心模板IPVS就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有爲完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)。同時,在Director Server上還要安裝對Real Server的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時可以把它從LVS路由表中剔除,在恢復時重新加入。

    Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是Web服務器、Mail服務器、FTP服務器、DNS服務器、視頻服務器中的一個或多個,每個Real Server之間通過高速的LAN或分佈在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。

    hared Storage層:是爲所有Real Server提供共享存儲空間和內容一致性的存儲區域,一般由磁盤陣列設備組成。,爲了提供內容的一致性,一般可以通過NFS網絡文件系統共享數據,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以採用集羣文件系統,例如Red hat的GFS文件系統,Oracle提供的OCFS2文件系統等。


    從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的操作系統只有Linux和FreeBSD,Linux 2.6內核完全內置了LVS 的各個模塊,不用任何設置就可以支持LVS功能。 

    對於Real Server,幾乎所有的系統平臺,Linux、Windows、Solaris、AIX、BSD系列都能很好地支持。


二、負載調度算法


    負載均衡技術有很多實現方案,有基於DNS域名輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度算法中,執行效率最高的是IP負載均衡技術。

    LVS的IP負載均衡技術是通過IPVS模塊來實現的,IPVS是LVS集羣系統的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務器。這個虛擬IP一般稱爲LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然後由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。

    在用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術。IPVS實現負載均衡的方式有三種,分別是NAT(FULL NAT)、TUN和DR,下面進行詳細介紹。


三、DR模式


下面是DR模式數據傳輸圖:

wKioL1cdqfDDuDE5AAEH-FhXD0k761.jpg


    DR模式: 即Virtual Server via Direct Routing,也就是用直接路由技術實現虛擬服務器。這種方式的連接調度和管理與前兩種一樣,但它的報文轉發方法又有所不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度方式中性能最好的。

下面是DR模式IP包調度過程圖:

wKiom1cdqUDzx7VHAABsJqlqUIA056.png



    原理圖簡述:

    DR模式將報文直接路由給目標真實服務器。在DR模式中,調度器根據各個真實服務器的負載情況,連接數多少等,動態地選擇一臺服務器,不修改目標IP地址和目標端口,也不封裝IP報文,而是將請求報文的數據幀的目標MAC地址改爲真實服務器的MAC地址。然後再將修改的數據幀在服務器組的局域網上發送。因爲數據幀的MAC地址是真實服務器的MAC地址,並且又在同一個局域網。那麼根據局域網的通訊原理,真實復位是一定能夠收到由LB發出的數據包。真實服務器接收到請求數據包的時候,解開IP包頭查看到的目標IP是VIP。

    此時只有自己的IP符合目標IP纔會接收進來,所以我們需要在本地的迴環藉口上面配置VIP。另:由於網絡接口都會進行ARP廣播響應,但集羣的其他機器都有這個VIP的lo接口,都響應就會衝突。所以我們需要把真實服務器的lo接口的ARP響應關閉掉。

然後真實服務器做成請求響應,之後根據自己的路由信息將這個響應數據包發送回給客戶,並且源IP地址還是VIP。

    DR模式小結:

1、通過在調度器LB上修改數據包的目的MAC地址實現轉發。注意源地址仍然是CIP,目的地址仍然是VIP地址。

2、請求的報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此併發訪問量大時使用效率很高(和NAT模式比)

3、因爲DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和調度器LB只能在一個局域網裏面

4、RS主機需要綁定VIP地址在LO接口上,並且需要配置ARP抑制。

5、RS節點的默認網關不需要配置成LB,而是直接配置爲上級路由的網關,能讓RS直接出網就可以。

6、由於DR模式的調度器僅做MAC地址的改寫,所以調度器LB就不能改寫目標端口,那麼RS服務器就得使用和VIP相同的端口提供服務。


四、NAT/FULL NAT模式


wKiom1cdqp3yaR3KAAEEmB3Cm0c435.jpg

    NAT模式: 即Virtual Server via Network Address Translation,也就是網絡地址翻譯技術實現虛擬服務器。當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時將報文的目標端口也改成選定的Real Server的相應端口,最後將報文請求發送到選定的Real Server。在服務器端得到數據後,Real Server將數據返回給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然後把數據發送給用戶,完成整個負載調度過程。


下面是NAT模式IP包調度過程圖:

wKiom1cdqxjwrML1AABRSqP-LGU142.png


原理圖簡述:

1、客戶端請求數據,目標IP爲VIP

2、請求數據到達LB服務器,LB根據調度算法將目的地址修改爲RIP地址及對應端口(此RIP地址是根據調度算法得出的。)並在連接HASH表中記錄下這個連接。

3、數據包從LB服務器到達RS服務器webserver,然後webserver進行響應。Webserver的網關必須是LB,然後將數據返回給LB服務器。

4、收到RS的返回後的數據,根據連接HASH表修改源地址爲VIP、目標地址爲CIP,及對應端口80.然後數據就從LB出發到達客戶端。

5、客戶端收到的就只能看到VIP\DIP信息。

NAT模式優缺點:

1、NAT技術將請求的報文和響應的報文都需要通過LB進行地址改寫,因此網站訪問量比較大的時候LB負載均衡調度器有比較大的瓶頸,一般要求最多之能10-20臺節點

2、只需要在LB上配置一個公網IP地址就可以了。

3、每臺內部的realserver服務器的網關地址必須是調度器LB的內網地址。

4、NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口可以不一致。



FULL NAT 模式


FULL NATT的基本原理:

FULL NAT  在client請求VIP 時,不僅替換了package 的dst ip,還替換了package的 src ip;但VIP 返回給client時也替換了src ip。

wKiom1cdq1nBnILvAABQjnjqUnw364.png


(1)、首先client 發送請求package給VIP;  

(2)、 VIP 收到package後,會根據LVS設置的LB算法選擇一個合適的realserver,然後把package 的DST IP 修改爲realserver IP;把sorce ip 改成 lvs 集羣的LB IP 

(3)、 realserver 收到這個package後判斷dst ip 是自己,就處理這個package ,處理完後把這個包發送給LVS LB IP。

(4)、 LVS 收到這個package 後把sorce ip改成VIP的IP,dst ip改成 client ip然後發送給client

FULL NAT 模式的注意事項:

FULL NAT 模式也不需要 LBIP 和realserver ip 在同一個網段;

full nat 跟nat 相比的優點是:保證RS回包一定能夠回到LVS;因爲源地址就是LVS--> 不確定

full nat  因爲要更新sorce ip 所以性能正常比nat 模式下降 10%


五、IP TUNNEL模式

wKioL1cdrIzDBW97AAEQpBC5Ne4591.jpg

    TUN :即Virtual Server via IP Tunneling 也就是通過IP隧道技術實現虛擬服務器。在VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器。此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以在獨立的一個網絡中。因此,在TUN方式中,調度器將只處理用戶的報文請求,從而使集羣系統的吞吐量大大提高。


TUN的工作流程圖如下所示:


wKiom1cdq_KjUFNoAABiHriJPGA251.png

    它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裏面,然後發送給RS節點服務器,節點服務器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址發送給客戶不用經過LB服務器。


原理圖過程簡述:

1、客戶請求數據包,目標地址VIP發送到LB上。

2、LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然後會根據LVS設置的LB算法選擇一個合適的realserver;並把client發送的package 包裝到一個新的IP包裏面;新的IP包的dst是realserver的IP。

3、RS節點服務器根據IP Tunnel包頭信息收到請求包,realserver 收到這個package後判斷dst ip 是自己,然後解析出來的package的dst是VIP;會檢測我們的網卡上是否綁定了VIP的ip地址;如果綁定了就會處理這個包,如果沒有直接丟掉。 我們一般在realserver上面 lo:0 綁定了VIP的ip地址,就可以處理得到客戶的請求包並進行響應處理。

4、響應處理完畢之後,RS服務器使用自己的公網線路將這個響應數據包發送給客戶端。源IP地址是VIP地址。


IP TUNNEL 模式的注意事項:

TUNNEL 模式必須在所有的realserver 機器上面綁定VIP的IP地址

TUNNEL 模式的vip ------>realserver 的包通信通過TUNNEL 模式,不管是內網和外網都能通信,所以不需要lvs vip跟realserver 在同一個網段內

TUNNEL 模式 realserver會把packet 直接發給client 不會給lvs了

TUNNEL 模式走的隧道模式,所以運維起來比較難,所以一般不用。


六、LVS負載調度算法


    Lvs的調度算法決定了如何在集羣節點之間分佈工作負荷。當director調度器收到來自客戶端訪問VIP的上的集羣服務的入站請求時,director調度器必須決定哪個集羣節點應該處理請求。Director調度器用的調度方法基本分爲兩類:

固定調度算法:rr,wrr,dh,sh

動態調度算法:wlc,lc,lblc,lblcr

wKiom1cdrEfzxCRLAAA7hr0juKw018.png

LVS調度算法的生產環境選型

    1、一般的網絡服務,如www,mail,mysql等常用的LVS調度算法爲:

a.基本輪詢調度rr

b.加權最小連接調度wlc

c.加權輪詢調度wrc

    2、基於局部性的最小連接lblc和帶複製的給予局部性最小連接lblcr主要適用於web cache和DB cache

    3、源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集羣中,可以保證整個系統的出入口唯一。

    實際適用中這些算法的適用範圍很多,工作中最好參考內核中的連接調度算法的實現原理,然後根據具體的業務需求合理的選型。

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