LVS三種模式的區別及負載均衡算法


LVS簡介

LVS(Linux Virtual Server)即Linux虛擬服務器,是一個虛擬的服務器集群系統,由章文嵩博士在1998年5月成立,在linux2.6+后將lvs自動加入了kernel模塊,我們看下lvs在我們日常的服務器架構所在的位置:

正向代理

只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中,正向代理指的是客戶端代理,是由用戶控制並知曉的代理方式,如我不能訪問fb,然后使用了某國外服務器作為跳板機,最后成功訪問了就是正向代理。

反向代理

指以代理服務器來接受Internet上的連接請求,然后將請求轉發給內部網絡上的服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器,反向代理指的是服務端代理,在大型網站背后並不是只有一台機器提供服務,比如我訪問微博,微博的某一個反向代理服務器將我解析到內部服務器的一台機器,然后這台機器給我提供微博的消息(當然實際情況比這個復雜的多),這些對於用戶都是不可見的,我們只會感覺只有一台機器與我交互。

負載均衡

(Load Balance)讓負載均衡,當然這是一個簡單的概括,我在微信里看的架構師之路寫的一篇如何實現負載均衡的文章就不錯,我有10台機器都提供web服務,那么我如何均衡的利用這10台機器呢,讓這10台機器保證高性能、高可用、高並發就是負載均衡要考慮和要做的事情。

實現負載均衡一般可以使用順序、比重、流量、服務類別等進行分配,負載均衡的部署方式也分為路由和服務直接返回模式,實現負載均衡的主要幾個方式:

  • http重定向

    下載網站用的較多,其實也算一種負載均衡,工作在應用層的業務代碼中

  • DNS負載均衡

    DNS負載提供域名到IP解析的過程,我們實例查看百度的域名解析其實是一對多的,這時候DNS服務器也就充當了負載均衡,很多域名運營商提供的智能dns以及多線解析都是利用了DNS負載均衡的技術,開源的BIND就可提供電信聯通多線解析等強大的技術。

  • 反向代理負載均衡

  • IP負載均衡

  • 直接路由

  • IP隧道

  • F5硬件負載均衡

四層負載和七層負載

所謂四層就是基於IP+端口的負載均衡,主要代表有lvs。

七層負載也稱內容交換,就是基於URL等應用層信息的負載均衡,主要代表有nginx。

LVS工作原理

LVS 的 IP 負載均衡技術是通過 IPVS 模塊來實現的,IPVS 是 LVS集群系統的核心軟件,它的主要作用是:安裝在 Director Server 上,同時在 Director Server上虛擬出一個IP 地址,用戶必須通過這個虛擬的 IP 地址訪問服務器。這個虛擬 IP 一般稱為 LVS 的VIP,即 Virtual IP。訪問的請求首先經過 VIP 到達負載調度器,然后由負載調度器從Real Server 列表中選取一個服務節點響應用戶的請求。 在用戶的請求到達負載調度器后,調度器如何將請求發送到提供服務的 Real Server 節點,而 Real Server節點如何返回數據給用戶,是 IPVS 實現的重點技術。

ipvs : 工作於內核空間,主要用於使用戶定義的策略生效

ipvsadm : 工作於用戶空間,主要用於用戶定義和管理集群服務的工具

上圖所示,ipvs工作於內核空間的INPUT鏈上,當收到用戶請求某集群服務時,經過PREROUTING鏈,經檢查本機路由表,送往INPUT鏈;在進入netfilter的INPUT鏈時,ipvs強行將請求報文通過ipvsadm定義的集群服務策略的路徑改為FORWORD鏈,將報文轉發至后端真實提供服務的主機。

LVS工作模式

VS/DR模式

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,並將此包發送給RS。

③.RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文后,將響應報文通過lo接口送給eth0網卡直接發送給客戶端。

注意:

需要設置lo接口的VIP不能響應本地網絡內的arp請求。

總結:

1、通過在調度器 LB 上修改數據包的目的 MAC 地址實現轉發。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。

2、請求的報文經過調度器,而 RS 響應處理后的報文無需經過調度器 LB,因此並發訪問量大時使用效率很高(和 NAT 模式比)

3、因為 DR 模式是通過 MAC 地址改寫機制實現轉發,因此所有 RS 節點和調度器 LB 只能在一個局域網里面

4、RS 主機需要綁定 VIP 地址在 LO 接口(掩碼32 位)上,並且需要配置 ARP 抑制。

5、RS 節點的默認網關不需要配置成 LB,而是直接配置為上級路由的網關,能讓 RS 直接出網就可以。

6、由於 DR 模式的調度器僅做 MAC 地址的改寫,所以調度器 LB 就不能改寫目標端口,那么 RS 服務器就得使用和 VIP 相同的端口提供服務。

7、直接對外的業務比如WEB等,RS 的IP最好是使用公網IP。對外的服務,比如數據庫等最好使用內網IP。

優點

和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做為物理服務器。

DR模式的效率很高,但是配置稍微復雜一點,因此對於訪問量不是特別大的公司可以用haproxy/nginx取代。日1000-2000W PV或者並發請求1萬一下都可以考慮用haproxy/nginx。

缺點

所有 RS 節點和調度器 LB 只能在一個局域網里面。

VS/TUN模式

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。

②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。

③.RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,並將響應報文通過lo接口送給eth0網卡直接發送給客戶端。

注意:

需要設置lo接口的VIP不能在共網上出現。

總結:

1.TUNNEL 模式必須在所有的 realserver 機器上面綁定 VIP 的 IP 地址

2.TUNNEL 模式的 vip ------>realserver 的包通信通過 TUNNEL 模式,不管是內網和外網都能通信,所以不需要 lvs vip 跟 realserver 在同一個網段內

