Lvs常用術語說明
|
術語 |
解釋 |
| Load balancer或director |
負載調度器 |
| RS或Real Server |
真實服務器,提供服務的服務器 |
| VIP |
虛擬IP地址,客戶端訪問集群的地址 |
| RIP |
集群所提供應用程序的地址(HTTP,FTP) |
| DIP |
調度器的真實地址 |
Lvs的類型
Lvs-nat
他通過修改請求報文的目標地址為根據調度算法所挑選出的某RS的RIP來進行轉發。
架構特性:
(1) Rs應該使用私有地址,即RIP應該為私有地址,各RS的網關必須執行DIP
(2) 請求報文和響應報文都經由Directory轉發;調度器作為所有服務器節點網關,即作為客戶端的訪問入口,也是各節點回應客戶端的訪問出口。
(3) 支持端口映射
(4) RS可以使用任意類型的OS
(5) RS的RIP必須與Directory的DIP在同一網絡,中間不需要路由器
NAT模型優缺點:
優點:節點服務器使用私有IP地址,與負載調度器位於同一個物理網絡,安全性比DR模式和TUN模式要高。
缺點:調度器位於客戶端和集群節點之間,並負責處理進出的所有通信;(壓力大的根本原因)大規模應用場景中,調度器容易成為系統瓶頸。
請求和響應圖解說明:
(1) 客戶端訪問集群的VIP地址,請求web服務。(請求報文:源地址為CIP,目標地址為VIP)
(2) 調度器收到客戶端的請求報文,會修改請求報文中的目標地址(VIP)為RIP,並且將請求根據相應的調度算法送往后端web服務器。(請求報文:源地址CIP,目標地址為RIP)
(3) Web服務器收到請求,檢查報文是訪問自己的,並且自己也提供web服務,就會響應這個請求報文;並且發送給調度器(響應報文,源地址RIP,目標地址CIP)
(4) 調度器收到web服務器的響應報文,會根據自己內部的追蹤機制,判斷出用戶訪問的是VIP,這個時候會修改源地址為VIP地址響應客戶端請求。(響應報文:源地址VIP,目標地址CIP)

