LVS負載均衡

                                            LVS負載均衡

-----------------------------------------------------------------------------------------------------------------------------------------------

一、cluster

1、 系統擴展方式:

Scale UP:向上擴展,增強,硬件升級

Scale Out:向外擴展,增加設備,調度分配問題,Cluster

2、Cluster:集羣,爲解決某個特定問題將多臺計算機組合起來形成的單個系統

3、Linux Cluster類型:

LB:Load Balancing,負載均衡,用戶請求按照一定比例,均勻分配到各服務器

HA:High Availiablity,高可用,SPOF(single Point Of failure,單點失敗)

MTBF:Mean Time Between Failure 平均無故障時間

MTTR:Mean Time To Restoration( repair)平均恢復前時間

A=MTBF/(MTBF+MTTR) (0,1):99%(停機約3天), 99.5%, 99.9%(停機約7小時), 99.99%(停機40多分鐘), 99.999%(停機約4分鐘,企業級應用比較合理)

HPC:High-performance computing,高性能 www.top500.org

4、分佈式系統:

分佈式存儲:雲盤,依靠fastdfs文件系統實現

分佈式計算:hadoop,Spark

二、cluster分類

1、LB Cluster的實現

2、硬件

F5 Big-IP,很值錢

image.png

Citrix Netscaler

A10 A10

3、軟件

lvs:Linux Virtual Server,基於內核級別實現

nginx:支持七層調度,阿里七層SLB使用Tengine(阿里基於Nginx做的改版)

haproxy:支持七層調度

ats:apache traffic server,yahoo捐助

perlbal:Perl 編寫

pound

4、基於工作的協議層次劃分:

5、傳輸層(通用):DPORT,根據端口號調度

LVS:

nginx:stream

haproxy:mode tcp

6、應用層(專用):針對特定協議,自定義的請求模型分類,通常名稱上叫代理服務器

proxy server:

http:nginx, httpd, haproxy(mode http), ...

fastcgi:nginx, httpd, ...

mysql:mysql-proxy, ...

三、Cluster相關

1、會話保持:負載均衡

(1) session sticky:同一用戶調度固定服務器,依據瀏覽器的cookie進行精確調度

Source IP:LVS sh算法(對某一特定服務而言)

Cookie

(2) session replication:每臺服務器擁有全部session

session multicast cluster

(3) session server:專門的session服務器

Memcached,Redis

2、HA集羣實現方案

keepalived:vrrp協議

ais:應用接口規範

heartbeat

cman+rgmanager(RHCS)

coresync_

四、LVS介紹

1、LVS:Linux Virtual Server,負載調度器,集成內核,章文嵩,阿里SLB目前使用

官網:http://www.linuxvirtualserver.org/

VS: Virtual Server,負責調度

RS: Real Server,負責真正提供服務

L4:四層路由器或交換機

2、工作原理:VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度

算法來挑選RS

3、iptables/netfilter:

iptables:用戶空間的管理工具

netfilter:內核空間上的框架

流入:PREROUTING --> INPUT

流出:OUTPUT --> POSTROUTING

轉發:PREROUTING --> FORWARD --> POSTROUTING

DNAT:目標地址轉換; PREROUTING

image.png

五、LVS概念

1、lvs集羣類型中的術語:

VS:Virtual Server,Director Server(DS),Dispatcher(調度器),Load Balancer

RS:Real Server(lvs), upstream server(nginx),backend server(haproxy)

CIP:Client IP

VIP: Virtual serve IP VS外網的IP

DIP: Director IP VS內網的IP

RIP: Real server IP

訪問流程:CIP <--> VIP == DIP <--> RIP,RIP返回時可以直接回到CIP

六、lvs集羣的類型

1、lvs: ipvsadm/ipvs,LVS位置位於iptables的INPUT表之前

ipvsadm:用戶空間的命令行工具,規則管理器

用於管理集羣服務及RealServer

ipvs:工作於內核空間netfilter的INPUT鉤子上的框架

LVS的config文件

image.png

2、lvs集羣的類型:

lvs-nat:修改請求報文的目標IP,多目標IP的DNAT,當目標服務器有故障時將依然調度

lvs-dr:操縱封裝新的MAC地址

lvs-tun:在原請求IP報文之外新加一個IP首部

lvs-fullnat:修改請求報文的源和目標IP

3、lvs-nat:

本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改爲某挑出的RS的RIP和PORT實現轉發

