一、lvs簡介
lvs(linux virtual server)即linux虛擬伺服器,是由章文嵩博士主導的開源負載均衡專案,目前lvs已經被整合到linux核心模組中。該專案在linux核心中實現了基於ip的資料請求負載均衡排程方案,其體系結構如圖1所示,終端網際網路使用者從外部訪問公司的外部負載均衡伺服器,終端使用者的web請求會傳送給lvs排程器,排程器根據自己預設的演算法決定將該請求傳送給後端的某台web伺服器,比如,輪詢演算法可以將外部的請求平均分發給後端的所有伺服器,終端使用者訪問lvs排程器雖然會被**到後端真實的伺服器,但如果真實伺服器連線的是相同的儲存,提供的服務也是相同的服務,終端使用者不管是訪問哪台真實伺服器,得到的服務內容都是一樣的,整個集群對使用者而言都是透明的。最後根據lvs工作模式的不同,真實伺服器會選擇不同的方式將使用者需要的資料傳送到終端使用者,lvs工作模式分為nat模式、tun模式、以及dr模式。
1、基於nat的lvs模式負載均衡
nat(network address translation)即網路位址轉換,其作用是通過資料報頭的修改,使得位於企業內部的私有ip位址可以訪問外網,以及外部用使用者可以訪問位於公司內部的私有ip主機。vs/nat工作模式拓撲結構如圖2所示,lvs負載排程器可以使用兩塊網絡卡配置不同的ip位址,eth0設定為私鑰ip與內部網路通過交換裝置相互連線,eth1裝置為外網ip與外部網路聯通。
第一步,使用者通過網際網路dns伺服器解析到公司負載均衡裝置上面的外網位址,相對於真實伺服器而言,lvs外網ip又稱vip(virtual ip address),使用者通過訪問vip,即可連線後端的真實伺服器(real server),而這一切對使用者而言都是透明的,使用者以為自己訪問的就是真實伺服器,但他並不知道自己訪問的vip僅僅是乙個排程器,也不清楚後端的真實伺服器到底在**、有多少真實伺服器。
第二步,使用者將請求傳送至124.126.147.168,此時lvs將根據預設的演算法選擇後端的一台真實伺服器(192.168.0.1~192.168.0.3),將資料請求包**給真實伺服器,並且在**之前lvs會修改資料報中的目標位址以及目標埠,目標位址與目標埠將被修改為選出的真實伺服器ip位址以及相應的埠。
第三步,真實的伺服器將響應資料報返回給lvs排程器,排程器在得到響應的資料報後會將源位址和源埠修改為vip及排程器相應的埠,修改完成後,由排程器將響應資料報傳送回終端使用者,另外,由於lvs排程器有乙個連線hash表,該表中會記錄連線請求及**資訊,當同乙個連線的下乙個資料報傳送給排程器時,從該hash表中可以直接找到之前的連線記錄,並根據記錄資訊選出相同的真實伺服器及埠資訊。
2、基於tun的lvs負載均衡
在lvs(nat)模式的集群環境中,由於所有的資料請求及響應的資料報都需要經過lvs排程器**,如果後端伺服器的數量大於10臺,則排程器就會成為整個集群環境的瓶頸。我們知道,資料請求包往往遠小於響應資料報的大小。因為響應資料報中包含有客戶需要的具體資料,所以lvs(tun)的思路就是將請求與響應資料分離,讓排程器僅處理資料請求,而讓真實伺服器響應資料報直接返回給客戶端。vs/tun工作模式拓撲結構如圖3所示。其中,ip隧道(ip tunning)是一種資料報封裝技術,它可以將原始資料報封裝並新增新的包頭(內容包括新的源位址及埠、目標位址及埠),從而實現將乙個目標為排程器的vip位址的資料報封裝,通過隧道**給後端的真實伺服器(real server),通過將客戶端發往排程器的原始資料報封裝,並在其基礎上新增新的資料報頭(修改目標位址為排程器選擇出來的真實伺服器的ip位址及對應埠),lvs(tun)模式要求真實伺服器可以直接與外部網路連線,真實伺服器在收到請求資料報後直接給客戶端主機響應資料。
3、基於dr的lvs負載均衡
在lvs(tun)模式下,由於需要在lvs排程器與真實伺服器之間建立隧道連線,這同樣會增加伺服器的負擔。與lvs(tun)類似,dr模式也叫直接路由模式,其體系結構如圖4所示,該模式中lvs依然僅承擔資料的入站請求以及根據演算法選出合理的真實伺服器,最終由後端真實伺服器負責將響應資料報傳送返回給客戶端。與隧道模式不同的是,直接路由模式(dr模式)要求排程器與後端伺服器必須在同乙個區域網內,vip位址需要在排程器與後端所有的伺服器間共享,因為最終的真實伺服器給客戶端回應資料報時需要設定源ip為vip位址,目標ip為客戶端ip,這樣客戶端訪問的是排程器的vip位址,回應的源位址也依然是該vip位址(真實伺服器上的vip),客戶端是感覺不到後端伺服器存在的。由於多台計算機都設定了同樣乙個vip位址,所以在直接路由模式中要求排程器的vip位址是對外可見的,客戶端需要將請求資料報傳送到排程器主機,而所有的真實伺服器的vip位址必須配置在non-arp的網路裝置上,也就是該網路裝置並不會向外廣播自己的mac及對應的ip位址,真實伺服器的vip對外界是不可見的,但真實伺服器卻可以接受目標位址vip的網路請求,並在回應資料報時將源位址設定為該vip位址。排程器根據演算法在選出真實伺服器後,在不修改資料報文的情況下,將資料幀的mac位址修改為選出的真實伺服器的mac位址,通過交換機將該資料幀發給真實伺服器。整個過程中,真實伺服器的vip不需要對外界可見。
三、lvs負載均衡排程演算法
根據前面的介紹,我們了解了lvs的三種工作模式,但不管實際環境中採用的是哪種模式,排程演算法進行排程的策略與演算法都是lvs的核心技術,lvs在核心中主要實現了一下十種排程演算法。
1.輪詢排程
輪詢排程(round robin 簡稱'rr')演算法就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是實現簡單。輪詢演算法假設所有的伺服器處理請求的能力都一樣的,排程器會將所有的請求平均分配給每個真實伺服器。
2.加權輪詢排程
加權輪詢(weight round robin 簡稱'wrr')演算法主要是對輪詢演算法的一種優化與補充,lvs會考慮每台伺服器的效能,並給每台伺服器新增乙個權值,如果伺服器a的權值為1,伺服器b的權值為2,則排程器排程到伺服器b的請求會是伺服器a的兩倍。權值越高的伺服器,處理的請求越多。
3.最小連線排程
最小連線排程(least connections 簡稱'lc')演算法是把新的連線請求分配到當前連線數最小的伺服器。最小連線排程是一種動態的排程演算法,它通過伺服器當前活躍的連線數來估計伺服器的情況。排程器需要記錄各個伺服器已建立連線的數目,當乙個請求被排程到某台伺服器,其連線數加1;當連線中斷或者超時,其連線數減1。
(集群系統的真實伺服器具有相近的系統效能,採用最小連線排程演算法可以比較好地均衡負載。)
4.加權最小連線排程
加權最少連線(weight least connections 簡稱'wlc')演算法是最小連線排程的超集,各個伺服器相應的權值表示其處理效能。伺服器的預設權值為1,系統管理員可以動態地設定伺服器的權值。加權最小連線排程在排程新連線時盡可能使伺服器的已建立連線數和其權值成比例。排程器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
5.基於區域性的最少連線
基於區域性的最少連線排程(locality-based least connections 簡稱'lblc')演算法是針對請求報文的目標ip位址的 負載均衡排程,目前主要用於cache集群系統,因為在cache集群客戶請求報文的目標ip位址是變化的。這裡假設任何後端伺服器都可以處理任一請求,演算法的設計目標是在伺服器的負載基本平衡情況下,將相同目標ip位址的請求排程到同一臺伺服器,來提高各台伺服器的訪問區域性性和cache命中率,從而提公升整個集群系統的處理能力。lblc排程演算法先根據請求的目標ip位址找出該目標ip位址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求傳送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則使用'最少連線'的原則選出乙個可用的伺服器,將請求傳送到伺服器。
6.帶複製的基於區域性性的最少連線
帶複製的基於區域性性的最少連線(locality-based least connections with replication 簡稱'lblcr')演算法也是針對目標ip位址的負載均衡,目前主要用於cache集群系統,它與lblc演算法不同之處是它要維護從乙個目標ip位址到一組伺服器的對映,而lblc演算法維護從乙個目標ip位址到一台伺服器的對映。按'最小連線'原則從該伺服器組中選出一一台伺服器,若伺服器沒有超載,將請求傳送到該伺服器;若伺服器超載,則按'最小連線'原則從整個集群中選出一台伺服器,將該伺服器加入到這個伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。
7.目標位址雜湊排程
目標位址雜湊排程(destination hashing 簡稱'dh')演算法先根據請求的目標ip位址,作為雜湊鍵(hash key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的且並未超載,將請求傳送到該伺服器,否則返回空。
8.源位址雜湊排程u
源位址雜湊排程(source hashing 簡稱'sh')演算法先根據請求的源ip位址,作為雜湊鍵(hash key)從靜態分配的雜湊表找出對應的伺服器,若該伺服器是可用的且並未超載,將請求傳送到該伺服器,否則返回空。它採用的雜湊函式與目標位址雜湊排程演算法的相同,它的演算法流程與目標位址雜湊排程演算法的基本相似。
9.最短的期望的延遲
最短的期望的延遲排程(shortest expected delay 簡稱'sed')演算法基於wlc演算法。舉個例子吧,abc三颱伺服器的權重分別為1、2、3 。那麼如果使用wlc演算法的話乙個新請求進入時它可能會分給abc中的任意乙個。使用sed演算法後會進行乙個運算
a:(1+1)/1=2 b:(1+2)/2=3/2 c:(1+3)/3=4/3 就把請求交給得出運算結果最小的伺服器。
10.最少佇列排程
最少佇列排程(never queue 簡稱'nq')演算法,無需佇列。如果有realserver的連線數等於0就直接分配過去,不需要在進行sed運算。
負載均衡 lvs
常用的負載均衡開源軟體有nginx lvs haproxy,商業的硬體負載均衡裝置f5 netscale。負載均衡的架構和原理很簡單,就是當使用者的請求過來時,會直接分發到director server上,然後它把使用者的請求根據設定好的排程演算法,智慧型均衡地分發到後端真正伺服器上。為了避免不同機...
LVS負載均衡
應用層7 nginx 軟體 表示層6 會話層5 傳輸層4 lvs 核心 網路層3 鏈路層2 物理層1 整個網際網路建立在下一跳的模式下 端點間tcp傳輸過程中 解析資料報需要成本 學習機制 路由器 三層,只關心ip和路由表 lvs伺服器 四層,只關心port,狀態 nginx 七層,關心socket...
負載均衡之lvs
集群 cluster 將一組計算機軟 硬體連線起來,高度緊密的協作完成計算工作,其中的單個計算機通常稱為節點。負載均衡集群 load balancing 通過負載均衡器,將負載盡可能平均分攤處理。lvs linux virtul server linux虛擬服務,分為三層結構 排程器 上面的虛擬ip...