3.TUNNEL 模式 realserver 會把 packet 直接發給 client 不會給 lvs 了

4.TUNNEL 模式走的隧道模式,所以運維起來比較難,所以一般不用。

優點

負載均衡器只負責將請求包分發給后端節點服務器,而RS將應答包直接發給用戶。所以,減少了負載均衡器的大量數據流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一台負載均衡器能夠為很多RS進行分發。而且跑在公網上就能進行不同地域的分發。

缺點:

隧道模式的RS節點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”(IP Encapsulation)協議,服務器可能只局限在部分Linux系統上。

VS/NAT模式

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),后面統稱為CIP),目標地址為VIP(負載均衡器前端地址,后面統稱為VIP)。

②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的目標地址改為了后端服務器的RIP地址並將報文根據算法發送出去。

③.報文送到Real Server后,由於報文的目標地址是自己,所以會響應該請求,並將響應報文返還給LVS。

④.然后lvs將此報文的源地址修改為本機並發送給客戶端。

注意:

在NAT模式中,Real Server的網關必須指向LVS,否則報文無法送達客戶端

特點:

1、NAT 技術將請求的報文和響應的報文都需要通過 LB 進行地址改寫,因此網站訪問量比較大的時候 LB 負載均衡調度器有比較大的瓶頸,一般要求最多之能 10-20 台節點

2、只需要在 LB 上配置一個公網 IP 地址就可以了。

3、每台內部的 realserver 服務器的網關地址必須是調度器 LB 的內網地址。

4、NAT 模式支持對 IP 地址和端口進行轉換。即用戶請求的端口和真實服務器的端口可以不一致。

優點:

集群中的物理服務器可以使用任何支持TCP/IP操作系統,只有負載均衡器需要一個合法的IP地址。

缺點

擴展性有限。當服務器節點(普通PC服務器)增長過多時,負載均衡器將成為整個系統的瓶頸,因為所有的請求包和應答包的流向都經過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!

FULLNAT模式

無論是 DR 還是 NAT 模式,不可避免的都有一個問題:LVS 和 RS 必須在同一個 VLAN 下,否則 LVS 無法作為 RS 的網關。

這引發的兩個問題是:

1、同一個 VLAN 的限制導致運維不方便,跨 VLAN 的 RS 無法接入。

2、LVS 的水平擴展受到制約。當 RS 水平擴容時,總有一天其上的單點 LVS 會成為瓶頸。

Full-NAT 由此而生,解決的是 LVS 和 RS 跨 VLAN 的問題,而跨 VLAN 問題解決后,LVS 和 RS 不再存在 VLAN 上的從屬關系,可以做到多個 LVS 對應多個 RS,解決水平擴容的問題。

Full-NAT 相比 NAT 的主要改進是,在 SNAT/DNAT 的基礎上,加上另一種轉換,轉換過程如下:

在包從 LVS 轉到 RS 的過程中,源地址從客戶端 IP 被替換成了 LVS 的內網 IP。

內網 IP 之間可以通過多個交換機跨 VLAN 通信。

當 RS 處理完接受到的包,返回時,會將這個包返回給 LVS 的內網 IP,這一步也不受限於 VLAN。

LVS 收到包后,在 NAT 模式修改源地址的基礎上,再把 RS 發來的包中的目標地址從 LVS 內網 IP 改為客戶端的 IP。

Full-NAT 主要的思想是把網關和其下機器的通信,改為了普通的網絡通信,從而解決了跨 VLAN 的問題。采用這種方式,LVS 和 RS 的部署在 VLAN 上將不再有任何限制,大大提高了運維部署的便利性。

總結

1.FULL NAT 模式也不需要 LBIP 和 realserver ip 在同一個網段; full nat 跟 nat 相比的優點是:保證 RS 回包一定能夠回到 LVS;因為源地址就是 LVS--> 不確定

2.full nat 因為要更新 sorce ip 所以性能正常比 nat 模式下降 10%

三種工作模式比較

工作模式 VS/NAT VS/TUN VS/DR
Real server(節點服務器) Config dr gw Tunneling Non-arp device/tie vip
Server Network Private LAN/WAN LAN
Server number(節點數量) Low 10-20 High 100 High 100
Real server gateway Load balance Own router Own router
優點 地址和端口轉換 Wan環境加密數據 性能最高
缺點 效率低 需要隧道支持 不能跨域LAN

LVS調度算法

在內核中的連接調度算法上,IPVS已實現了以下八種調度算法:

  • 輪叫調度(Round-Robin Scheduling)
  • 加權輪叫調度(Weighted Round-Robin Scheduling)
  • 最小連接調度(Least-Connection Scheduling)
  • 加權最小連接調度(Weighted Least-Connection Scheduling)
  • 基於局部性的最少鏈接(Locality-Based Least Connections Scheduling)
  • 帶復制的基於局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
  • 目標地址散列調度(Destination Hashing Scheduling)
  • 源地址散列調度(Source Hashing Scheduling)

固定調度算法:rr,wrr,dh,sh

動態調度算法:wlc,lc,lblc,lblcr

一般應用場景 常用調度算法
一般的網絡服務,如 http,mail,mysql 基本輪訓、加權最小連接、加權輪訓
防火牆集群 源地址散列調度SH和目標地址散列調度DH
web cache和DB cache 局部最小、帶復制的局部最小

LVS支持SSL

測試http和https耗時
curl -w "tcp: %{time_connect}, ssl: %{time_appconnect}\n" -so /dev/null https://www.alipay.com

SSL是在TCP三次握手后又進行SSL握手,SSL一般使用的加密算法是RSA加密算法,比較耗費CPU計算,SSL加速卡可以解決CPU消耗高的問題。

Keepalived和Haproxy

參考文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM