天天看點

負載均衡之LVS詳解

負載均衡-四層負載均衡:LVS

之前也寫過相關的文章,但是寫的太爛了。。。自己都不也敢直視。。。

現在有空決定重新全面學習了下LVS.總結出本部落格。好了,其他的不多說了,我們開始吧。

一、負載均衡

  負載均衡包括如下:

    1、硬體負載均衡:

    F5,BIG IP

    Citrix,Netscaler

    A10

   2、軟體負載均衡:

四層:

  LVS

七層:反向代理

  Nginx 

    代理的協定有:http smtp pop3 imap

  HAProxy

代理的協定有:http,tcp(mysql,smtp)

二、LVS的介紹

 1、簡介:

  LVS是Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月由章文嵩博士成立,是中國國内最早出現的自由軟體項目之一。

                                -----------百度百科。

  LVS是一個四層的負載均衡軟體,工作在核心空間。性能非常強大,而所支援的特性很少。工作在INPUT鍊上,是以lvs與iptables在INPUT鍊不能同時使用。

 2、組成:

  有兩部分:

    ipvsadm lvs規則管理

    ipvs 是核心程式

  ipvs在linux 2.6核心所有版本中已存在。隻需要安裝ipvsadm就可以了。

  安裝指令:yum -y install ipvsadm

三、LVS的三種模型

  NAT:位址轉換

  DR:直接路由

  TUN:隧道

  三種模型的特性:

  1、NAT

    後端的叢集節點也就是real server 必須與LVS所在的伺服器在同一個IP網絡中;

    後端的real server所使用的ip通常是私有位址,僅用于各叢集節點間的通信;

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

    real server必須将網關指向DIP;

    支援端口映射;

    real server可以使用任意OS;

    較大規模應該場景中,director易成為系統瓶頸;

  2、DR

    叢集節點real server 跟LVS必須在同一個實體網絡中;

    real server 可以使用公網位址,實作便捷的遠端管理和監控;

    LVS僅負責處理入站請求,響應封包則由real server直接發往用戶端;

    real server不能将網關指向DIP;

    不支援端口映射;

    在這個模型下vip和real server所對應的端口要一樣才行。

  3、TUN

    叢集節點可以跨越Internet;

    real server必須是公網位址;

    real server網關不能指向LVS;

    隻有支援隧道功能的OS才能用于real server;

  LVS預設使用的模型為DR模型

四、LVS的排程算法

  1、靜态排程算法

    rr: 輪叫,輪詢

    wrr: 權重輪叫

    sh: sourch hash,源位址hash session 綁定到同一主機上

    dh: destination hash 目的位址hash session 通過目的位址來綁定到同一主機上。

  2、動态排程算法

    lc: least-connect 最少連接配接 active * 256 + inactive 誰的小,挑誰

    wlc: 權重最少連接配接,( active * 256 + inactive ) / weight 

    sed: 最少期望延遲 (active + 1 ) * 256 / weight 

    nq: never queue 永不排隊,改進的sed

    LBLC: 基于本地的最少連接配接

    LBLCR: 基于本地的帶複制功能的最少連接配接

  LVS預設的排程算法是wlc

五、LVS的ipvadm指令的使用

  安裝:

    在redhat/centos 6系統中:yum install ipvsadm -y 

  ipvsadm指令的使用:

    1、管理叢集服務

      添加或修改:

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

        -A: 添加

        -E:修改

        -t: tcp

        -u: udp

        -f: FirewallMark FWM 防火牆标記。service-address: Mark Number

        service-address:VIP:PORT 使用VIP和端口号

        -s: 排程算法

        -p: 後跟逾時時間,在支援連結時使用,預設300s 機關是:秒

        -M: 指定子網路遮罩,預設是255.255.255.255

      删除:

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

        -D:删除

      儲存規則:

        ipvsadm -S > /path/to/somefile 

      重載規則:

        ipvadm -R < /path/to/somefile

      清除規則:

        ipvsadm -C

      示例如下:

        ipvadm -A -t 192.168.1.10:80 -s rr 

        #添加一個規則,指定的-t tcp協定,使用192.168.1.10 為VIP 端口為80 -s指定為rr 也就是輪詢。

    2、管理叢集服務中後端的real server

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

        -a: 添加

        -e: 修改

        service-address: 此前添加的的service-address: VIP:PORT

        -r: 指定後端real server 

        server-address: RIP:PORT

        -g: DR模型

        -i: TUN模型

        -m: NAT模型

        -w: 指定權重

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

        -d:删除 

        ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.9:80 -g -w 3

        ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.8:80 -g -w 5

        #定義了兩個後端server 并指定為DR模型和各個伺服器的權重

    3、檢視規則

        ipvsadm -L -n

        ipvsadm -L -n -c 檢視目前連接配接資訊

六、LVS的持久連接配接

  無論使用什麼算法,LVS持久都能實作在一定時間内,将來自同一個用戶端請求派發至此前標明的後端伺服器即RS。Real Server。

  LVS 持久連接配接模闆(記憶體緩沖區):每一個用戶端配置設定給它的RS的映射關系;

    ipvsadm -A|E ... -p timeout:

        timeout: 持久連接配接時長,預設300秒;機關是秒;

  應用場景如:在基于SSL,需要用到持久連接配接;後端伺服器有session應用時,比較使用者登入,這時多個後端伺服器session共享問題無法解決時,需要持久連接配接到同一個後端伺服器。

  三種持久連接配接:

    1、PPC:将來自于同一個用戶端對同一個叢集服務的請求,始終定向至此前標明的RS;     持久端口連接配接

      ipvsadm -A -t 192.168.1.10:23 -s rr -p 600 

      ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.9:23 -g -w 2

      ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.8:23 -g -w 5

        #注:此時的權重沒有作用了。

    2、PCC:将來自于同一個用戶端對所有端口的請求,始終定向至此前標明的RS;           持久用戶端連接配接

    把所有端口統統定義為叢集服務,一律向RS轉發;

      ipvsadm -C

      ipvsadm -A -t 192.168.1.10:0 -s rr -p 600

      ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.9 -g -w 2

      ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.8 -g -w 5

      此時後端伺服器的所有端口都可以轉發了,并綁定到同一個後端伺服器上。

    3、PNMPP:持久防火牆标記連接配接

      把多個端口持久連接配接到後端同一台伺服器上,此前兩種方法都無法做到。

      防火牆标記,可以做到把多個端口定義為同一個标記數(1-99) 把标記号進行轉發到後端即可。

      方法如下:

        如把80和23端口标記為8

        在PREROUTING鍊上标記:

        操作如下:

            iptables規則:

                iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8

                iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8

                #使用的-d 後面是VIP位址

            添加LVS規則:

                ipvsadm -A -f 8 -s rr -p 600

                ipvsadm -a -f 8 -r 192.168.1.9 -g -w 2

                ipvsadm -a -f 8 -r 192.168.1.8 -g -w 5

        此時應當實作了之前的把多個端口定位到此前所標明的後端同一台伺服器上。

以上就是LVS的基于概念和ipvsadm指令基本使用詳情。如有批漏請各位指出,多謝關注。

下一篇會有三個腳本來實作LVS在負載均衡端和Real Server的設定,其中有一個腳本來提供後端Real Server健康狀态檢測,并自動添加恢複後的Real Server伺服器。

本文轉自 ZhouLS 51CTO部落格,原文連結:http://blog.51cto.com/zhou123/1683952