LVS類型及工作原理

lvs工作原理

lvs(Linux Virtual Server),工作于layer4,其原理是根據請求報文的目標IP和PORT將其轉發至后端主機集群中的某一提供服務的主機,具體轉發到哪一臺后端主機需要由挑選算法來決定。通俗來說,lvs的功能是通過在內核空間的netfilter上的INPUT鏈上的ipvs實現的,當報文由物理網絡接口進入主機后,ipvs將流經至INPUT鏈即將進入用戶空間的報文強行改變其流向,即PREROUTING-->INPUT-->POSTROUTING。

lvs.png

lvs的架構

  • 調度器:director,dispatcher,balancer

  • RS:Real Server

  • CIP:Client IP

  • VIP:Director Virtual IP

  • DIP:Director IP

  • RIP:Real server IP

lvs type

lvs-nat(MASQUERADE)

lvs-nat2.png

實現過程

當客戶端發出的請求報文經Director的VIP所在的物理網卡流入主機的內核空間時,報文的源IP是CIP,目標IP是VIP。此時,ipvs將強行改變報文的流經方向,即修改報文的目標IP并經DIP所在的物理網卡調度至后端的Real Server,此時,報文的源IP是CIP,而目標IP是RIP。后端RS接收報文并處理后,構建響應報文(源IP是RIP,目標IP是CIP)將經DIP發送至Director,此時,ipvs將修改報文的源IP為VIP,并經VIP所在的物理網卡發送給客戶端。

功能實現的本質

多目標的DNAT(iptables),它通過修改請求報文的目標IP地址(同時可能會修改目標端口實現端口映射) 至挑選出某RS的RIP地址實現轉發。

特性

  • RIP和DIP應該使用私網地址,且RS的網關要指向DIP;

  • 請求和相應報文都要經由director轉發,極高負載的場景中,director可能會成為系統瓶頸;

  • 支持端口映射;

  • RS可以使用任意OS;

  • RIP和DIP必須在同一物理網絡。

lvs-dr(GATEWAY)

lvs-dr2.png

幾個理解要點

  • Director和RS只需要一塊物理網卡;

  • Director和RS連接至同一臺交換機;

  • 每臺RS均配置有VIP,并且配置在lo的別名上,如,lo:0

  • 由于RS均有VIP,在路由器進行廣播時,為了避免都進行相應,需進行設定,有三種方案

    • 靜態綁定:在交換機的配置文件直接進行指定

    • arptables:通過arptables進行設置

    • 修改RS主機內核參數

實現過程

客戶端發出的請求報文經過層層路由,到達服務器所在網絡的路由器(此時報文的源IP是CIP,目標IP是VIP)。與路由器相連的交換機此時要進行廣播獲得Director的mac地址,路由器將報文重新進行封裝(源mac是路由器的mac地址,目標mac是Director的MAC地址將),并將報文轉發至Director。此時,Director亦要進行廣播獲得RS的mac地址,并重新將報文進行封裝(目標mac是RS的mac地址)轉發給交換機,交換機收到報文后根據mac轉發給對應的RS。報文到達RS后由物理網卡流入內核空間,并再次經lo進入用戶空間。報文處理后,構建響應報文(源IP是VIP,目標IP是CIP)經lo到物理網卡轉發至路由器,響應給客戶端。

實現本質

通過請求報文目標mac地址進行轉發。

特性

  • 保證前端路由器將目標IP為VIP的請求發送給director;

  • RIP可以使用私有地址,也可以使用公網地址;

  • RS跟Director必須處于同一物理網絡中;

  • 請求報文經Director調度,但相應報文一定不能經由Director;

  • 不支持端口映射;

  • RS可以是大多數的OS;

  • RS的網關不能指向DIP。

lvs-tun(IPIP)

lvs-tun2.png

實現本質

不修改請求報文的ip首部,而是通過在原有的ip首部之外,再封裝一個ip首部。需要考慮的問題是再封裝后會超出MTU,而再進行報文切片,但是一般情況下請求報文都比較小,不太可能超出MTU。

特性

  • RIP、VIP和DIP全得是公網地址;

  • RS的網關不能指向DIP;

  • 請求報文必須經由Director調度,但相應報文必須不能經由Director;

  • 不支持端口映射;

  • RS的OS必須支持隧道功能。

lvs-fullnat:

lvs-fullnat2.png

實現本質:

Director同時修改請求報文的源地址和目標地址進行轉發。但是在內核中并沒有支持此種模式,若要使用需要到官方網站下載補丁包。

實現過程

