LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

LVS簡介


LVS(Linux Virtual Server)即Linux虛擬服務器,是由章文嵩博士主導的開源負載均衡項目,目前LVS已經被集成到Linux內核模塊中。該項目在Linux內核中實現了基於IP的數據請求負載均衡調度方案,其體系結構如圖1所示,終端互聯網用戶從外部訪問公司的外部負載均衡服務器,終端用戶的Web請求會發送給LVS調度器,調度器根據自己預設的算法決定將該請求發送給後端的某臺Web服務器,比如,輪詢算法可以將外部的請求平均分發給後端的所有服務器,終端用戶訪問LVS調度器雖然會被轉發到後端真實的服務器,但如果真實服務器連接的是相同的存儲,提供的服務也是相同的服務,最終用戶不管是訪問哪臺真實服務器,得到的服務內容都是一樣的,整個集羣對用戶而言都是透明的。最後根據LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數據發送到終端用戶,LVS工作模式分爲NAT模式、TUN模式、以及DR模式。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

正向代理

只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中,正向代理指的是客戶端代理,是由用戶控制並知曉的代理方式,如我不能訪問fb,然後使用了某國外服務器作爲跳板機,最後成功訪問了就是正向代理。

反向代理

指以代理服務器來接受Internet上的連接請求,然後將請求轉發給內部網絡上的服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器,反向代理指的是服務端代理,在大型網站背後並不是只有一臺機器提供服務,比如我訪問微博,微博的某一個反向代理服務器將我解析到內部服務器的一臺機器,然後這臺機器給我提供微博的消息(當然實際情況比這個複雜的多),這些對於用戶都是不可見的,我們只會感覺只有一臺機器與我交互。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

負載均衡

Load Balance)讓負載均衡,當然這是一個簡單的概括,我在微信裏看的架構師之路寫的一篇如何實現負載均衡的文章就不錯,我有10臺機器都提供web服務,那麼我如何均衡的利用這10臺機器呢,讓這10臺機器保證高性能、高可用、高併發就是負載均衡要考慮和要做的事情。

實現負載均衡一般可以使用順序、比重、流量、服務類別等進行分配,負載均衡的部署方式也分爲路由和服務直接返回模式,實現負載均衡的主要幾個方式:
  • http重定向

    下載網站用的較多,其實也算一種負載均衡,工作在應用層的業務代碼中

  • DNS負載均衡

    DNS負載提供域名到IP解析的過程,我們實例查看百度的域名解析其實是一對多的,這時候DNS服務器也就充當了負載均衡,很多域名運營商提供的智能dns以及多線解析都是利用了DNS負載均衡的技術,開源的BIND就可提供電信聯通多線解析等強大的技術。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

*     反向代理負載均衡
*     IP負載均衡
*     直接路由
*     IP隧道
*     F5硬件負載均衡

四層負載和七層負載

所謂四層就是基於IP+端口的負載均衡,主要代表有lvs。

七層負載也稱內容交換,就是基於URL等應用層信息的負載均衡,主要代表有nginx。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

LVS的優點和缺點


優點

1、開源,免費
2、在網上能找到一些相關技術資源
3、具有軟件負載均衡的一些優點

缺點

1、最核心的就是沒有可靠的支持服務,沒有人對其結果負責;
2、功能比較簡單,支持複雜應用的負載均衡能力較差,如算法較少等;
3、開啓隧道方式需重編譯內核;
4、配置複雜;
5、主要應用於LINUX,目前沒有專門用於WINDOWS的版本,不過可以通過配置,使windows成爲LVS集羣中的real server(win2003、win2008中)。

LVS工作原理


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 : 工作於內核空間,主要用於使用戶定義的策略生效
*     ipvsadm : 工作於用戶空間,主要用於用戶定義和管理集羣服務的工具

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

上圖所示,ipvs工作於內核空間的INPUT鏈上,當收到用戶請求某集羣服務時,經過PREROUTING鏈,經檢查本機路由表,送往INPUT鏈;在進入netfilter的INPUT鏈時,ipvs強行將請求報文通過ipvsadm定義的集羣服務策略的路徑改爲FORWORD鏈,將報文轉發至後端真實提供服務的主機。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

