N21_17周_3_1_LVS的工作原理

 

結合圖形描述LVS的工作原理

LVS簡介    

        LVS(Linux Virtual Server,虛擬服務器),是一個虛擬的四層路由交換服務器集群系統,根據調度算法將請求報文的目標IP和目標PORT將其轉發至后端主機集群中的某臺服務器。項目是由章文嵩博士于1998年5月成立,是中國國內最早的自由軟件項目之一。

        在2B、2C的業務中,面對快速增長的訪問,服務器需要具備處理這種大量并發訪問服務的能力,對于單臺服務器來講,CPU、I/O處理能力很會成為瓶頸,即使對硬件進行升級,單臺服務器的性能總是有上限的,處理能力不會一直隨著硬件配置的升級而一直線性提升。因此,必須采用集群技術來解決大量并發的應用場景。Linux虛擬服務器(Linux Virtual Servers,LVS)使用負載均衡技術將多臺服務器組成一個虛擬服務器。

 

LVS相關術語

VS

Virtual Server

虛擬服務器,Balancer負載均衡器

RS

Real Server

后端真實服務器

CIP

Client IP

客戶端請求IP

VIP

Director Virtual   IP

負載均衡器(前端)虛擬IP

DIP

Directior IP

RIP

Real Server IP

后端真實服務器IP

NAS

Network Attached   Storage

網絡附加存儲(文件共享服務器)

SAN

Storage Area   Network

存儲區域網絡(塊級別)

DS

Distributed   Storage

分布式存儲

LB

Load Balancing

負載均衡(增加處理能力)

HA

High   Availability

高可用(始終在線,增加服務可用性)

HP

High Performance

高性能

NAT

Network Address   Translator

網絡地址轉換

DR

Direct Routing

直接路由

TUN

IP Tunneling

IP隧道模型

RR

Round Robin

輪詢調度

WRR

Weight RR

加權輪詢

NTP

Network Time Protocol 

用時間服務器同步時間

 

LVS工作原理與結構

LVS屬于集群中的層次

1,Hardware負載均衡設備

    F5、BIG IP、Citrix、Netscaler、A10

2,Software軟件負載均衡

    四層

        LVS

    七層

        nginx

        haproxy

 

LVS的設計要點

    1,session保持

    2,數據共享

        1>,共享存儲

                NAS

                SAN

                DS

        2>,數據同步

 

LVS的結構

        LVS由前端的負載均衡器(Load Balancer,LB)和后端的真實服務器(Real Server,RS)群組成。RS間可通過局域網或廣域網連接。LVS的這種結構對用戶是透明的,用戶只能看見一臺作為LB的虛擬服務器(Virtual Server),而看不到提供服務的RS群。當用戶的請發往虛擬服務器,LB根據設定的包轉發策略和負載均衡調度算法將用戶請求轉發給RS。RS再將用戶請求結果返回給用戶。

LVS內核模型

LVS_內核模型.jpg

1>,當客戶端的請求到達負載均衡的內核空間時,首先會到達PREROUTING鏈。

2>,當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。

3>,LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里面的目的地址及端口沒有在規則里面,那么這條數據包將被放行至用戶空間。

4>,如果數據包里面的目的地址及端口在規則里面,那么這條數據報文將被修改目的地址為事先定義好的后端服務器,并送往POSTROUTING鏈。

5>,最后經由POSTROUTING鏈發往后端服務器。

LVS_內核模型02.jpg

注:LVS是工作在內核中的。

     LVS工作在INPUT鏈上。

     LVS和iptables不能同時使用

     ipvs工作在內核中。

     ipvsadm工作在用戶模式中,管理集群服務的命令行工具

     VIP是公網地址;RIP和DIP是私網地址,且可以不在同一IP網絡,但需要通過路由相互通信;

     RS收到的請求報文的源IP是DIP,因此其響應報文將發送給DIP;

       

LVS的包轉發模型

1NAT模型

     多目標的DNAT,通過將請求報文的目標地址和目標端口修改為挑選出某RS的RIP和PORT來實現。

LVS_NAT.jpg

1>,客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),后面統稱CIP,目標地址為VIP(負載均衡前端地址,后面統稱為VIP)。

2>,負載均衡收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的目標地址改為了后端服務器的RIP地址并將報文根據算法發送出去。

3>,報文送到Real Server后,由于報文的目標地址是自已,所以會響應該請求,并將響應報文返還給LVS。

4>,然后lvs將些報文的源地址修改為本機并發送給客戶端。

注:在NAT模式中,Real Server的網關必須指向LVS,否則報文無法送達客戶端。

LVS_NAT02.png

注: 集群節點跟director必須在同一個IP網絡中;

        RIP通常是私有地址,僅用于各集群節點間的通信;

        director位于client和real server之間,并負責處理進出的所有通信;

        real server必須將網關指向DIP;

        支持端口映射(轉發);

        real server可以使用任意OS;

        請求和響應報文都要經過director轉發,在較大規模應用場景中,director易成為系統瓶頸;

 

 

