Linux---負載均衡---lvs

一、lvs簡介

    LVS是 Linux Virtual Server 的簡稱,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。這是一個由章文嵩博士發起的,是中國國內最早出現的自由軟件開源項目之一,現在 LVS 已經是 Linux 內核標準的一部分。使用 LVS 可以達到的技術目標是:通過 LVS 達到的負載均衡技術和 Linux 操作系統實現一個高性能高可用的 Linux 服務器集羣,它具有良好的可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的性能。LVS 是一個實現負載均衡集羣的開源軟件項目,LVS架構從邏輯上可分爲調度層、Server集羣層和共享存儲。

    在已有的IP負載均衡技術中,主要有通過網絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,我們稱之爲VS/NAT技術(Virtual Server via Network Address Translation)。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,我們提出了通過IP隧道實現虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。VS/NAT、VS/TUN和VS/DR技術是LVS集羣中實現的三種IP負載均衡技術。

二、lvs組成

1. 安裝包

[root@mumu 7-1 ~]# yum -y install ipvsadm

}WC2H3TQI~G~A2HA@_GO4B5.png

2. 組成

    LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。

2.1 ipvs(ip virtual server)

    工作在內核空間,是真正生效實現調度的代碼。
2.2 ipvsadm

    工作在用戶空間,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)。

三、lvs工具的簡單使用

1、管理集羣服務

    添加一條新的虛擬服務

ipvsadm -A -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags] 
    -A:添加一條新的虛擬服務     
    -t:TCP協議的端口,VIP:TCP_POPT
    -u:UDP協議的端口,UIP:UCP_POP
    -f:FWM: 防火牆標記;firewall MARK,是一個數字
    -p:配置持久化時間
    -M:定義Mac地址
    --pe:定義持久化引擎
    -b:定義進程調度標記
    service-address:某集羣服務的IP地址
    -s:指定集羣的調度算法,如:rr, wrr, lc等,默認爲wlc

    刪除一條虛擬服務

ipvsadm  -D -t|u|f service-address
    -D:刪除一條虛擬服務

    修改一條虛擬服務

ipvsadm  -E -t|u|f service-address
    -E:修改一條虛擬服務

2、管理集羣服務中的RS

    在一個虛擬服務中添加一個新的真實服務器

ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight]            
    -t|u|f service-address:事先定義好的某類型集羣服務            
    -r server-address: 定義某RS的地址,在NAT模型中,可使用IP:PORT實現端口映射;
     [-g|i|m]: LVS類型    
        -g: gateway, dr類型                
        -i: ipip, tun類型                
        -m: masquerade, nat類型
    [-w weight]: 定義服務器權重

    刪除某個真實服務器

ipvsadm -d -t|u|f service-address -r server-address
    -d:刪除某個真實服務器,即RS

    修改某個真實服務器

ipvsadm -e -t|u|f service-address -r server-address
    -e:修改某個真實服務器,即RS

    查看某個真實服務器

ipvsadm -L|l  -t|u|f service-address -r server-address
    -L|l :查看某個真實服務器,即RS
    -n: 數字格式顯示主機地址和端口            
    --stats:統計數據           
    --rate: 速率            
    --timeout: 顯示tcp、tcpfin和udp的會話超時時長            
    -c: 顯示當前的ipvs連接狀況

3、管理ipvs規則

ipvsadm -S|R > 文件路徑
    -C:清除所有的集羣服務規則   
    -S = ipvsadm-save:保存之前所定義的集羣服務規則
    -R = ipvsadm-restore:重載此前所定義的集羣服務規則      
    文件路徑:指定的保存或重載的文件路徑
ipvsadm 
    -C:清除所有的集羣服務規則
ipvsadm -Z -t|u|f service-address
    -Z:將當前定義的所有集羣服務清零

4、查看統計

查看當前配置的虛擬服務和各個RS的權重

  ipvsadm -Ln

查看當前ipvs模塊中記錄的連接(可用於觀察轉發情況)

  ipvsadm -lnc

