LVS (Linux Virtual Server)算法
LVS(Linux Virtual Server)其實就是針對高可伸縮、高可用網絡服務的需求,給出了基於IP層和基於內容請求分發的負載平衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。因此,lvs須要內核有ipvs支持,確保你的內核支持ipvs後,只需安裝ipvsadm就能夠把一臺服務器配置成負載調度器(Load Balancer)。對外提供服務的IP,也就是咱們訪問的IP稱作VIP。調度器LB的任務主要是分發請求,真正處理的是真實服務器(Real Server)。後端
LVS的三種負載均衡模型:服務器
爲了區別這三種模型,咱們能夠先作一下對比網絡
|
NAT模型負載均衡 |
DR模型ide |
TUN模型性能 |
集羣節點(rip和dip)spa |
須要在同一個子網當中操作系統 |
必須在同一個物理網絡當中orm |
不須要在一個物理網絡當中 |
rip要求 |
私有地址,僅用於節點之間 |
可使用公網地址 |
必定不能是私有地址 |
Director處理的請求 |
處理入站和出站 |
僅處理入站 |
僅處理入站 |
Real-server的網關 |
要指向dip |
不能指向dip,而是路由器 |
不能指向dip,而是路由器 |
端口映射 |
能夠實現 |
不能實現 |
不能實現 |
Real-server服務器要求 |
任意操做系統 |
支持大多數操做系統 |
必須是支持隧道功能的操做系統 |
注:rip爲real-server的IP地址,dip爲director的IP地址
LVS-NAT 的數據轉發流程是:Director機器收到外界請求,改寫數據包的目標地址,按相應的調度算法將其發送到相應Real Server上,Real Server處理完該請求後,將結果數據包返回到其默認網關,即Director機器上,Director機器再改寫數據包的源地址,最後將其返回給外界。這樣就完成一次負載調度。
LVS-NAT方式負載均衡集羣(圖 1)
注:LVS-NAT集羣中Real Server能夠是任何的操做系統,並且無需作任何特殊的設定,唯一要作的就是將其默認網關指向Director機器。Real Server可使用局域網 的 內 部 IP(192.168.0.0/24)。Director要有兩塊網卡,一塊網卡綁定一個外部IP地址(10.0.0.1),另外一塊網卡綁定局域網的內部IP(192.168.0.254),做爲Real Server的默認網關。
LVS-DR的數據轉發流程是:Director機器收到外界請求,按相應的調度算法將其直接發送到相應Real Server,Real Server處理完該請求後,將結果數據包直接返回給客戶,完成一次負載調度。
LVS-DR 方式負載均衡集羣(圖 2)
LVS-DR集羣中注意Real Server的內核也必須打上修正ARP問題的內核補丁
LVS-TUN的數據轉發流程是:Director機器收到外界請求,按相應的調度算法將其經過IP隧道發送到相應Real Server,Real Server處理完該請求後,將結果數據包直接返回給客戶。至此完成一次負載調度。
LVS-TUN方式負載均衡集羣(圖 3)
LVS-TUN集羣中注意Real Server的內核必須打上修正ARP問題的內核補丁。該方式中 Director將客戶請求分配到不一樣的Real Server,Real Server處理請求後直接回應給用戶,這樣Director就只處理客戶機與服務器的一半鏈接,極大地提升了Director的調度處理能力, 使集羣系統能容納更多的節點數。另外TUN方式中的Real Server能夠在任何LAN或WAN 上運行,這樣能夠構築跨地域的集羣,其應對災難的能力也更強,可是服務器須要爲IP封裝付出必定的資源開銷,並且後端的Real Server必須是支持IP Tunneling的操做系統。
LVS的十種調度方法
輪調(RR)調度器將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載,每一個服務器都同樣多。
加權輪調(WRR) 調度器根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
目標地址Hash 根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
源地址Hashing根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
最少連接(LC)根據RS算法將請求調度到已創建的連接數最少的服務器上。
RS=active*256+inactive=overhead active活動鏈接數,inactive非活動鏈接數,overhead值越小則鏈接到誰上邊
加權最少連接(WLC) 在集羣系統中的服務器性能差別較大的狀況下,既要根據RS算法,還要考慮服務器的性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。
最短的指望的延遲(SED) 基於WLC,但卻有所改變,依據(active+1)*256/weight=overhead,值越小,則鏈接到哪一個服務器上。
最少隊列調度(NQ)無需隊列。若是有臺realserver的鏈接數=0就直接分配過去,不須要在進行sed運算
基於局部性的最少連接(LBLC)針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務器,將請求發送到該服務器。
帶複製的基於局部性最少連接(LBLCR)也是針對目標IP地址的負載均衡,目前主要用於 Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,LBLC算法維護從一個目標IP地址到一臺服務器的映而射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。