2、DR模型

     通過修改請求報文的MAC地址進行轉發,IP首部不會發生變化(源IP為CIP,目標IP始終為VIP)。

LVS_DR.jpg

1>,客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

2>,負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的源MAC地址改為自已的DIP的MAC地址,并將此包發送給RS。

3>,RS發現請求報文中的目的MAC是自已,就會將次報文接收下來,處理完請求報文后,將響應報文通過lo接口送給eth0網卡直接發送給客戶端。

注意:需要設置lo接口的VIP不能響應本地網絡內的arp請求。

LVS_DR02.jpg

問題:怎樣確保前端路由器將目標IP為VIP的請求報文一定會發送給Director?

解決:

   1),靜態綁定; 

   2),禁止RS響應VIP的ARP請求;

     a),arptables上定義;

     b),修改各RS的內核參數,并把VIP配置在特定的接口上實現禁止其響應;

       kernel parameter:

         arp_ignore:定義接收到ARP請求時的響應級別;

           0: 只要本地配置的有相應地址,就給予響應;

           1: 僅在請求的目標地址配置請求到達的接口上的時候,才給予響應;

         arp_announce:定義將自已地址向外通告時的級別;

           0:將機機任何接口上的任何地址向外通告; 

           1:試圖僅向目標網絡通告與其網絡匹配的地址;

           2:僅向與本地接口上地址匹配的網絡進行通告;

Arp協議:ip地址在局域網內無法進行通信,最終局域網內兩臺主機通信還是通過MAC地址,所以就是涉及ip到MAC地址轉換的問題。

 

注意:集群節點RS跟director必須在同一個物理網絡中;

   RS的RIP可以使用私有地址或公網地址,實現便捷的遠程管理和監控;RIP使用私有地址可以通過在之前加一個路由器的方式和外網通信,直接響應客戶機。

   Director僅負責處理入站請求,響應報文則由real server直接發往客戶端;即請求報文必須由Director調試,但響應報文必須不能經由Director。

   real server不能將網關指向DIP;(直接使用前端網關)

   不支持端口映射;

 

3TUN模型

     不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原有的IP首部之外再次封裝一個IP首部(源IP為DIP,目標IP為RIP)。

LVS_TUN.jpg

1>,客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

2>,負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,并將些包文發送給RS。

3>,RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自已lo接口上的VIP,所以會處理次請求報文,并將響應報文通過lo接口送給eth0網卡直接發送給客戶端。

注意:需要設置lo接口的VIP不能在公網上。

    請求時,對報文再進行一次封裝;返回時,直接返回。

    集群節點可以跨越互聯網Internet;

    RIP必須是公網地址;

    director僅負責處理入站請求,響應報文由real server直接發往客戶端;

    響應報文一定不能通過director即real server網關不能指向director;

    只有支持隧道功能的OS才能用于real server;

    不支持端口映射;

LVS的調度算法

LVS的調度算法分為靜態動態兩類。

靜態算法

靜態算法(4種):只根據算法進行調度 而不考慮后端服務器的實際連接情況和負載情況

①.RR:輪詢調度(Round Robin)

  調度器通過”輪詢”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載?輪詢機制,依次分配請求,方式簡單但是負載均衡的效果一般。

 

②.WRR:加權輪詢(Weight RR)

  調度器通過“加權輪詢”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。加權輪詢,權重越大承擔的負載就越大。

 

③.DH:目標地址哈希(Destination ip Hash ) 能實現連接追蹤,但不考慮負載均衡效果。

  將同一個請求發給同一個Server;Hash的是目標地址。

  例:客戶A訪問了內容A,是server1處理的,這時客戶B也訪問了內容A,這時也會被指定到Server1處理。

 

④.SH:源地址 hash(Source ip Hash)

  源地址哈希,將來自同一個ip請求通過記錄在ip hash表中綁定在同一個服務器,實現session保持?

  缺點:調度粒度大,對負載均衡效果差。

  例:這個源地址訪問是服務器A響應的,以后只要是這個源地址發的請求,都會是服務器A響應。

 

動態算法

動態算法(6種):前端的調度器會根據后端真實服務器的實際連接情況來分配請求

 

①.LC:最少鏈接(Least Connections)

  調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用”最小連接”調度算法可以較好地均衡負載。

   小結:最小連接;OverHead=activity*256+inactive;結果最小的將會被挑中;

 

②.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)

  在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載?調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。

   小結:加權最少連接;(activity*256+inactive)/weight;誰的小挑誰;

 

③.SED:最短延遲調度(Shortest Expected Delay )

  在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處于活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處于無連接狀態。

   小結:最短期望延遲;(active+1)*256/weight;

 