(1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP

(2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸

(3)支持端口映射,可修改請求報文的目標PORT

(4)VS必須是Linux系統,RS可以是任意OS系統

4、VS/NAT的體系結構,原路返回,LVS服務器需要打開路由轉發功能

image.png

NAT模式IP包調度過程

image.png

源地址VIP,目標地址CIP,進入LVS服務器路由路過PREROUTING,看到是VIP向INPUT方向走,不過LVS處於INPUT之前,通過轉發規則將其改變爲源地址是CIP,目標地址是RIP,此時出路由POSTROUTING口,到達Real Server後,原路返回,此時源地址是RIP,目標地址是CIP,經過LVS服務器的時候,將源地址改成RIP,目標地址改成CIP

image.png

5、LVS-DR模式,默認模型

 LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

(1)Director和各RS都配置有VIP

(2)確保前端路由器將目標IP爲VIP的請求報文發往Director

在前端網關做靜態綁定VIP和Director的MAC地址

在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP

arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

在RS上修改內核參數以限制arp通告及應答級別

/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

(3)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director

(4)RS和Director要在同一個物理網絡

(5)請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client

(6)不支持端口映射(端口不能修敗)

(7)RS可使用大多數OS系統

6、VS/DR體系結構,LVS服務器不用打開路由轉發功能,請求到達RS服務器後憑藉VIP不通過LVS直接返回,當廣播域詢問擁有VIP的主機響應時,RS服務器不宣傳自己的VIP地址,不響應APR廣播,所以也不會造成衝突

VIP綁到lo網卡

RIP綁到eth0網卡

arp_ingnore改爲1,arp_announce改爲2,只更改all和lo網卡即可

image.png

DR模式IP包調度過程

image.png

這裏改變的不是IP,而是目標的MAC地址

image.png

7、 lvs-tun:可以實現跨地區訪問,類似於DR模型,只不過LVS和RS之間有路由器,通過IP隧道方式進行傳輸,實現了跨網段,傳輸時的報文再加了一層IP頭部。由於LVS和RS之間有路由器分隔網段,因此不用考慮IP相同造成衝突的問題

轉發方式:不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)

(1) DIP, VIP, RIP都應該是公網地址

(2) RS的網關一般不能指向DIP

(3) 請求報文要經由Director,但響應不經由Director

(4) 不支持端口映射

(5) RS的OS須支持隧道功能

image.png

TUN模式IP包調度過程

image.png

8、lvs-fullnat模式

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

CIP --> DIP

VIP --> RIP

kernel內核默認不支持,如果用此模型,需要重新源碼編譯內核

9、LVS工作模式總結


VS/NAT

VS/TUN

VS/DR

後端服務器類型

任何

支持Tunneling隧道

調節arp開關,關閉arp響應和ip應答

服務器網絡類型

公網和私網

廣域網或局域網

局域網

後端服務器數量

低(10~20)

高(100)

高(100)

服務器網關

負載服務器或者上一個路由器

自身的路由

自身的路由

(1)lvs-nat與lvs-fullnat:請求和響應報文都經由Director

lvs-nat:RIP的網關要指向DIP

lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信

(2)lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client

lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發

lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

七、ipvs scheduler(調度算法)

1、ipvs scheduler:根據其調度時是否考慮各RS當前的負載狀態

兩種:靜態方法和動態方法

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

(1)RR:roundrobin,輪詢

(2)WRR:Weighted RR,加權輪詢,需要定義權重

(3)SH:Source Hashing,實現session sticky,源IP地址hash;將來自於同一個IP地址的請求始終發往第一次挑中的RS,即同一個IP地址請求始終調度給同一臺機器,從而實現會話綁定

(4)DH:Destination Hashing;目標地址哈希,第一次輪詢調度至RS,後續將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,根據用戶請求到目標地址到轉發到緩存服務器,比如說一個小區用戶世界盃期間觀看球賽,用戶網站觀看球賽的請求會輪詢調度到RS服務器,之後該小區其他用戶如果也觀看同一網站球賽的請求也將會調度到同一個緩存服務器,可理解爲一區域內所有IP請求相同的都調度到一個RS服務器。一般適合寬帶運營商對緩存服務器使用這種調度算法

3、動態方法:主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS將被調度

(1)LC:least connections 適用於長連接應用

Overhead=activeconns*256+inactiveconns

activeconns:活動連接,三次握手建立後有數據傳輸

inactiveconns:非活動連接,三次握手建立後沒有數據傳輸

(2)WLC:Weighted LC,默認調度方法,加上了權重,overhead越小,優先級越高

Overhead=(activeconns*256+inactiveconns)/weight

此算法初始值都是0,性能差的服務器可能在剛開始時會分配到壓力高的任務

(3)SED:Shortest Expection Delay,初始連接高權重優先

Overhead=(activeconns+1)*256/weight

可能會造成權重高的服務器一直工作,權重低的服務器一直沒有任務

(4)NQ:Never Queue,第一輪均勻分配,後續SED

(5)LBLC:Locality-Based LC,動態的DH算法,使用場景:根據負載狀態實現正向代理,壓力多少分配,壓力少多分配

(6)LBLCR:LBLC with Replication,帶複製功能的LBLC,解決LBLC負載不均衡問題,從負載重的複製到負載輕的RS

八、ipvs

1、ipvsadm/ipvs:

2、ipvs:

grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64

支持的協議:TCP, UDP, AH, ESP, AH_ESP, SCTP

3、ipvs集羣:

管理集羣服務

管理服務上的RS

4、ipvsadm:

5、程序包:ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

規則保存工具:/usr/sbin/ipvsadm-save

規則重載工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

九、ipvsadm命令:

1、核心功能:

集羣服務管理:增、刪、改

集羣服務的RS管理:增、刪、改

查看

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

persistence_engine] [-b sched-flags]

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

