LVS 工作模型和調度算法

簡介

  LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在19985月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

LVS是四層負載均衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支持TCP/UDP的負載均衡

 

什么是負載均衡?

當單臺服務器性能不足時我們有兩種對其進行擴展的方式, 分別是向上擴展和向外擴展

向上擴展:

向上擴展意思是提升服務器的硬件性能來應對性能不足的問題

向外擴展:

向外擴展意思是新增服務器和現有服務器組成集群來應對性能不足的問題

 

在這兩種解決方案中, 我們一般情況下都選擇向外擴展

因為向上擴展所付出的代價和得到性能的提升不成正比, 大多時候提升服務器一倍的性能需要花費三倍的價格

向外擴展也有很多問題, 例如:如何協調兩臺服務器提供一服務, 用戶在兩臺服務器進行輪調時如何保存其的session信息….

 

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

 

負載均衡有軟件和硬件的實現方式

    硬件:F5 BIG IP, NetScaler

    軟件:

        傳輸層: LVS

        應用層: HAproxy, Nginx, Varnish, Perlbal….

 

LVS架構

為了更好地理解LVS, 先解釋一下相應的術語:

    Director: 負載均衡調度器, 負責在前端接受用戶請求根據特定的算法轉發到后端Real Server

    Real Server: 后端提供服務的服務器

    VIP: Director接受用戶請求的IP地址

    DIP: DirectorReal Server聯系的IP地址

    RIP: Real ServerIP地址

    CIP: Client IP, 客戶端的IP地址

 

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

blob.png

1.當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。

 

2.當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。

 

3.LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里面的目的地址及端口沒有在規則里面,那么這條數據包將被放行至用戶空間。

 

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

 

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

 

LVS 工作模型

 

LVS為了在不同場景中使用而提供了4種實現模型: 分別為NAT, DR, TUN, FULLNAT.

 

1.       NAT模型實現原理

blob.png

a)         客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP(負載均衡器前端地址)。

 

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

 

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

 

d)        然后lvs將此報文的源地址修改vip地址并發送給客戶端。

 

實現NAT模型有幾點需要注意的:

(1) RS應該和DIP應該使用私網地址,且RS的網關要指向DIP;

(2) 請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成為系統瓶頸;

(3) 支持端口映射;

(4) RS可以使用任意OS;

(5) RSRIPDirectorDIP必須在同一IP網絡;

 

2.       DR模型實現原理

blob.png

a)         客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

 

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

 

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

 

實現DR模型有一個最為關鍵的問題, 大家都知道Linux主機配置一個IP地址會向本網絡進行廣播來通告其他主機或網絡設備IP地址對應的MAC地址, 那么VIP分別存在于DirectorRS, IP不就沖突了么, 我們該如何解決這個問題?

 

事實上LVS并不能幫助我們解決這個麻煩的問題:

我們有多種方法可以解決上面的問題:

   (1) 網絡設備中設置VIP地址和DIrectorMAC地址進行綁定

   (2)  Linux系統中有一個軟件可以實現對ARP廣播進行過濾, arptables

   (3) 可以修改內核參數來實現, arp_ignore, arp_announce

實現DR模型需要注意的:

(1) 保證前端路由器將目標IPVIP的請求報文發送給director;

 (2) RSRIP可以使用私有地址;但也可以使用公網地址;

(3) RSDirector必須在同一物理網絡中;

(4) 請求報文經由Director調度,但響應報文一定不能經由Director

(5) 不支持端口映射;

(6) RS可以大多數OS

(7) RS的網關不能指向DIP;

 

3.       TUN模型實現原理

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

 

TUN的工作流程:

a)         客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

 

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

 

c)         RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理請求報文,并將響應報文通過lo接口送給eth0網卡直接發送給客戶端。

 

實現TUN模型需要注意的:

(1) RIP, DIP, VIP全得是公網地址;

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

(3) 請求報文必須經由director調度,但響應報文必須不能經由director

(4) 不支持端口映射;

(5) RSOS必須支持隧道功能;

 

4.       FULLNAT.模型實現原理

FULLNAT是近幾年才出現的, 客戶端請求VIP(Director), Director修改請求報文的源地址(DIP)和目標地址(RIP)并轉發給RS, FULLNAT模型一般是DirectorRS處在復雜的內網環境中的實現

