LVS(一)調度原理以及調度算法


LVS調度原理以及調度算法

在了解LVS調度原理之前,首先的了解一下IPTABLES防火牆工作原理。

一.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包過濾在此點進行。
 
 
 
如上圖所示,客戶端在訪問服務器的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和IPTABLES一樣,是也是兩段式的,也由兩個部分組成,ipvsadm和ipvs,ipvsadm工作在用戶空間上書寫規則,然后發送給工作在內核上的ipvs IP負載均衡軟件,ipvs監控在INPUT鏈上。
  當用戶發送請求通過prerouting到達input鏈時,ipvs根據ipvsadm發送的規則,一旦發現用戶請求的時一個集群服務,會強行修改請求報文,將請求發送到postrouting鏈上,然后由post_routing發送至其他主機,如上圖紅線所示。
  由上面描述可以看出,LVS的機制和IPTABLES的機制可以說是沖突的,所以,他們不能一起使用。

三 LVS調度算法

  LVS集群的負載調度主要是由工作在內核當中的IPVS IP負載均衡軟件負責進行調度的,IPVS在內核中的負載均衡調度是以連接為粒度的,在內核中的連接調度算法上,IPVS已實現了以下八種調度算法.

1.輪叫調度(Round-Robin Scheduling)

這種算法就是以輪叫的方式依次將請求調度不同的服務器,算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用於服務器組中處理性能不一的情況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。

2.加權輪叫調度(Weighted Round-Robin Scheduling)

這種算法可以解決服務器間性能不一的情況,它用相應的權值表示服務器的處理性能,服務器的缺省權值為1。假設服務器A的權值為1,B的 權值為2,則表示服務器B的處理性能是A的兩倍。加權輪叫調度算法是按權值的高低和輪叫方式分配請求到各服務器。權值高的服務器先收到的連接,權值高的服 務器比權值低的服務器處理更多的連接,相同權值的服務器處理相同數目的連接數。

3.最小連接調度(Least-Connection Scheduling)

這種算法是把新的連接請求分配到當前連接數最小的服務器。最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務 器的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某台服務器,其連接數加1;當連接中止或超時,其連接數減一。當各個服務器有相同的處理性能時,最小連接調度算法能把負載變化大的請求分布平滑到各個服務器上,所有處理時間比較長的請求不可能被發送到同一台服 務器上。但是,當各個服務器的處理能力不同時,該算法並不理想,因為TCP連接處理請求后會進入TIME_WAIT狀態,TCP的TIME_WAIT一般 為2分鍾,此時連接還占用服務器的資源,所以會出現這樣情形,性能高的服務器已處理所收到的連接,連接處於TIME_WAIT狀態,而性能低的服務器已經 忙於處理所收到的連接,還不斷地收到新的連接請求。

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

這種算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權 值。加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。

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

這種算法是請求數據包的目標 IP 地址的一種調度算法,該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,如果這台服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則會繼續選擇其它可行的服務器

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

這種算法先根據請求的目標IP地址找出該目標IP地址對應的服務器組;按“最小連接”原則從該服務器組中選出一台服務器,若服務器沒有超載, 將請求發送到該服務器;若服務器超載;則按“最小連接”原則從整個集群中選出一台服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該 服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

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

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

8.源地址散列調度(Source Hashing Scheduling)

此算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法 的相同。它的算法流程與目標地址散列調度算法的基本相似。

  
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM