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

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

    LVS詳解

 特性:

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

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

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

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

  5. 支持端口映射

.

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

    LVS詳解

    直接路由,為請求報文重新封裝一個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首部;

    LVS詳解

    轉發方式:在原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

原創文章,作者:Jasper,如若轉載,請注明出處:http://www.www58058.com/56672

(0)
JasperJasper
上一篇 2016-11-11
下一篇 2016-11-11

相關推薦

  • Linux發行版介紹

    一,Linux是什么?      Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統…

    2016-10-29
  • vim文本編輯器之快捷鍵滿天飛

    vim文本編輯器不同于nano的是其功能非常強大,強大的功能還支持各種快捷鍵,讓我們編輯文本的時候更方便更快捷。 本文將會按照下圖所展示的功能來對命令一一講解,           打開文件:       &n…

    Linux干貨 2016-08-11
  • 設計模式(二)單件模式Singleton(創建型)

      幾乎所有面向對象的程序中,總有一些類的對象需要是唯一的,例如,通過數據庫句柄到數據庫的連接是獨占的。您希望在應用程序中共享數據庫句柄,因為在保持連接打開或關閉時,它是一種開銷。再如大家最經常用的IM,如QQ,在同一臺電腦,一個帳號只能有唯一的登錄。 1. 問題 怎樣確保一個特殊類的實例是獨一無二的(它是這個類的唯一實例),并且這個實例…

    Linux干貨 2015-06-24
  • 軟鏈接和硬鏈接詳解

    軟連接和硬鏈接圖解 硬鏈接 符號鏈接 軟鏈接和硬鏈接詳解 軟鏈接和硬鏈接詳解 Linux下的鏈接文件有點類似于Windows的快捷方式,但又不完全一樣。鏈接文件有兩種:一種是硬鏈接,另一種是符號鏈接(又稱軟鏈接)。 UNIX文件系統提供了一種將不同文件鏈接至同一個文件的機制,我們稱這種機制為鏈接。它可以使得單個程序對同一文件使用不同的名字。這樣的好處是文件系…

    Linux干貨 2016-09-06
  • 淺談HTTP協議以及httpd的十八般武藝

      初識HTTP協議                HTTP(hyper text transfer protocal)作為互聯網應用最廣泛的協議,任何一個運維人員都無法回避它,HTTP的目的就是提供一種發布和…

    Linux干貨 2016-02-14
  • LInux用戶和組管理詳解

    一、用戶和組的概念 Linux系統是多任務、多用戶的分時操作系統。用戶要使用系統資源,需要向管理員驗證身份,由管理員進行認證和授權,并對用戶的行為進行追蹤和審計,以保障系統資源的合理分配以及系統的安全。 要達到賬號管理的目的,需要對用戶和用戶組進行管理。下面分別來介紹用戶管理和用戶組管理。 每個用戶都有唯一的一個編號來標識,這個標識號叫Uid,每個用戶至少屬…

    Linux干貨 2016-08-02
欧美性久久久久