FULLNAT工作流程:

a)         客戶端請求VIP

b)        Director接受到請求, 通過調度算法得出轉發的RS, 將源地址修改為DIP, 目標地址修改為對應RIP, 轉發給RS

c)         RS接受到請求后, 響應請求給DIP, DIP將響應報文源地址改為VIP, 目標地址改為CIP, 響應給CIP

實現FULLNAT模型需要注意的:

(1) VIP是公網地址;RIPDIP是私網地址,二者無須在同一網絡中;

(2) RS接收到的請求報文的源地址為DIP,因此要響應給DIP;

(3) 請求報文和響應報文都必須經由Director;

(4) 支持端口映射機制;

(5) RS可以使用任意OS;

 

LVS的調度算法

1.         靜態調度算法(4)

 

1)         RRRound Robin, 輪詢 將用戶請求輪詢到各個RS

2)         WRR: Weighted Round Robin, 加權輪輪詢, 根據每一臺RS的權重將用戶請求輪詢分發到各個RS

3)         SH: Source Hash, 源地址哈希, 將同一客戶端的請求轉發到同一個RS

4)         DH: Destination Hash, 將同一類型的請求轉發到同一個RS

 

2.         動態調度算法(6):

 

1)         LCleast connections, 根據最少連接數調度. 公式: Active*256+Inactive

2)         WLCWeighted Least Connections, 加權最少連接數調度. 公式: (Active*256+Inactive)/Weighted

3)         SEDShortest Expection Delay, 最短延遲預期. 公式: (Active+1)*256/Weighted

4)         NQNever Queue, 永不排隊, SED算法的改進

5)         LBLCLocality-Based Least-Connections, 基于局部的最少鏈接, 即為動態的dh算法

6)         LBLCRlocality-based least-connections replication, 帶復制功能的lblc

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

(0)
liangkailiangkai
上一篇 2016-12-19 13:13
下一篇 2016-12-19 13:58

相關推薦

  • UID SGID與chmod 777的一些問題

    先來看問題 問題來了:echo的行為返回是對的還是vi是對的? 現場分析: vi 和 echo 都被設置為SGID權限。 abc文件所在的父目錄權限是777 echo無法寫abc文件,而vi是可以的 當時被問到這個問題時,我也是一征,怎么會這樣。加之SUID,SGID在企業應用很少,如此這么久早忘了一干二凈,只是趕緊去補課~,但經過30MIN后依然沒有找到問…

    Linux干貨 2016-08-08
  • 數組的基本應用

                                   數組 變量:存儲單個元素的內存空間v 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。v 數組名和索引 索引:編號從0…

    Linux干貨 2016-08-24
  • 網絡21期第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) Centos6啟動流程:       POST加電自檢 —> BOOT Sequence —> 加載內核啟動系統    &n…

    Linux干貨 2016-09-15
  • 22期網絡班+第一周作業+深圳+王金寶

    1、描述計算機的組成及其功能? 答: 顯示器和主機,顯示器就不說了 主機里又有,主板,又叫主機板(mainboard)、系統板(systembourd)和母板(motherboard);它安裝在機箱內,是微機最基本的也是最重要的部件之一。主板一般為矩形電路板,上面安裝了組成計算機的主要電路系統,一般有BIOS芯片、I/O控制芯片、鍵盤和面板控制開關 接口、指…

    Linux干貨 2016-08-13
  • 配置邏輯卷·設定LVM快照·btrfs文件系統

    _ueditor_page_break_tag_ 配置邏輯卷,設定LVM快照,btrfs文件系統                 邏輯卷管理器( LVM)v允許對卷進行方便操作的抽象層,包括重新設定文…

    Linux干貨 2016-09-01
  • 十一.Linux博客-2016年8月14日if、case、find

    格式說明: 操作 概念 命令 說明及舉例 十一.if、case、find if 單分支if開頭+條件+then+fi結尾雙分支 if else fi多分枝 if elif else fi case case $num in1|3|5)echo xxx;;2|4|5)echo yyy;;*)echo nullesac 多用于離散數值匹配 文件查找和壓縮 文件系…

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