LVS集羣負載均衡器接受服務的所有入展客戶端的請求,然後根據調度算法決定哪個集羣節點來處理回覆客戶端的請求。
LVS虛擬服務器的體系如下圖所示,一組服務器通過高速的局域網或者地理分佈的廣域網相互連接,在這組服務器之前有一個負載調度器(load balance)。負載調度器負責將客戶的請求調度到真實服務器上。這樣這組服務器集羣的結構對用戶來說就是透明的。客戶訪問集羣系統就如只是訪問一臺高性能,高可用的服務器一樣。客戶程序不受服務器集羣的影響,不做任何修改。
就比如說:我們去飯店吃飯點菜,客戶只要跟服務員點菜就行。並不需要知道具體他們是怎麼分配工作的,所以他們內部對於我們來說是透明的。此時這個服務員就會按照一定的規則把他手上的活,分配到其他人員上去。這個服務員就是負載均衡器(LB)而後面這些真正做事的就是服務器集羣。

底下是官網提供的結構圖:

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

LVS工作過程

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

客戶請發送向負載均衡服務器發送請求。負載均衡器接受客戶的請求,然後先是根據LVS的調度算法(8種)來決定要將這個請求發送給哪個節點服務器。然後依據自己的工作模式(3種)來看應該如何把這些客戶的請求如何發送給節點服務器,節點服務器又應該如何來把響應數據包發回給客戶端。

LVS工作模式


1)VS/NAT模式(Network address translation)
2)VS/TUN模式(tunneling)
3)DR模式(Direct routing)

NAT模式-網絡地址轉換

Virtualserver via Network address translation(VS/NAT)

這個是通過網絡地址轉換的方法來實現調度的。首先調度器(LB)接收到客戶的請求數據包時(請求的目的IP爲VIP),根據調度算法決定將請求發送給哪個後端的真實服務器(RS)。然後調度就把客戶端發送的請求數據包的目標IP地址及端口改成後端真實服務器的IP地址(RIP),這樣真實服務器(RS)就能夠接收到客戶的請求數據包了。真實服務器響應完請求後,查看默認路由(NAT模式下我們需要把RS的默認路由設置爲LB服務器。)把響應後的數據包發送給LB,LB再接收到響應包後,把包的源地址改成虛擬地址(VIP)然後發送回給客戶端。

調度包過程IP包詳細圖

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

原理圖簡述:

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、每臺內部的節點服務器的網關地址必須是調度器LB的內網地址。
4、NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口可以不一致。

TUN模式

virtual server via ip tunneling模式:採用NAT模式時,由於請求和響應的報文必須通過調度器地址重寫,當客戶請求越來越多時,調度器處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求的報文通過IP隧道轉發到真實的服務器。真實的服務器將響應處理後的數據直接返回給客戶端。這樣調度器就只處理請求入站報文,由於一般網絡服務應答數據比請求報文大很多,採用VS/TUN模式後,集羣系統的最大吞吐量可以提高10倍。
VS/TUN的工作流程圖如下所示,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裏面,然後發送給RS節點服務器,節點服務器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址發送給客戶不用經過LB服務器。

Tunnel原理流程圖

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

原理圖過程簡述:
1)客戶請求數據包,目標地址VIP發送到LB上。
2)LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然後發送出去。
3)RS節點服務器根據IP Tunnel包頭信息(此時就又一種邏輯上的隱形隧道,只有LB和RS之間懂)收到請求包,然後解開IP Tunnel包頭信息,得到客戶的請求包並進行響應處理。
4)響應處理完畢之後,RS服務器使用自己的出公網的線路,將這個響應數據包發送給客戶端。源IP地址還是VIP地址。(RS節點服務器需要在本地迴環接口配置VIP,後續會講)

DR模式(直接路由模式)

Virtual server via direct routing (vs/dr)
DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器響應後的處理結果直接返回給客戶端用戶。同TUN模式一樣,DR模式可以極大的提高集羣系統的伸縮性。而且DR模式沒有IP隧道的開銷,對集羣中的真實服務器也沒有必要必須支持IP隧道協議的要求。但是要求調度器LB與真實服務器RS都有一塊網卡連接到同一物理網段上,必須在同一個局域網環境。
DR模式是互聯網使用比較多的一種模式。

