LVS詳解
LVS(Linux Virtual Server),意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。
-
LVS 是一個工作在四層的負載均衡器,實現和 iptables/netfilter 類似,工作在內核空間的 TCP/IP 協議棧上,LVS 工作在 INPUT Hook Funtion 上,并在 INPUT 設置附加規則,一旦客戶端請求的是集群服務,LVS 會強行修改請求報文,將報文發往 POSTROUTING,轉發至后端的主機。
LVS的組成:
ipvsadm:管理集群服務的命令行工具,工作于用戶空間
ipvs:為lvs提供服務的內核模塊,工作于內核空間INPUT鏈上,所以lvs與iptables在INPUT鏈不能同時使用。
在linux內核2.4.23之前的內核中模塊默認是不存在的,需要自己手動打補丁,然后把此模塊編譯進內核才可以正常使用。
目標
-
使用集群技術和Linux操作系統實現一個高性能、高可用的服務器。
-
很好的可伸縮性
-
很好的可靠性
-
很好的可管理性
集群分類:
-
負載均衡集群LB: Load balancing clusters
通過一個或者多個前端負載均衡器,將工作負載分發到后端的一組服務器上,從而達到整個系統的高性能和高可用性。
-
高可用性集群HA: High-availability (HA) clusters
一般指當集群中某個節點失效時,其上的任務會自動轉移到其他正常的節點上。
-
高性能計算集群HP: High-performance (HPC) clusters
將計算任務分配到集群的不同計算節點而提高計算能力,因而主要應用在科學計算領域。
集群常用術語:
Director:復制調度集群的主機
VIP:Virtual IP,向外提供服務的IP
RIP:real IP,內部真實提供服務的主機IP
DIP:向內部的IP通信的IP,在Director主機上
CIP:客戶端IP
LVS工作模型:
-
LVS-NAT:修改請求報文的目標IP
地址轉換類型,主要是做目標地址轉換,類似于iptables的DNAT
LVS 修改請求報文的目標地址為 RIP,轉發至后端的 RealServer,并修改后端響應報文的源地址為 VIP,響應至客戶端。
特性:
-
集群節點跟 Director 必須在同一個 IP 網絡中,并且其網關需要指向DIP的地址
-
RIP地址通常為私有地址,僅用于各個集節點之間通信
-
Director位于client和Real Server之間,處理進出所有報文,大型應用易成為瓶頸。
-
Real Server必須將網關指向DIP
-
支持端口映射
.
-
LVS-DR:操縱封裝新的MAC地址;默認類型
直接路由,為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;
每個Real Server上都有兩個IP:VIP和RIP,VIP是隱藏的,不會接收請求,用來做請求響應的源IP
Director上只需要一個網卡利用別名配置兩個IP:VIP和DIP
特性:
-
保證前端路由器將目標地址為 VIP 的報文通過 ARP 解析后送往 Director。
-
靜態綁定:在前端路由將 VIP 對應的目標 MAC 地址靜態配置為Director VIP 接口的 MAC 地址。
-
arptables:在各 Realserver 上,通過 arptables 規則拒絕其響應對 VIP 的 ARP 廣播請求
-
修改內核參數:在 Realserver 上修改內核參數,限制arp通告及應答級別
-
各RIP 必須與 DIP 在同一個物理網絡中
-
RS 的 RIP 可以使用私有地址,也可以使用公網地址,Realserver 不能將網關指向 DIP
-
Director 僅負責處理入站請求,響應報文由 Realserver 直接發往客戶端
-
不支持端口映射
.
-
LVS-TUN:在原請求IP報文之外新加一個IP首部;
轉發方式:在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;
Real Server接收到請求以后,先拆除第一層封裝后拆除第二層封裝,然后把響應數據直接傳輸給Client
特性:
-
集群節點可以跨越Internet
-
Director的VIP和RIP必須為公網IP
-
Director僅處理入站請求,響應報文則由Real Server直接發往客戶端
-
Real Server的網關不能指向Director
-
Real Server 需支持隧道協議
-
不支持端口映射
.
-
LVS-FULLNAT:同時修改請求報文的源和目標IP;默認不支持
特點:
-
RIP,DIP 可以使用私有地址
-
RIP 和 DIP 可以不再同一網絡中,且 RIP 的網關不需要指向 DIP
-
支持端口映射
-
請求和響應報文都經由 Director
LVS調度算法
靜態調度算法:只根據算法進行調度 不考慮后端服務器的實際連接情況和負載情況
-
rr:round robin,輪詢,簡單在各主機間輪流調度
-
wrr:weighted round robin,加權輪詢,根據各主機的權重進行輪詢
-
sh:source hash,源地址哈希,對客戶端地址進行哈希計算,保存在 Director 的哈希表中,一段時間內,同一個客戶端 IP 地址的請求會被調度至相同的 Realserver。實現 session affinity(會話綁定),一定程度上損害了負載均衡的效果。
-
dh:destination hash,和 sh 類似,dh 將請求的目標地址進行哈希,將相同目標 IP 的請求發送至同一主機。當 Realserver 為透明代理緩存服務器時,提高緩存的命中率。
動態調度算法:根據各RS當前負載狀態及調度算法進行調度
-
lc:least connted,最少連接,根據 overhead = active*256 + inactive 計算負載狀態,每次選擇 overhead 最小的服務器
-
wlc:weighted lc,默認,加權最少連接,根據 overhead = (active*256+inactive)/weight 來計算負載,每次選擇 overhead 最小的服務器,
-
sed:shortest expected delay,最短期望延遲,不對 inactive 狀態的連接進行計算,根據 overhead = (active+1)*256/weight 計算負載,選擇 overhead 最小的服務器進行調度
-
nq:never queue,當有空閑服務器時,直接調度至空閑服務器,所有服務器都繁忙時,使用 SED 算法進行調度
-
LBLC:locality based least connection,基于本地的最少連接,相當于 dh + wlc,正常請求下使用 dh 算法進行調度,如果服務器超載,則使用 wlc 算法調度至其他服務器
-
LBLCR:locality based least connection with replication,基于本地的帶復制功能的LBLC,判斷后端連接數,當A的連接很多,而B的很空閑,會將A的部分連接分配到B上,避免大范圍不公平。主要用于Cache 集群系統
ipvsadm/ipvs
-
集群服務管理:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A|E VIP
添加修改服務地址
-D -t|u|f VIP
刪除集群
-t|u|f
類型: tcp | udp | 防火墻標記
-s scheduler
指定集群調度算法,默認wlc
-
RS管理:
ipvsadm -a|e -t|u|f VIP -r RIP [-g|i|m] [-w weight]
添加修改RS
-g|i|m
lvs模型: DR | TUN | NAT 默認DR
-w weight
指定權重
清空定義: ipvsadm -C
查看: ipvsadm -ln
保存和重載: ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore
示例:
ipvsadm -A -t 10.1.235.55:80 -s wrr
ipvsadm -a -t 10.1.235.55:80 -r 10.1.235.6 -g -w 2
ipvsadm -a -t 10.1.235.55:80 -r 10.1.235.7 -g -w 3
原創文章,作者:Jasper,如若轉載,請注明出處:http://www.www58058.com/56672