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 的網關。
這引起的兩個問題是:
一、同一個 VLAN 的限制致使運維不方便,跨 VLAN 的 RS 沒法接入。
二、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 上將再也不有任何限制,大大提升了運維部署的便利性。
相關文章
相關標籤/搜索