lvs簡單使用

LB集羣實現前端

 

硬件nginx

1 F5
2 BIG-IP
3 Citrix NetScaler
4 A10
5 Redware

 

軟件算法

1 lvs 

2 haproxy

3 nginx

4 ats apache traffic server

5 perlbal

基於工做協議層次劃分

    傳輸層

        lvs,haproxy(mode tcp)

    應用層

        naproxy, nginx, ats, perlbar

 

LVS基礎知識apache

工做在傳輸層的軟件(TCP/IP協議棧),能基於TCP和UDP(目標IP和目標PORT)對請求進行負載均衡,也稱四層交換、四層路由

能根據負載均衡算法發送至後端主機集羣中某一臺主機

netfilter鏈使用

    PREROUTING ---> INPUT ---> POSTROUTING

ipvsadm 

    用戶空間命令行工具,定義集羣規則,管理集羣服務

ipvs

    工做在內核中netfilter INPUT鉤子上

    ipvsadm經過系統調用將規則發送給ipvs

支持TCP、UDP、AH、EST、AH_EST、SCTP等諸多協議

 

查看內核編譯IPVS狀況後端

1 grep -i -A 10 'IPVS' /boot/config-3.10.0-693.17.1.el7.x86_64

 

LVS Arch服務器

1 調度器:director, dispatcher, balancer 
2 RS:Real Server

 

LVS Typecookie

lvs-nat網絡

MASQUERADE類型

多目標的DNAT模式(iptables):它經過修改請求報文的目標IP地址(必要時一併修改目標PORT)至挑選出的Real Server的IP地址實現轉發

特性

    1. RealServer的IP地址和DIP使用私網地址

    2. 請求和響應報文都經由調度器轉發,極高負載的場景中,調度器:director可能會成爲系統瓶頸

    3. 支持端口映射

    4. RealServer可使用任意OS

    5. RIP 和 DIP 最好在同一IP網絡

 

lvs-dr (direct routing)session

GATEWAY類型

它經過修改請求報文的目標mac地址進行轉發

1. 保證前端路由器將目標IP爲VIP的請求報文發送給Director

    靜態綁定

    arptables

    修改RS主機的內核參數

2. RIP可使用私網地址也可使用公網地址,只要保證能和Director、公網通訊

3. RealServer 和 Director 要在一個局域網中

4. 請求報文經由Director調度,但響應報文直接由Real Server發送

5. RealServer網關不能指向DIP

6. 不支持端口映射

7. RealServer能夠用大多數OS

 

lvs-tun (ip tunneling)負載均衡

IPIP類型

1. RIP,DIP,VIP全都是公網地址

2. RealServer的網關不能指向DIP

3. 請求報文必須由Director調度,但響應報文必須由RealServer發送

4. 不支持端口映射

5. RealServer必須支持隧道功能

 

lvs-fullnat

Director經過同時修改請求報文的目標地址和源地址進行轉發

1. VIP是公網地址,RIP和DIP是私網地址,兩者無須在同一網絡中

2. Real Server 接收到請求報文的源地址爲DIP,所以要響應給DIP

3. 請求報文和響應報文都經由Director

4. 支持端口映射機制

5. Real Server 可使用任意OS

 

LVS Scheduler

靜態方法:僅根據算法自己調度

    RR
    
        round robin,輪詢

    WRR
    
        weight round robin,加權輪詢
    
    DH

        destination hash,將對同一個目標的請求始終調度至同一RealServer

    SH

        source hash,session保持機制

動態方法:根據算法和各RealServer當前負載狀態進行調度

    LC

        least connection,最少活動鏈接

        Overhead(負載) = Active * 256 + Inactive

    WLC

        weight least connection,加權最少活動鏈接

        Overhead = (Active * 256 + Inactive) / weight

    SED

        shortest expection delay,最短時間望延遲

        Overhead = (Active + 1 ) * 256 

    NQ

        never queue,永不排隊

        SED算法改進:第一輪用SED挑,挑一個排除一個,直到全部的RS都處理過一個請求,後續的使用SED處理 

    LBLC

        locality-based least connection,動態DH算法

        正向代理情形下的cache server調度

    LBLCR

        Locality-Based Least-Connection with Replication,帶複製功能的LBLC

 

ipvs集羣服務

1. 一個ipvs主機能夠同時定義多個cluster service

2. 一個cluster service上至少應該有一個Real Server

3. 定義cluster service時,要同時指明lvs-type、lvs scheduler

 

ipvsadm用法

service-address

    tcp:-t ip:port

    udp:-u ip:port

    fwm:-f mark

server-address

    ip[:port]

lvs-type

    -g:gateway,dr

    -i:ipip,tun

    -m:masquerade,nat

scheduler

    -s:默認爲wlc

管理集羣服務

    ipvsadm -A|E -t|u|f service-address [-s scheduler]

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

管理集羣服務的RealServer

    ipvsadm -a|e -t|u|f service-address -r server-address

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