④.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)

  無需隊列。如果有臺 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對于DNS的UDP不需要考慮非活動連接,而httpd的處于保持狀態的服務就需要考慮非活動連接給服務器的壓力。

    小結:永不排隊。

 

⑤.LBLC:基于局部性的最少鏈接(locality-Based Least Connections)

  基于局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統?該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器?

   小結:基于本地的最少連接。

 

⑥. LBLCR:帶復制的基于局部性最少連接(Locality-Based Least Connections with Replication)

  帶復制的基于局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統?它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射?該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器?同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

   小結:基于本地的帶復制的最少連接。

 

ipvs管理工具介紹

ipvsadm:工作在用戶空間,定義轉發規則的程序;

ipvs:工作在內核空間,根據規則完成調度請求的程序;

 

ipvsadm用法  

管理服務器集群

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]

 例:# ipvsadm -A -t 172.16.100.1:80 -s rr

       ipvsadm -D -t|u|f service-address

            -A: 添加

            -E:修改

            -D:刪除

            -t:TCP協議的端口

            -u:UDP協議的端口

                   server-address: IP:[PORT]

            -f:FWM,防火墻標記,標記用數字來表示,將多個端口綁定在一起定義成一個集群服務使用

                  server-address: Mark Number

            -s: 制定調度方法,默認為wlc

 

管理集群服務的RS

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

ipvsadm -d -t|u|f service-address -r server-address

-a:添加RS

-e:修改RS

-d:刪除RS

-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 -a -t 172.16.100.1:80 -r 192.168.10.8 -m

      #ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

 

保存RSCS

        -S save: 

        ipvsadm -S > /etc/sysconfig/ipvsadmin.v1 

        ipvsadm-save > /etc/sysconfig/ipvsadmin.v1 

        service ipvsadm save      

載入此前的規則

        -R: restore

        ipvsadm -R < /etc/sysconfig/ipvsadmin.v1 

        ipvsadm-restore < /etc/sysconfig/ipvsadmin.v1 

        service ipvsadm start 

清空規則(刪除所有集群服務)

        ipvsadm -C 

 顯示規則

        ipvsadm -L |l [options]

        options

            –c:顯示當前所有的connection(ipvs連接狀況)

            –stats:統計數據。列出CS及RS的連接統計數據

            –rate:速率。列出CS及RS的連接、報文及字節速率

            -n –numeric: 數字格式顯示

            –exact: 精確值

            –timeout:顯示tcp、tcpfin和udp的會話超時時長

   注:各節點之間的時間偏差不應該超過1秒鐘。

其它

NTP

NTP:Network Time Protocol 用時間服務器同步時間

說明: C:\Users\zhouyong\AppData\Local\YNote\data\123456bisheng@163.com\88badfa660764e96bb056c6425060155\3fbcedfa4f47460294dc657316dab024.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

(0)
365365
上一篇 2016-07-12
下一篇 2016-07-12

相關推薦

  • tom貓—–(Tomcat詳解)

    目錄 安裝tomcat tomcat目錄結構及配置文件構成以及主配置文件server.xml ,tomcat中的組件 實現反代tomcat的方法 nginx+tomcat cluster http(mod_porxy_http)+tomcat cluster http(mod_porxy_ajp)+tomcat cluster http(mod_jk)+to…

    2017-11-16
  • 馬哥教育網絡班20期第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關  示例演示。 linux上文件管理命令包括: ls,cat,pwd,cp,rm,cd,head,tail,more,less,cut,which,whereis,find,mkdir,mv; 1、ls 命令;顯示文件/文件夾清單   例如:如下顯示列出根目錄下的文件及目錄…

    Linux干貨 2016-06-23
  • RAID與邏輯卷

        RAID與邏輯卷作為磁盤管理的方式,各有各的優勢。RAID是多個磁盤合成一個陣列,以便提供更好的性能;邏輯卷相對于分區來說,可以在線擴展空間,也可以縮減空間??梢岳密浖姆绞絹韺崿FRAID與邏輯卷。 一、利用軟件方式實現RAID     利用sdb sdc sdd sd…

    2017-08-12
  • 第一周博客作業-N31-初識Linux

    本篇文章主要圍繞計算機的組成及其功能以及Linux的基礎命令、目錄等進行相關闡述

    2018-07-11
  • N25-第8周博客作業

    第八周 1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主使用紅色顯示; #!/bin/bash # ip=172.16.250. for i in {1..254}; do if ping -w 1 -c 1 $ip$i &> /dev/n…

    Linux干貨 2017-03-10
  • 第六周課程作業

    1、復制/etc/rc.d/init.d/functions文件至/tmp目錄,將/tmp/functions文件中 的以至少一個空白字符開頭的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、復制/boot/gru…

    Linux干貨 2016-12-12

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-07-12 14:10

    寫的很好,排版還可以在漂亮一點,加油!圖是自己畫的嗎?

欧美性久久久久