LVS詳解

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

  • wKiom1gYRrjAFLkPAAB2WLxV4ZE326.jpg-wh_50


    地址轉換類型,主要是做目標地址轉換,類似於iptables的DNAT
     LVS 修改請求報文的目標地址爲 RIP,轉發至後端的 RealServer,並修改後端響應報文的源地址爲 VIP,響應至客戶端。


 特性:

  1. 集羣節點跟 Director 必須在同一個 IP 網絡中,並且其網關需要指向DIP的地址

  2. RIP地址通常爲私有地址,僅用於各個集節點之間通信

  3. Director位於client和Real Server之間,處理進出所有報文,大型應用易成爲瓶頸。

  4. Real Server必須將網關指向DIP

  5. 支持端口映射

.

  • LVS-DR:操縱封裝新的MAC地址;默認類型

    wKioL1gYRrfD7OP6AAB-91KUnq0819.jpg-wh_50

    直接路由,爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;
     每個Real Server上都有兩個IP:VIP和RIP,VIP是隱藏的,不會接收請求,用來做請求響應的源IP
     Director上只需要一個網卡利用別名配置兩個IP:VIP和DIP


 特性:

  1. 保證前端路由器將目標地址爲 VIP 的報文通過 ARP 解析後送往 Director。

    1. 靜態綁定:在前端路由將 VIP 對應的目標 MAC 地址靜態配置爲Director VIP 接口的 MAC 地址。

    2. arptables:在各 Realserver 上,通過 arptables 規則拒絕其響應對 VIP 的 ARP 廣播請求

    3. 修改內核參數:在 Realserver 上修改內核參數,限制arp通告及應答級別

  2. 各RIP 必須與 DIP 在同一個物理網絡中

  3. RS 的 RIP 可以使用私有地址,也可以使用公網地址,Realserver 不能將網關指向 DIP

  4. Director 僅負責處理入站請求,響應報文由 Realserver 直接發往客戶端

  5. 不支持端口映射

.

  • LVS-TUN:在原請求IP報文之外新加一個IP首部;

    wKiom1gYRriw7e-oAAB24vpsilE897.jpg-wh_50

    轉發方式:在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;
     Real Server接收到請求以後,先拆除第一層封裝後拆除第二層封裝,然後把響應數據直接傳輸給Client


 特性:

  1. 集羣節點可以跨越Internet

  2. Director的VIP和RIP必須爲公網IP

  3. Director僅處理入站請求,響應報文則由Real Server直接發往客戶端

  4. Real Server的網關不能指向Director

  5. Real Server 需支持隧道協議

  6. 不支持端口映射

.

  • LVS-FULLNAT:同時修改請求報文的源和目標IP;默認不支持

特點:

  1. RIP,DIP 可以使用私有地址

  2. RIP 和 DIP 可以不再同一網絡中,且 RIP 的網關不需要指向 DIP

  3. 支持端口映射

  4. 請求和響應報文都經由 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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章