Director收到報文后, 將源IP(CIP)修改為(DIP),目標地址(VIP)修改為(RIP),然后經過層層路由,轉發給RIP,。當RS主機收到報文后,回應時,源IP為RIP,目標IP為VIP.Director收到報文后,將源IP修改為自己(VIP), 目標IP修改為CIP。此模型適用與多機房且機房不位于同一地區。

特性

  • VIP是公網地址,RIP和DIP是私網地址,且二者無需在同一網絡中;

  • RS接收到的請求報文的源地址是DIP,因此要響應給DIP;

  • 請求報文和響應報文都必須經由Director;

  • 支持斷就映射機制;

  • RS可以是任意OS。

lvs scheduler

靜態方法:僅根據算法本身進行調度。

  • RR:Round Robin,輪調;

  • WRR:Weighted RR,加權輪調;

  • SH:Source Hash,將來自于同一個ip的請求始終調度至同一RS,實現session保持的機制;

  • DH:Destination Hash,將對同一個目標的請求始終發往同一個RS;

動態方法:根據算法及各RS的當前負載(overhead)狀態進行調度。

  • LC:Least Connection,overhead=Active*256+Inactive;

  • WLC:Weighted LC,overhead=(Active*256+Inactive)/weight;

  • SED:Shortest Expection Delay,overhead=(Active+1)*256/weight

  • NQ:Never Queue,SED算法的改進;

  • LBLC:Locality-Based LC,正向代理情況下的cache server調度;

  • LBLCR:Locality-Based Least-Connection with Replication,帶復制功能的LBLC算法。

ipvsadm工具的使用

管理集群服務

ipvsadm -A|E -t|u|f service-address [-s scheduler]
ipvsadm -D -t|u|f service-address
    service-address(VIP):
        tcp: -t ip:port
        udp: -u ip:port
        fwm: -f mark
    -s scheduler:
        默認為wlc

管理集群服務中的RS

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
    server-address(RIP):
        ip[:port]
    lvs-type:
        -g: gateway,dr
        -i: ipip,tun
        -m: masquerade,nat

查看和清空

ipvsadm -C
ipvsadm -L|l [options]
    -n: numeric,基于數字 格式顯示地址和端口
    -c:connection,顯示ipvs連接;
    --stats:顯示統計數據;
    --rate:顯示速率;
    --exact:顯示精確值。

保存和重載–> /etc/sysconfig/ipvsadm

ipvsadm -R --> ipvsadm--restore
ipvsadm -S --> ipvsadm--save

置零計數器

ipvsadm -Z [-t|u|f service-address]

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

(0)
JeasonJeason
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • linux中用ACL實現靈活的權限管理

    ACL是什么?? ACL英文原意是Access Control List(訪問控制列表).它能夠實現靈活的權限管理,除了文件的所有者,所屬組和其他人,設置相應的權限外,ACL允許你給任何用戶或是用戶組設置任何文件/目錄的訪問權限(注意的是有些不支持數字模式的權限給定) ACL有什么用?? 作為UGO權限管理的補充,acl有GUO辦不到或者是難以辦到的功能 &…

    Linux干貨 2016-08-05
  • 簡單救援模式應用

                                  …

    2017-08-12
  • linux基本命令的使用

      1>    查看當前終端名:tty 或who am i       查看當前所有登錄的終端信息:who       查看當前所有登錄的終端的詳細信息 w 2> 編輯器    …

    2017-07-15
  • 基于Keepalived實現LVS雙主高可用集群

    前言 前面說過基于heartbeat的LVS高可用方案,今天帶來另一種解決方案:基于Keepalived實現LVS雙主高可用集群。什么是Keepalived呢,keepalived觀其名可知,保持存活,在網絡里面就是保持在線了, 也就是所謂的高可用或熱備,用來防止單點故障的發生。本文將詳細講述Keepalived工作原理及高可用解決方案的實現。 相關介紹 K…

    Linux干貨 2015-06-16
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄管理類的命令: mkdir, rmdir mkdir:make directories mkdir [OPTION]… DIRECTORY… -p: 自動按需創建父目錄; -v: verbose,顯示詳細過程; -m MODE:直接給定權限; 注意:路徑…

    Linux干貨 2018-01-17
  • RPM軟件包管理器及前端工具yum

    目前在linux系統之上軟件安裝方式最常見的有兩種,分別是: dpkg:這個機制最早是由Debian Linux社區所開發出來的,透過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯。只要是衍生于Debian的其他linux發行版,大多使用dpkg這個機制來管理軟件的,包括B2D、Ubuntu等等。 RP…

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