簡述Lvs集群類型及調度算法
Lvs的的介紹:
Lvs:Linux Virtual Server,負載調度器,集成內核 ,是一套開源軟件;用於實現負載均衡,工作在內核空間,四層轉發和四層路由,即在傳輸層轉發,由於工作在內核空間,突破了套接字數量的限制,工作性能極強,經測試能夠實現400w並發。
lvs集群類型中的術語:
VS:VirtualServer,Director,Dispatcher(調度器),Load Balancer
RS:Real Server(lvs裏), upstream server(nginx裏),backend server(haproxy裏)、Replica(副本)
CIP:Client IP 客戶端ip
VIP
DIP: DirectorIP VS 內網的IP
RIP: Realserver IP
VS: Virtual Server,負責調度
RS:Real Server,負責真正提供服務
官網: http://www.linuxvirtualserver.org/
LVS基本工作原理
1. 當用戶向負載均衡調度器(VS或者叫LB)發起請求,調度器將請求發往至內核空間。
2. PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈。
3. IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集群服務進行比對,如果用戶請求的就是定義的集群服務,那麽此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈。
4. POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麽此時通過選路,將數據包最終發送給後端的服務器。
四種集群的工作類型
LVS/NAT: NAT模式。修改請求報文的目標IP,多目標IP的DNAT。
LVS/DR:DirectRouting(直接路由)。操縱封裝新的MAC地址。
LVS/TUN:Tunneling(隧道)。在原請求IP報文之外新加一個IP首部。
LVS/FULLNAT:Full NAT。修改請求報文的源和目標IP。
1、 lvs-nat:
原理:本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發
特性:
(1) RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP
(2)請求報文和響應報文都必須經由Director轉發, Director 易於成為系統瓶頸
(3)支持端口映射,可修改請求報文的目標PORT
(4) VS必須是Linux系統, RS可以是任意OS系統
體系拓撲圖:
NAT模式的報文詳細流向拓撲圖
(1). 當用戶請求到達DirectorServer,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
(2). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(3). IPVS比對數據包請求的服務是否為集群服務,若是,修改數據包的目標IP地址為後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP
(4). POSTROUTING鏈通過選路,將數據包發送給Real Server
(5). Real Server比對發現目標為自己的IP,開始構建響應報文發回給DirectorServer。 此時報文的源IP為RIP,目標IP為CIP
(6). Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP2。
2. LVS/DR
原理:LVS-DR: Direct Routing,直接路由, LVS默認模式,應用最廣泛,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP
所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的
MAC地址;源IP/PORT,以及目標IP/PORT均保持不變。
特性:
1、特點1:保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS。
2、RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問。
3、RS跟Director Server必須在同一個物理網絡中。
4、所有的請求報文經由DirectorServer,但響應報文必須不能進過Director Server。
5、不支持地址轉換,也不支持端口映射。
6、RS可以是大多數常見的操作系統。
7、RS的網關絕不允許指向DIP(因為我們不允許他經過director)。
8、RS上的lo接口配置VIP的IP地址。
9、缺陷:RS和DS必須在同一機房中。
DR的結構拓撲圖:
DR模式的報文詳細流向拓撲圖
(1) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。此時報文的源IP為CIP,目標IP為VIP 。
(2) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
(3) IPVS比對數據包請求的服務是否為集群服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標IP為RIP。然後發至POSTROUTING鏈。此時源IP為DIP,目標IP為RIP 。
(4) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。此時源IP為DIP,目標IP為RIP。
(5) RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,而且目標是自己的lo接口VIP,那麽此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。此時的源IP地址為VIP,目標IP為CIP。
(6) 響應報文最終送達至客戶端。
3、lvs-tun:
定義:轉發方式:不修改請求報文的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須支持隧道功能
4、lvs-fullnat:
lvs-fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP --> DIP
VIP --> RIP
(1) VIP是公網地址, RIP和DIP是私網地址,且通常不在同一IP網絡;因此, RIP的網關一般不會指向DIP
(2) RS收到的請求報文源地址是DIP,因此,只需響應給
DIP;但Director還要將其發往Client
(3) 請求和響應報文都經由Director
(4) 支持端口映射;
註意:此類型kernel默認不支持
LVS調度算法
定義:根據其調度時是否考慮各RS當前的負載狀態,分為靜態方法和動態方法。
靜態方法:僅根據算法本身進行調度
1. RR:roundrobin,輪詢。
2. WRR:Weighted RR,加權輪詢。
3. SH:Source Hashing,實現session sticky,源IP地址hash;將來自於同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定。
4. DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶運營商。
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度,Overhead=value較小的RS將被調度。
1. LC:least connections,最少連接,適用於長連接應用。Overhead=activeconns*256+inactiveconns
2. WLC:Weighted LC,加權最少連接,默認調度方法。Overhead=(activeconns*256+inactiveconns)/weight
3. SED:Shortest ExpectionDelay,初始連接高權重優先。Overhead=(activeconns+1)*256/weight
4. NQ:Never Queue,第一輪均勻分配,後續SED。
5. LBLC:Locality-Based LC,動態的DH算法,使用場景: 根據負載狀態實現正向代理。
6. LBLCR:LBLC withReplication,帶復制功能的LBLC,解決LBLC負載不均衡問題,從負載重的復制到負載輕的RS。
LVS工作模式總結:
LVS/NAT, LVS/FULLNAT:請求和響應報文都經由VS
LVS/NAT:RIP的網關要指向DIP
LVS/FULLNAT:RIP和DIP未必在同一IP網絡,但要能通信
LVS/DR, LVS/TUN:請求報文要經由VS,但響應報文由RS直接發往Client
LVS/DR:通過封裝新的MAC首部實現,通過MAC網絡轉發
LVS/TUN:通過在原IP報文之外封裝新的IP報文實現轉發,支持遠距離通信
註意:其實企業中最常用的是 DR 實現方式,而 NAT 配置上比較簡單和方便,後邊實踐中會總結DR 和 NAT 具體使用配置過程。
本文出自 “12180356” 博客,請務必保留此出處http://12190356.blog.51cto.com/12180356/1977932
簡述Lvs集群類型及調度算法