DR模式原理圖

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

DR模式原理過程簡述:
VS/DR模式的工作流程圖如上圖所示,它的連接調度和管理與NAT和TUN中的一樣,它的報文轉發方法和前兩種不同。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相同的端口提供服務。

官方三種負載均衡技術比較總結表

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

IPTABLES 工作原理

IPTABLES其實不是真正的防火牆,它實際上由兩個組件netfilter 和 iptables 組成,netfilter 纔是真正的防火牆,位於內核空間,而iptables是位於用戶空間的一個命令行工具,我們使用這個工具制定規則,然後netfilter執行iptables工具制定的規則。
    Netfilter是Linux引入的一個子系統,它作爲一個通用的、抽象的框架,提供一整套的hook函數的管理機制,使得諸如數據包過濾、網絡地址轉換(NAT)和基於協議類型的連接跟蹤成爲了可能。netfilter的架構就是在整個網絡流程的若干位置放置了一些檢測點(HOOK),而在每個檢測點上登記了一些處理函數進行處理。IP層的五個HOOK點(鏈、鉤子)的如下
1. NF_IP_PRE_ROUTING
剛剛進入網絡層的數據包通過此點(剛剛進行完版本號,校驗和等檢測), 目的地址轉換在此點進行。
2. NF_IP_LOCAL_IN
經路由查找後,送往本機的通過此檢查點,INPUT包過濾在此點進行。
3. NF_IP_FORWARD
要轉發的包通過此檢測點,FORWARD包過濾在此點進行。
4. NF_IP_POST_ROUTING
所有馬上便要通過網絡設備出去的包通過此檢測點,內置的原地址轉換功能(包括地址僞裝)在此點進行。
 5. NF_IP_LOCAL_OUT
本機進程發出的包通過此檢測點,OUTPUT包過濾在此點進行。

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

如上圖所示,客戶端在訪問服務器的web服務時,首先經過prerouting鏈,然後接着對數據包進行路由,判斷訪問的目標是否爲本機

1.目標爲本機
則通過input鏈到達用戶空間的web服務中,若web服務確實有個進程監聽請求數據包的請求的端口,就開始響應服務,負責則拒絕,接着,當web服務要響應客戶端請求時,web服務會將響應數據報文發送至output鏈,postrouting鏈,最後響應至客戶端。整個過程如上圖藍線所示。
2.目標不是本機
則通過forward鏈,postrouting鏈然後發送至其他主機。路由之後的過程如上圖紅線所示。

LVS轉發原理

  
首先在Linux2.4.23之後的版本內核中才內置了LVS,查看Linux內核版本的命令如下
  
命令:cat /proc/version
命令:uname -a

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

    LVS和IPTABLES一樣,是也是兩段式的,也由兩個部分組成,ipvsadm和ipvs,ipvsadm工作在用戶空間上書寫規則,然後發送給工作在內核上的ipvs IP負載均衡軟件,ipvs監控在INPUT鏈上。

 
當用戶發送請求通過prerouting到達input鏈時,ipvs根據ipvsadm發送的規則,一旦發現用戶請求的時一個集羣服務,會強行修改請求報文,將請求發送到postrouting鏈上,然後由post_routing發送至其他主機,如上圖紅線所示。
  由上面描述可以看出,LVS的機制和IPTABLES的機制可以說是衝突的,所以,他們不能一起使用。

LVS調度算法


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

LVS負載均衡(LVS簡介、三種工作模式、、調度原理以及十種調度算法)

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

1、一般的網絡服務,如http,mail,mysql等常用的LVS調度算法爲:
a.基本輪詢調度rr
b.加權最小連接調度wlc
c.加權輪詢調度wrc
2、基於局部性的最小連接lblc和帶複製的給予局部性最小連接lblcr主要適用於web cache和DB cache
3、源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集羣中,可以保證整個系統的出入口唯一。
實際適用中這些算法的適用範圍很多,工作中最好參考內核中的連接調度算法的實現原理,然後根據具體的業務需求合理的選型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章