LVS的四種模式的實現


LVS 是四層負載均衡,也就是說建立在 OSI 模型的第四層——傳輸層之上,傳輸層上有我們熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的負載均衡。
LVS 的轉發主要通過修改 IP 地址(NAT 模式,分為源地址修改 SNAT 和目標地址修改 DNAT)、修改目標 MAC(DR 模式)來實現。

那么為什么 LVS 是在第四層做負載均衡?
首先 LVS 不像 HAProxy 等七層軟負載面向的是 HTTP 包,所以七層負載可以做的 URL 解析等工作,LVS 無法完成。其次,某次用戶訪問是與服務端建立連接后交換數據包實現的,如果在第三層網絡層做負載均衡,那么將失去「連接」的語義。軟負載面向的對象應該是 一個已經建立連接的用戶,而不是一個孤零零的 IP 包。后面會看到,實際上 LVS 的機器代替真實的服務器與用戶通過 TCP 三次握手建立了連接,所以 LVS 是需要關心「連接」級別的狀態的。

LVS 的工作模式主要有 4 種:
  • DR
  • NAT
  • TUNNEL
  • Full-NAT
這里挑選常用的 DR、NAT、Full-NAT 來簡單介紹一下。


1.DR


請求由 LVS 接受,由真實提供服務的服務器(RealServer, RS)直接返回給用戶,返回的時候不經過 LVS。
DR 模式下需要 LVS 和綁定同一個 VIP(RS 通過將 VIP 綁定在 loopback 實現)。
一個請求過來時,LVS 只需要將網絡幀的 MAC 地址修改為某一台 RS 的 MAC,該包就會被轉發到相應的 RS 處理,注意此時的源 IP 和目標 IP 都沒變,LVS 只是做了一下移花接木。
RS 收到 LVS 轉發來的包,鏈路層發現 MAC 是自己的,到上面的網絡層,發現 IP 也是自己的,於是這個包被合法地接受,RS 感知不到前面有 LVS 的存在。
而當 RS 返回響應時,只要直接向源 IP(即用戶的 IP)返回即可,不再經過 LVS。
DR 模式是性能最好的一種模式。


2.NAT


NAT(Network Address Translation)是一種外網和內網地址映射的技術。
NAT 模式下,網絡報的進出都要經過 LVS 的處理。LVS 需要作為 RS 的網關。
當包到達 LVS 時,LVS 做目標地址轉換(DNAT),將目標 IP 改為 RS 的 IP。RS 接收到包以后,仿佛是客戶端直接發給它的一樣。
RS 處理完,返回響應時,源 IP 是 RS IP,目標 IP 是客戶端的 IP。
這時 RS 的包通過網關(LVS)中轉,LVS 會做源地址轉換(SNAT),將包的源地址改為 VIP,這樣,這個包對客戶端看起來就仿佛是 LVS 直接返回給它的。客戶端無法感知到后端 RS 的存在。

3.Full-NAT

無論是 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 上將不再有任何限制,大大提高了運維部署的便利性。


免責聲明!

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



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