LVS三種請求轉發方式和八種調度算法簡介

1. LVS的結構

LVS方式的cluster從結構上可分爲兩部分:前端的負載均衡器(稱之爲director)和後端的真實服務器(稱之爲real server)。cluster前端的director將來自外界的請求調度到cluster後端不同的real server去執行。real server負責真正的提供各種應用服務,比如:Web、FTP、Mail等服務。real server的數量可以根據實際需求進行增加、減少。

2. LVS的三種包轉發方式
LVS提供了三種包轉發方式:NAT(網絡地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的轉發模式決定了不同的cluster的網絡結構,下面對三種轉發方式分別介始:
NAT(網絡地址映射)
NAT方式可支持任何的操作系統,以及私有網絡,並且只需一個Internet IP地址,但是整個系統的性能受到限制。因爲執行NAT每次需要重寫包,有一定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求非常短,而服務器的迴應非常大,對負載均衡器形成很大壓力,成爲了新的瓶頸。
IP Tunneling(IP隧道)
director分配請求到不同的real server。real server處理請求後直接回應給用戶,這樣director負載均衡器僅處理客戶機與服務器的一半連接。IP Tunneling技術極大地提高了director的調度處理能力,同時也極大地提高了系統能容納的最大節點數,可以超過100個節點。real server可以在任何LAN或WAN上運行,這意味着允許地理上的分佈,這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶機直接通信,並且所有服務器必須支持IP隧道協議。
Direct Routing(直接路由)
與IP Tunneling類似,負載均衡器僅處理一半的連接,避免了新的性能瓶頸,同樣增加了系統的可伸縮性。Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但由於採用物理層(修改MAC地址)技術,所有服務器都必須在一個物理網段。

3. LVS的八種調度算法

LVS已實現了以下八種調度算法:

1.輪叫調度(Round-Robin Scheduling)
2.加權輪叫調度(Weighted Round-Robin Scheduling)
3.最小連接調度(Least-Connection Scheduling)
4.加權最小連接調度(Weighted Least-Connection Scheduling)
5.基於局部性的最少鏈接(Locality-Based Least Connections Scheduling)
6.帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
7.目標地址散列調度(Destination Hashing Scheduling)
8.源地址散列調度(Source Hashing Scheduling)

注:如果想了解關於以上幾點的技術細節,LVS的主頁查詢。

1.輪叫調度(Round Robin)

調度器通過“輪叫”調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載。

2.加權輪叫(Weighted Round Robin)

調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器能處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

3.最少鏈接(Least Connections)

調度器通過“最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集羣系統的真實服務器具有相近的系統性能,採用“最小連接”調度算法可以較好地均衡負載。

4.加權最少鏈接(Weighted Least Connections)

在集羣系統中的服務器性能差異較大的情況下,調度器採用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

5.基於局部性的最少鏈接(Locality-Based Least Connections)

“基於局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少鏈接” 的原則選出一個可用的服務器,將請求發送到該服務器。

6.帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication)

“帶複製的基於局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個目標 IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

7.目標地址散列(Destination Hashing)

“目標地址散列”調度算法根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

8.源地址散列(Source Hashing)
“源地址散列”調度算法根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
瞭解這些算法原理能夠在特定的應用場合選擇最適合的調度算法,從而儘可能地保持Real Server的最佳利用性。當然也可以自行開發算法,不過這已超出本文範圍,請參考有關算法原理的資料。

以下網上找到的另外兩種算法:

9. 最短的期望的延遲(Shortest Expected Delay Scheduling SED)
基於wlc算法。這個必須舉例來說了
ABC三臺機器分別權重123 ,連接數也分別是123。那麼如果使用WLC算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed算法後會進行這樣一個運算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3

根據運算結果,把連接交給C 。

10.最少隊列調度(Never Queue Scheduling NQ)
無需隊列。如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。

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