ipvsadm –C 清空

ipvsadm –R 重載

ipvsadm -S [-n] 保存

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

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

ipvsadm -L|l [options]

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

2、管理集羣服務:增、改、刪

(1)增、改:

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

更改管理集羣服務:

image.png

(2)刪除:

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

(3)service-address:

-t|u|f:

-t: TCP協議的端口,VIP:TCP_PORT

-u: UDP協議的端口,VIP:UDP_PORT

-f:firewall MARK,標記,一個數字

(4)[-s scheduler]:指定集羣的調度算法,默認爲wlc

3、管理集羣上的RS:增、改、刪

(1)增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

(2)刪:ipvsadm -d -t|u|f service-address -r server-address

(3)server-address:rip[:port] 如省略port,不作端口映射

(4)選項:

lvs類型:

-g: gateway, dr類型,默認

-i: ipip, tun類型

-m: masquerade, nat類型

-w weight:權重

(5)清空定義的所有內容:ipvsadm –C

(6)清空計數器:ipvsadm -Z [-t|u|f service-address]

(7)查看:ipvsadm -L|l [options]

--numeric, -n:以數字形式輸出地址和端口號

--exact:擴展信息,精確值

--connection,-c:當前IPVS連接輸出

--stats:統計信息

--rate :輸出速率信息

(8)ipvs規則:/proc/net/ip_vs

(9)ipvs連接:/proc/net/ip_vs_conn

十、LVS-DR配置,LVS不參加通訊,但是必須加網關,否則會認爲沒有路

1、DR模型中各主機上均需要配置VIP,解決地址衝突的方式有三種:

    (1) 在前端網關做靜態綁定

    (2) 在各RS使用arptables

    (3) 在各RS修改內核參數,來限制arp響應和通告的級別

2、限制響應級別:arp_ignore

    0:默認值,表示可使用本地任意接口上配置的任意地址進行響應

    1:僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應,可理解爲配置爲1後,別人問不搭理

3、限制通告級別:arp_announce

    0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告

    1:儘量避免將接口信息向非直接連接網絡進行通告

2:必須避免將接口信息向非本網絡進行通告

十一、FireWall Mark

1、FWM:FireWall Mark

2、MARK target 可用於給特定的報文打標記

        --set-mark value

        其中:value 可爲0xffff格式,表示十六進制數字

3、藉助於防火牆標記來分類報文,而後基於標記定義集羣服務;可將多個不同的應用使用同一個集羣服務進行調度

4、實現方法:

(1)在Director主機打標記:iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER

(2)在Director主機基於標記定義集羣服務:ipvsadm -A -f NUMBER [options]

十二、持久連接

1、session 綁定:對共享同一組RS的多個集羣服務,需要統一進行綁定,lvs sh算法無法實現

2、持久連接( lvs persistence )模板:實現無論使用任何調度算法,在一段時間內(默認360s ),能夠實現將來自同一個地址的請求始終發往同一個RS,實現加-p 跟秒數即可

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

3、持久連接實現方式:

    (1)每端口持久(PPC):每個端口定義爲一個集羣服務,每集羣服務單獨調度

    (2)每防火牆標記持久(PFWMC):基於防火牆標記定義集羣服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity

    (3)每客戶端持久(PCC):基於0端口(表示所有服務)定義集羣服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義爲持久模式

十三、LVS高可用性

1、Director不可用,整個系統將不可用;SPoF Single Point of Failure

    解決方案:高可用,keepalived heartbeat/corosync

2、某RS不可用時,Director依然會調度請求至此RS

    解決方案: 由Director對各RS健康狀態進行檢查,失敗時禁用,成功時啓用,keepalived heartbeat/corosync ldirectord

檢測方式:

    (a) 網絡層檢測,icmp

    (b) 傳輸層檢測,端口探測

    (c) 應用層檢測,請求某關鍵資源

    RS全不用時:backup server, sorry server

十四、ldirectord

1、ldirectord:監控和控制LVS守護進程,可管理LVS規則

2、包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm

3、下載:http://download.opensuse.org/repositories/network:/haclustering:/Stable/CentOS_CentOS-7/x86_64/

4、文件:

/etc/ha.d/ldirectord.cf 主配置文件

/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版

/usr/lib/systemd/system/ldirectord.service 服務

/usr/sbin/ldirectord 主程序,Perl實現

/var/log/ldirectord.log 日誌

/var/run/ldirectord.ldirectord.pid pid文件

十五、Ldirectord配置文件示例

checktimeout=3

checkinterval=1

autoreload=yes

logfile=“/var/log/ldirectord.log“                        #日誌文件

quiescent=no #down時yes權重爲0,no爲刪除

virtual=5 #指定VS的FWM或IP:port

    real=172.16.0.7:80 gate 2                                    #2爲權重

    real=172.16.0.8:80 gate 1                                    #1爲權重

    fallback=127.0.0.1:80 gate                                 #sorry server

    service=http

    scheduler=wrr

    protocol=tcp                                                      #定義標籤後該項需要註釋或刪除

checktype=negotiate

checkport=80

request="index.html"

receive=“Test Ldirectord"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章