LVS-DR
Diectory在實現轉發時不修改請求的IP首部,而是通過直接封裝MAC首部完成轉發;目標MAC是Directory根據調度方法挑選出某RS的MAC地址。
架構特性:
(1) 保證前端路由器將目標地址為VIP的請求報文通過ARP地址解析后送往Directory
解決方法:
靜態綁定:在前端路由器直接將VIP對應的目標MAC靜態配置為Directory的MAC地址
缺點:1、如果路由是運營商提供則沒有路由器管理權限,則無法配置
2、如果調度器做了高可用,當主備切換的時候,MAC地址會發生改變。
Arptables:在各RS上,通過arptables規則拒絕其響應對應的ARP廣播請求
內核參數:在RS上修改內核參數,並結合地址的配置方式實現拒絕響應對VIP的ARP廣播請求;
(2) RS的RIP可以使用私有地址;但也可以使用公網地址,此時可通過互聯網上的主機直接對此RS發起管理操作
(3) 請求報文必須經由Directory調度,但響應報文必須不能經由Directory
(4) 各RIP必須與DIP在同一物理網絡中
(5) 不支持端口映射
(6) RS可以使用大多數的OS
(7) RS的網關一定不能指向Directory
優點:負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端,大大提高了服務器並發能力。
不足:1、LVS-RS間必須在同一個VLAN。
2、RS上綁定VIP,風險大。
請求和響應圖解說明:
(1)首先,客戶端CIP的請求發送給LVS調度器的VIP。
(2)LVS調度器收到客戶端的請求包后,將數據包的MAC地址改成LVS調度器選擇的某一台RS的MAC地址,並通過交換機(數據鏈路層)發送給RS服務器(因為MAC地址是rs服務器,所以,rs可以接收到該數據報。)注意:此時數據包的目的及源ip地址沒有發生任何改變。
(3)1、RS的數據鏈路層收到發送來的數據報文請求后,會從鏈路層往上傳給IP層,此時IP層需要驗證請求的目標IP地址。因為包的目標IP(即VIP)並不是像常規數據報那樣為RS的本地IP,而僅僅目的MAC地址是RS的。所以,在RS上需要配置一個VIP的loopbackdevice,是因為loopback device是服務器本地使用的網絡接口,對外是不可見的,不會跟LVS的ip沖突。
2、RS處理數據包完成后,將應答直接返回給客戶端(源ip為VIP,目標ip為CIP)。回復數據報不在經過調度器。因此,如果對外提供LVS負載均衡服務,則RS需要連上互聯網才能將應答包返回給客戶端。不過,RS最好為帶公網IP的服務器,這樣可以不經過網關直接回應客戶,如果多個RS使用了同一網關出口,網關會成為LVS架構的瓶頸,會大大降低LVS的性能。
Lvs-tun
不修改請求報文IP首部,而是通過IP隧道機制在原有的IP報文之外在封閉IP首部,經由互聯網把請求報文交給選定的RS,主要實現異地容災
架構特性:
(1) RIP,DIP,VIP都是公網地址
(2) RS的網關不能,也不可能指向DIP
(3) 請求報文由Directory分發,但響應報文直接由RS響應給client
(4) 不支持端口映射
(5) RS的OS必須得支持IP隧道
優點:實現了異地容災,避免了一個機房故障導致網站無法訪問。
缺點:RS配置復雜(IPIP模塊等)
請求和響應圖解說明:
(1)用戶發送請求到director的VIP請求服務。注意:此VIP地址在互聯網上是唯一可達地址。
(2)當用戶請求到達director的時候,根據調度算法選擇一台RS進行轉發,但是這個時候發送的報文,目標地址不能是RIP,如果是RIP接收請求,那么就是DIP響應CIP的請求,而不是VIP這個時候就需要使用隧道(tun)了,使用隧道封裝兩個IP首部,轉發的報文為源CIP目標VIP,但是在IP首部外還會添加一個IP首部,目標地址是RIP。
(3)當RS接收到數據報后,看到外層的IP首部,目標地址是自己,就會拆開封裝,這個時候就會發現,還有一個IP首部,首部內容為CIP請求自己的VIP,這個時候由於自己有VIP地址,所以就會響應這個請求給CIP。(響應報文:源地址VIP,目標地址CIP)

Lvs-fullnat
為什么使用fullnat&傳統NAT在多路由網絡調度缺點
(1)客戶端將請求發送給Director請求服務。
(2)Director將請求報文轉發給RS,源地址是CIP,目標地址是RIP。
問題來了:響應報文不經由Director
RS收到數據報查看目標地址是自己的就會響應請求,但是源地址為CIP,這個時候由於和Director中間使用了路由器連接,所以網關不是指向Director,如果響應報文不經過Director那么響應客戶端請求的就是RS的RIP,而不是VIP。客戶端收到響應報文,看到是RIP響應的,但是自己壓根沒有請求過RIP,所以會直接丟棄數據報。

什么是fullnat
通過請求報文的源地址為DIP,目標為RIP來實現轉發;對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發;
架構特性:
(1)RIP,DIP可以使用私有地址;
(2)RIP和DIP可以不在同一個網絡中,且RIP的網關未必需要指向DIP;
(3)支持端口映射;
(4)RS的OS可以使用任意類型;
(5)請求報文經由Director,響應報文經由Director;
請求和響應圖解:
(1) 客戶端將請求發送給Director的VIP請求服務。
(2) Vip通過調度算法,將請求發送給后端的RS,這個時候源地址該為了DIP,目標地址改為了RIP。
(3) RS接收到請求后,由於源地址是DIP,則一定會對DIP進行回應。
(4) Director收到RS的響應后,會修改數據報的源地址為VIP,目標地址為CIP進行響應。