查看ipvs模塊的轉發情況統計

  ipvsadm -Ln --stats | --rate

四、lvs的三種工作模式

1、NAT 模式-網絡地址轉換

1. 模式流程圖

781035-20170208130339541-1597888386.png

2、NAT模式原理

(1)當客戶端發送請求報文請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈,此時報文的源IP爲CIP,目標IP爲VIP 

(2)內核空間中的PREROUTING鏈會檢查數據包的目標IP是否是本機IP,若是,將數據包送至INPUT鏈

(3)判斷IPVS比對數據包請求的服務是否爲集羣服務,若是,調度器會把數據包的目標IP地址修改爲後端真實服務器的IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP (此RIP地址是根據調度算法得出的)

(4)POSTROUTING鏈根據調度算法決定將數據包發送給後端的真實服務器(Real Server)

(5)Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP 

(6)Director Server在響應客戶端前,此時會將包的源IP地址修改爲自己的虛擬地址(VIP),然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP

(7)響應報文最終送達至客戶端

3、特點

(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP;

(2)請求報文和響應報文都必須經由Director轉發;Director易於成爲系統瓶頸;

(3)支持端口映射,可修改請求報文的目標PORT;

(4)vs必須是Linux系統,rs可以是任意系統;

4、優缺點

4.1 優點

    集羣中的物理服務器可以使用任何支持TCP/IP操作系統,只有負載均衡器需要一個合法的IP地址。

4.2 缺點

    擴展性有限。當服務器節點(普通PC服務器)增長過多時,負載均衡器將成爲整個系統的瓶頸,因爲所有的請求包和應答包的流向都經過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!

2、DR模式-封裝新的MAC地址

1. 模式流程圖

781035-20170208131643026-1985709106.png

2、DR模式原理

(1)當客戶端發送請求報文請求請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP

(2)內核空間中的PREROUTING鏈會檢查數據包的目標IP是否是本機IP,若是,將數據包送至INPUT鏈

(3)IPVS比對數據包請求的服務是否爲集羣服務,若是,將請求報文中的源MAC地址修改爲DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址,此時報文的源IP爲CIP,目標IP爲VIP

(4)因爲DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和調度器LB只能在一個局域網裏面,也可以簡單的理解爲在同一臺交換機上,所以是通過二層來傳輸,。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server

(5)RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP 

(6)響應報文最終送達至客戶端

3、特點

(1)確保前端路由器將目標IP爲VIP的請求報文發往Director

(2)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;

(3)RS跟Director要在同一個物理網絡;

(4) 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;

(5)不支持端口映射;

4、優缺點

4.1 優點

    和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器。

4.2 缺點

    要求負載均衡器的網卡必須與物理網卡在一個物理段上。

3、Tun模式-IP Tunnel封裝

1. 模式流程圖

781035-20170208132504057-1671947616.png

2、TUN模式原理

(1)當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP

(2)PREROUTING檢查發現數據包的目標IP是否是本機IP,若是,將數據包送至INPUT鏈

(3)IPVS比對數據包請求的服務是否爲集羣服務,若是,在請求報文的首部進行IP Tunnel封裝,即在原有的包頭加上IP Tunnel的包頭,然後發送出去,封裝源IP爲爲DIP,目標IP爲RIP。然後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP

(4)POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因爲在外層封裝多了一層IP首部,所以可以理解爲此時通過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP

(5)RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP Tunnel包頭信息後,會發現裏面還有一層IP首部,而且目標IP是自己的lo接口VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞,不需要經過負載均衡器。 此時的源IP地址爲VIP,目標IP爲CIP

(6)響應報文最終送達至客戶端

3、特點

(1)DIP, VIP, RIP都應該是公網地址;

(2)RS的網關不能,也不可能指向DIP;

(3)請求報文要經由Director,但響應不能經由Director;

(4)不支持端口映射;

(5)RS的OS得支持隧道功能;

4、優缺點

4.1 優點

    負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。所以,減少了負載均衡器的大量數據流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠爲很多RS進行分發。而且跑在公網上就能進行不同地域的分發。

4.2 缺點

    隧道模式的RS節點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。

五、lvs的調度算法

1、算法分類

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

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

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

2、算法介紹

1. 輪叫調度算法 rr(Round Robin)
    就是將請求按順序調度到不同的 RS 上,即是將請求在 RS 中均攤分配,該算法是這些調度算法中最簡單的。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,非常均衡地分發下去,但只適合於 RS 處理性能差不多的情況。

2. 加權輪詢調度算法 wrr(weight Round Robin,加權輪詢,以權重之間的比例實現在各主機之間進行調度)

    wrr算法是對rr算法的一種優化和補充,因此,wrr算法比rr算法多了一個權重的概念。lvs根據每臺服務器的性能,判斷給每臺服務器要添加的權值,依據這個權值給不同服務器分配任務。如果服務器A的權值爲1,服務器B的權值爲2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,將優先獲得任務,但處理的請求也越多,並且分配到的連接數將比權值低的服務器更多,權重的取值範圍 0 – 100,相同權值的 RS 得到相同數目的連接數。

3. 最小連接數調度算法 lc(Least-Connection)

    這個算法會根據後端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那麼請求就優先發給 RS1 

4. 加權最小連接數調度算法 wlc(Weighted Least-Connection Scheduling)

    wlc是lc的升級版,多了對權重的計算這一步。lvs獲得權值後,LB會比較將連接請求發送到當前連接最少的RS。

5. 基於地址的最少連接調度算法 lblc(Locality-Based Least Connection)

    這個算法是請求數據包的目標 IP 地址的一種調度算法,這個算法會先根據請求的目標IP地址,尋找該IP地址最近所使用的服務器,如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則就將這個請求分配給連接數最小的服務器,並以它作爲下一次分配的首先考慮。

6. 複雜的基於局部性最少的連接算法 lblcr(Locality-Based Least Connections withReplication)
    記錄的不是要給目標 IP 與一臺服務器之間的連接記錄,它會維護一個目標 IP 到一組服務器之間的映射關係,防止單點服務器負載過高。

7. 目標地址哈希調度算法 dh(Destination hashing:目標地址散列。把同一個IP地址的請求,發送給同一個server。)
    該算法是根據目標 IP 地址爲關鍵字通過散列函數查找一個靜態hash表,將目標 IP 與服務器建立映射關係,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器。

8. 源地址哈希調度算法 sh(source hashing,源地址散列。主要實現會話綁定,能夠將此前建立的session信息保留了)
    與目標地址散列調度算法類似,但它是根據源地址爲關鍵字通過散列函數查找一個靜態hash表,發往該目標 IP 的請求會靜態分配給固定的服務器。

9. 最短延遲調度算法 sed(Shortest Expected Delay)

    是wlc的進一步改進,爲了解決當權限過大時,會導致空閒服務器一直處於無連接狀態的問題,計算方式:Overhead=(Active+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目加一來實現,數目最小的接受下次請求,而+1的目的是爲了考慮加權的時候,非活動鏈接過多。

10. 永不排隊/最少對了調度算法 nq(Never Queue Scheduling)

    是sed的進一步升級,如果有臺RS的連接數等於零就直接分配過去,不需要再進行sed運算,保證不會有任何一個主機空閒。如果RS的連接數不等於零,在sed基礎上,無論計算結果如何,第二次客戶請求一定會給下一個RS,保證不會有一個RS空閒。

3、算法的生產環境選型

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

    a. 基本輪詢調度rr

    b. 加權最小連接調度wlc

    c. 加權輪詢調度wrc

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

(3)源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集羣中,可以保證整個系統的出入口唯一。實際適用中這些算法的適用範圍很多,工作中最好參考內核中的連接調度算法的實現原理,然後根據具體的業務需求合理的選型。


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