清空和查看

    ipvsadm -C

    ipvsadm -L|l [options]

        -n:numberic,以數字格式顯示地址和端口

        -c:connection,顯示當前TCP鏈接

        --stats,statistics,顯示統計數據

        --rate:速率

        --sort:排序

        --exact:精確值

保存和重載

    ipvsadm -R

    ipvsadm -S [-n]

置零計數器

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

 

實例:lvs-nat

Director 

    VIP 192.168.111.128

    DIP 192.168.1.1

RealServer(Web Server)

    RIP1 192.168.1.2:8080

    RIP2 192.168.1.3:8080

ipvsadm -A -t 192.168.111.128:80 -s rr

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.2 -m

ipvsadm -a -t 192.168.111.128:80 -r 192.168.1.3 -m

ipvsadm -L -n

ipvsadm -E -t 192.168.111.128:80 -s sh 

ipvsadm -L -n

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.2:8080 -m

ipvsadm -e -t 192.168.111.128:80 -r 192.168.1.3:8080 -m 

ipvsadm -S > /etc/sysconfig/ipvsadm || ipvsadm-save

 

實例:lvs-dr

Director 

    VIP 192.168.111.10

    DIP 192.168.111.128

RealServer(Web Server)

    RIP1 192.168.111.11 gw 192.168.111.1

    VIP1(lo) 192.168.111.10

    RIP2 192.168.111.12 gw 192.168.111.1

    VIP2(lo) 192.168.111.10

LAN-ARP問題解決(多個VIP地址相同,IP地址必須惟一)

    修改RealServer兩個內核參數

        arp_announce

            0 通告自身擁有的全部地址

            1 儘可能避免把非本網絡的地址往外通告

            2 老是使用最佳地址向外通告(能解決問題)

        arp_ignore

            0 通告自身擁有的全部地址

            1 請求報文從哪一個接口進入,就用哪一個接口的地址響應(能解決問題)

Director VIP Configure (alias broadcast intface_network)

    ifconfig ens33:0 192.168.111.10/32 broadcast 192.168.111.10 up 

    route add -host 192.168.111.10 dev ens33:0

Real Server Configure (defined kernel args)

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

    ifconfig lo:0 192.168.111.10/32 broadcast 192.168.111.10 up

    route add -host 192.168.111.10 dev lo:0

IPVS Rule

    ipvsadm -A -t 192.168.111.10:80 -s rr 

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.11 -g

    ipvsadm -a -t 192.168.111.10:80 -r 192.168.111.12 -g 


多服務負載使用同一集羣

    將共享同一組RS的集羣服務同一進行定義

    Directior

        # 使用FWM定義集羣

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 80 -j MARK --set-mark 10 

        iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 443 -j MARK --set-mark 10 

        # iptables -t mangle -A PREROUTING -d 192.168.111.10 -p tcp -dport 22 -j MARK --set-mark 10 

        # 基於FWM定義集羣服務

        ipvsadm -A -f 10 -s rr 

        ipvs -a -f 10 -r 192.168.111.11

        ipvs -a -f 10 -r 192.168.111.12

 

實例:lvs-dr (RIP,DIP不在同一網段)

1 加一臺Route Host兩個IP地址,一個能和公網通訊,另外一個是RIP的網關
2 這樣即便RIP和DIP不在同一網段,也能經過這臺路由器轉發數據包
3 路由器既要對DIP到RIP的數據包進行轉發,也要對VIP到CIP的數據包進行轉發
View Code

 

RealServer高可用

防止:RS宕機而Director還繼續對它進行調度

方法:讓Director對其作健康狀態檢測機制,並根據檢測的結果自動完成添加或移除等管理功能

總結

    1. 基於協議層檢測

        網絡層:icmp

        傳輸層:檢測端口的開放狀態

        應用層:請求獲取關鍵性資源

    2. 檢查頻率

    3. 狀態判斷

        下線: success ---> failure ---> failure ---> failure

        上線:failure ---> success ---> success ---> success

    4. 日誌問題

        作PV時,健康檢測訪問Web的日誌不該該被算入正常請求日誌

    5. back server, sorry server 

        全部RS宕機時,須要反饋用戶一些信息

        默認sorry server weight爲0,當全部RS宕機時sorry爲1
View Code

 

解決Session保持問題

session綁定

    object

        source ip hash

        cookies hash

    lvs sh

        未來自同一個用戶IP的請求都定向到同一個Real Server,自行維護一個會話追蹤表

    lvs persistence

        不管ipvs使用何種調度方法,其都能實現未來自同一個Client的請求始終定向至上一次調度時挑選出的RS

        需求:持久鏈接模板,sourceip realserver timer,每一個鏈接都有一個計數器, 存儲在模板中,爲LVS提供算法調度的參數

        持久鏈接的實現方式

            每一個端口持久:PPC,單服務持久調度

            每一個FWM持久:PFWMC,單FWM持久調度

                PORT AFFINITY

            每一個客戶端持久:PCC,單客戶端持久調度

                Director會將用戶的任何請求都識別爲集羣服務,並向RS進行調度

        使用:-p指定超時時間單位s

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


session複製

    ...

session集羣

    ...

session服務器

    ...
View Code
相關文章
相關標籤/搜索