說明:此調度方式還沒有正式被Linux官方錄入系統標准庫,所以如果向使用此模式,需要去lvs官網下載源碼,並且需要重新編譯系統內核才可使用。
Lvs調度算法
查看當前系統支持的調度方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost~]
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
|
LVS的調度算法
LVS的調度方法分為兩種,一種是靜態方法,一種是動態方法:
靜態方法:僅根據算法本身實現調度;實現起點公平,不管服務器當前處理多少請求,分配的數量一致
動態方法:根據算法及后端RS當前的負載狀況實現調度;不管以前分了多少,只看分配的結果是不是公平
靜態調度算法(static Schedu)(4種):
(1)rr (Round Robin) :輪叫,輪詢
說明:輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然后重新開始循環。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。缺點:是不考慮每台服務器的處理能力。
(2)wrr (Weight Round Robin) :加權輪詢(以權重之間的比例實現在各主機之間進行調度)
說明:由於每台服務器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。
(3)sh (Source Hashing) : 源地址hash實現會話綁定sessionaffinity
說明:簡單的說就是有將同一客戶端的請求發給同一個real server,源地址散列調度算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的並且沒有超負荷,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法的相同。它的算法流程與目標地址散列調度算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址。
(4)dh : (Destination Hashing) : 目標地址hash
說明:將同樣的請求發送給同一個server,一般用於緩存服務器,簡單的說,LB集群后面又加了一層,在LB與realserver之間加了一層緩存服務器,當一個客戶端請求一個頁面時,LB發給cache1,當第二個客戶端請求同樣的頁面時,LB還是發給cache1,這就是我們所說的,將同樣的請求發給同一個server,來提高緩存的命中率。目標地址散列調度算法也是針對目標IP地址的負載均衡,它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一台服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
動態調度算法(dynamic Schedu)(6種):
(1)lc (Least-Connection Scheduling): 最少連接
說明:最少連接調度算法是把新的連接請求分配到當前連接數最小的服務器,最小連接調度是一種動態調度短算法,它通過服務器當前所活躍的連接數來估計服務器的負載均衡,調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某台服務器,其連接數加1,當連接中止或超時,其連接數減一,在系統實現時,我們也引入當服務器的權值為0時,表示該服務器不可用而不被調度。此算法忽略了服務器的性能問題,有的服務器性能好,有的服務器性能差,通過加權重來區分性能,所以有了下面算法wlc。
簡單算法:active*256+inactive (誰的小,挑誰)
(2)wlc (Weighted Least-Connection Scheduling):加權最少連接
加權最小連接調度算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權限,加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。由於服務器的性能不同,我們給性能相對好的服務器,加大權重,即會接收到更多的請求。
簡單算法:(active*256+inactive)/weight(誰的小,挑誰)
(3)sed (shortest expected delay scheduling):最少期望延遲
說明:不考慮非活動連接,誰的權重大,我們優先選擇權重大的服務器來接收請求,但會出現問題,就是權重比較大的服務器會很忙,但權重相對較小的服務器很閑,甚至會接收不到請求,所以便有了下面的算法nq。
基於wlc算法,簡單算法:(active+1)*256/weight (誰的小選誰)
(4).nq (Never Queue Scheduling): 永不排隊
說明:在上面我們說明了,由於某台服務器的權重較小,比較空閑,甚至接收不到請求,而權重大的服務器會很忙,所此算法是sed改進,就是說不管你的權重多大都會被分配到請求。簡單說,無需隊列,如果有台real server的連接數為0就直接分配過去,不需要在進行sed運算。
(5).LBLC(Locality-Based Least Connections) :基於局部性的最少連接
說明:基於局部性的最少連接算法是針對請求報文的目標IP地址的負載均衡調度,主要用於Cache集群系統,因為Cache集群中客戶請求報文的目標IP地址是變化的,這里假設任何后端服務器都可以處理任何請求,算法的設計目標在服務器的負載基本平衡的情況下,將相同的目標IP地址的請求調度到同一個台服務器,來提高服務器的訪問局部性和主存Cache命中率,從而調整整個集群系統的處理能力。
(6).LBLCR(Locality-Based Least Connections with Replication) :基於局部性的帶復制功能的最少連接
說明:基於局部性的帶復制功能的最少連接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地 址對應的服務器組,按“最小連接”原則從服務器組中選出一台服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一台服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除, 以降低復制的程度。
注:LVS默認調度算法是 wlc 。