Lvs:Linux Virtual Server,負載調度器,集成內核 ,是一套開源軟件;用於實現負載均衡,工做在內核空間,四層轉發和四層路由,即在傳輸層轉發,因爲工做在內核空間,突破了套接字數量的限制,工做性能極強,經測試可以實現400w併發。前端
VS:VirtualServer,Director,Dispatcher(調度器),Load Balancerlinux
RS:Real Server(lvs裏), upstream server(nginx裏),backend server(haproxy裏)、Replica(副本)nginx
CIP:Client IP 客戶端ip算法
VIP: Virtualserver IP VS外網的IP後端
DIP: DirectorIP VS 內網的IP緩存
RIP: Realserver IP服務器
VS: Virtual Server,負責調度
RS:Real Server,負責真正提供服務
官網: http://www.linuxvirtualserver.org/網絡
1. 當用戶向負載均衡調度器(VS或者叫LB)發起請求,調度器將請求發往至內核空間。session
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。
一、 lvs-nat:
原理:本質是多目標IP的DNAT,經過將請求報文中的目標地址和目標端口修改成某挑出的RS的RIP和PORT實現轉發
特性:
(1) RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP
(2)請求報文和響應報文都必須經由Director轉發, Director 易於成爲系統瓶頸
(3)支持端口映射,可修改請求報文的目標PORT
(4) VS必須是Linux系統, RS能夠是任意OS系統
(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。
原理: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必須在同一機房中。
(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) 響應報文最終送達至客戶端。
三、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須支持隧道功能
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默認不支持
定義:根據其調度時是否考慮各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/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 具體使用配置過程。