LVS概念
LVS(Linux Virtual Server):Linux 虛擬服務器
LVS是個負載均衡設備,它不提供任何服務,用戶請求到這里的時候,它是將客戶需求轉發至后端真正提供服務的服務,所以說后端的服務稱作real server。LVS分為兩段,前一段稱為ipvsadm(管理集群服務的命令行工具),后面一段叫做ipvs(內核模塊)
LVS的類型
1、LB:Load Baiancing,負載均衡集群
特性:將負載(工作任務)進行平衡、分攤到多個操作單元上進行執行
2、HA(High Availability):高可用集群
特性:提高服務的可用性
計算方法:在線時間/(在線時間/故障處理時間)
3、HP(High Performance):高性能集群
特性:提高服務的性能
LVS集群專業術語
-
vs:Virtual Server、Director,Dispatcher、Balancer
-
rs:Real Server
-
CIP(Client IP):客戶端IP
-
VIP(Virtual Server IP):虛擬IP,用于與客戶端通信的地址
-
DIP(Director IP):調度器IP,于與Real Server通信的地址
-
RIP(Real Server IP):后端真實服務器的IP地址
LVS集群的類型
一、LVS-NAT
多目標的DNAT,通過Director將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT實現轉發。
特點:
1、RIP和DIP必須在同一IP網絡,且應該使用私有地址,RS的網關要指向DIP(包組響應報文必須經由vs)
2、支持端口映射
3、VS必須是Linux,RS可以是任意OS
4、請求報文和響應報文都經由Director轉發,較高負載下,Director易于成為系統性能瓶頸
二、LVS-DR
Director通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在接口的MAC,目標MAC是挑選出某RS的RIP所在接口的MAC地址,ip首部不會發生變化(CIP<–>VIP)
核心要點:
1、每個RS主機上都應有VIP,并且RIP配置在物理接口上,VIP配置在內置接口lo的別名上(lo:0),來自Director的請求報文進來時,經由RIP再到lo:0再到用戶空間的進程,回去時控制響應報文先經過lo:0(此時源IP已封裝成VIP)再由RIP離開,保證客戶端接收到的報文源IP是VIP,目標IP是CIP。
2、讓RS主機禁止響應ARP廣播級別和通告級別
-
響應級別設定目的:當客戶端請求過來時,讓Director上的VIP響應,而不是讓RS上的VIP響應,保證請求報文一定走Director。
-
通告級別設定目的:當Director向RS轉發時,經由的是RIP的接口,由于RS和Director都有VIP,會造成地址沖突,通過設定ARP通告級別可讓其總是避免向非本網絡通告(經由的是RIP接口,不會向非RIP接口的網絡通告),因此解決了地址沖突問題。
過程:
1、客戶請求在前端路由器發送ARP廣播來獲取Director的VIP所在網卡的MAC地址,獲知后,在請求報文上封裝MAC首部(源MAC是路由器接口的MAC,目標MAC是Director上VIP接口的MAC),保證將報文發送至Director。
2、Director接收到報文后,看到目標地址和目標MAC是自己,于是拆封MAC首部,請求報文進入INPUT鏈,之后發現是集群服務,于是準備向后端主機轉發。
3、Director將請求報文(源地址CIP/目標地址VIP)再次封裝一個MAC首部(源MAC是DIP的MAC/目標MAC是RIP的MAC)發往后端挑選出來的RS,RS發現目標MAC是自己,拆了MAC首部,發現目標地址是VIP,于是繼續向lo:0轉發,最終到達用戶空間的進程給予響應,開始構建響應報文。
4、控制響應報文先經過lo:0(此時源IP已封裝成VIP)再由RIP離開,保證客戶端接收到的報文源IP是VIP,目標IP是CIP;此時可能需要另外一個路由器,如圖所示,RIP的網關指向此路由,向外轉發。
特點:
1、RS的RIP可以使用私有地址,也可以使用公網地址
2、RS跟Director必須在同一物理網絡,RS的網關必須不能指向DIP
3、不支持端口映射
4、請求報文必須由Director調度,但響應報文必須不能經由Director
5、RS可以使用大多的OS
三、LVS-TUN
不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是源IP首部之外再封裝一個IP首部(源IP為DIP,目標IP為挑選出的RS的RIP)。
特點:
1、RIP,DIP,VIP全得是公網網址。
2、RS網關不能指向也不可能指向DIP。
3、請求報文經由Director轉發,但響應報文將直接發往CIP。
4、不支持端口映射。
5、RS的OS必須支持隧道功能。
四、LVS-FULLNAT(不是標準類型)
NAT模型的一種延伸,通過同時修改請求報文的源IP地址(CIP–>DIP)和目標地址(vip–>RIP)進行轉發?! ?/p>
特點:
1、VIP是公網地址,RIP和DIP是私網地址,且通常不在同一網絡中,但需要經由路由器互通。
2、RS收到的請求報文源IP為DIP,因此響應報文將直接響應給DIP。
3、請求和響應報文都經由Director。
4、支持端口映射
LVS的調度算法
根據其調度時是否考慮后端主機的當前負載,可分為靜態方法個動態方法。
靜態調度:僅根據算法本身進行調度
1、RR(Round Robin):輪詢/論調/輪叫
輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然后重新開始循環。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。(這里是不考慮每臺服務器的處理能力)
2、WRR(Weighted RR):加權輪詢,以權重之間的比例實現在各主機之間進行調度
由于每臺服務器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。
3、SH(Source Hashing):源地址哈希,主要實現會話綁定,能夠將此前建立的session信息保留
源地址哈希調度算法正好與目標地址哈希調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的哈希表找出對應的服務器,若該服務器是可用的并且沒有超負荷,將請求發送到該服務器,否則返回空。它采用的哈希函數與目標地址哈希調度算法的相同。它的算法流程與目標地址哈希調度算法基本相似,除了將請求的目標IP地址換成請求的源IP地址,所以這里不一個一個敘述。
4、DH(Destinon Hashing):目標地址哈希,把同一個IP地址的請求,發送給同一個server
目標地址哈希調度算法也是針對目標IP地址的負載均衡,它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址哈希調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的哈希表找出對應的服務器,若該服務器是可用的且未超負荷,將請求發送到該服務器,否則返回空。
動態調度:根據算法及個RS當前的負載狀態進行調度
1、LC(leadt connections):最少連接
最少連接調度算法是把新的連接請求分配到當前連接數最小的服務器,最小連接調度是一種動態調度短算法,它通過服務器當前所活躍的連接數來估計服務器的負載均衡,調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1,當連接中止或超時,其連接數減一,在系統實現時,我們也引入當服務器的權值為0時,表示該服務器不可用而不被調度。
當前各RS負載值(Overhead)的計算方法:
Overhead=Active(當前活動連接數)*256+Inactive(非活動連接數)
2、WLC(Weighted LC):加權最少連接
加權最小連接調度算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權限,加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。
當前各RS負載值(Overhead)的計算方法:
Overhead=(Active*256+Inactive)/weigth(權重)
3、SED(Shretest Expecttions Delay):最短期望延遲
基于wlc算法
當前各RS負載值(Overhead)的計算方法:
Overhead=(Active+1)*256/weigth
4、NQ(Never Queue):永不排隊(改進的sed)
無需隊列,如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。
5、LBLC(Locality-Based Least Connection):基于局部性的最少連接
基于局部性的最少連接算法是針對請求報文的目標IP地址的負載均衡調度,目前主要用于Cache集群系統,因為Cache集群中客戶請求報文的目標IP地址是變化的,這里假設任何后端服務器都可以處理任何請求,算法的設計目標在服務器的負載基本平衡的情況下,將相同的目標IP地址的請求調度到同一個臺服務器,來提高個臺服務器的訪問局部性和主存Cache命中率,從而調整整個集群系統的處理能力。
基于局部性的最少連接調度算法根據請求的目標IP地址找出該目標IP地址最近使用的RealServer,若該Real Server是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。
6、LBLCR(Locality-Based Least Connections with Replication):帶復制的基于局部性最少鏈接
帶復制的基于局部性最少鏈接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
ipvsadm命令
1、管理集群服務:
添加: ipvsadm -A -t|u|f service-address [-s scheduler] service-address: -t:vip:port,tcp協議的集群服務 -u:vip:port,udp協議的集群 -f: FWM,防火墻標記 修改: ipvsadm -E -t|u|f service-address [-s scheduler] 刪除: ipvsadm -D -t|u|f service-address [-s scheduler]
2、管理集群服務中的RS
添加: ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight] -t|u|f service-address:事先定義好的某集群服務 -r server-address:某RS的地址,在NAT模型中,可以使用IP:PORT事先端口映射 [-g|i|m]:LVS類型 -g:DR -I:TUN -m:NAT [-w weight]:定義服務器權重 修改: ipvsadm -e -t|u|f service-address -r server-address [-g|i|m] [-w weight] 刪除: ipvsadm -d -t|u|f service-address -r server-address
3、查看集群服務:
ipvsadm -L|l [options] -n,--numeric:數字格式顯示端口 --exact:精確值 -c,--connection:顯示IPVS連接 --stats:統計數據 --rate:速率 --timeout:顯示tcp、tcpfin和udp會話的超時時間值 --sort:跟協議、地址、端口進行排序,默認為升序
4、清空所有集群服務:
ipvsadm -C -C:清空ipvs規則
5、保存和重載規則:
保存: ipvsadm -S > /PATH/TO/SOME_RULE_FILE ipvsadm-save > /PATH/TO/SOME_RULE_FILE 重載: ipvsadm -R < /PATH/TO/SOME_RULE_FILE ipvsadm-restore < /PATH/TO/SOME_RULE_FILE
6、清空計數器:
ipvsadm -Z [-t|u|f service-address]
原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/69014
畫的圖不錯,如果有一定的抓包分析過程會更好,尤其是封裝和解包過程,這部分就更容易理解理解原理了。