就是要你懂负载均衡--lvs和转发模式
本文希望闡述清楚LVS的各種轉發模式,以及他們的工作流程和優缺點,同時從網絡包的流轉原理上解釋清楚優缺點的來由,并結合阿里云的slb來說明優缺點。
如果對網絡包是怎么流轉的不太清楚,推薦先看這篇基礎:程序員的網絡知識 -- 一個網絡包的旅程,對后面理解LVS的各個轉發模式非常有幫助。
幾個術語和縮寫
cip:Client IP,客戶端地址 vip:Virtual IP,LVS實例IP rip:Real IP,后端RS地址 RS: Real Server 后端真正提供服務的機器 LB: Load Balance 負載均衡器 LVS: Linux Virtual Server sip: source ip dip: destinationLVS的幾種轉發模式
- DR模型 -- (Director Routing-直接路由)
- NAT模型 -- (NetWork Address Translation-網絡地址轉換)
- fullNAT -- (full NAT)
- ENAT --(enhence NAT 或者叫三角模式/DNAT,阿里云提供)
- IP TUN模型 -- (IP Tunneling - IP隧道)
DR模型(Director Routing--直接路由)
如上圖所示基本流程(假設 cip 是200.200.200.2, vip是200.200.200.1):
我們看到上面流程,請求包到達LVS后,LVS只對包的目的MAC地址作了修改,回復包直接回給了client。
同時還能看到多個RS和LVS都共用了同一個IP但是用的不同的MAC,在二層路由不需要IP,他們又在同一個vlan,所以這里沒問題。
RS上會將vip配置在lo回環網卡上,同時route中添加相應的規則,這樣在第四步收到的包能被os正常處理。
優點:
- DR模式是性能最好的一種模式,入站請求走LVS,回復報文繞過LVS直接發給Client
缺點:
- 要求LVS和rs在同一個vlan;
- RS需要配置vip同時特殊處理arp;
- 不支持端口映射。
為什么要求LVS和RS在同一個vlan(或者說同一個二層網絡里)
因為DR模式依賴多個RS和LVS共用同一個VIP,然后依據MAC地址來在LVS和多個RS之間路由,所以LVS和RS必須在一個vlan或者說同一個二層網絡里
DR 模式為什么性能最好
因為回復包不走LVS了,大部分情況下都是請求包小,回復包大,LVS很容易成為流量瓶頸,同時LVS只需要修改進來的包的MAC地址。
DR 模式為什么回包不需要走LVS了
因為RS和LVS共享同一個vip,回復的時候RS能正確地填好sip為vip,不再需要LVS來多修改一次(后面講的NAT、Full NAT都需要)
總結下 DR的結構
綠色是請求包進來,紅色是修改過MAC的請求包
NAT模型(NetWork Address Translation - 網絡地址轉換)
nat模式的結構圖如下:
基本流程:
優點:
- 配置簡單
- 支持端口映射(看名字就知道)
- RIP一般是私有地址,主要用戶LVS和RS之間通信
缺點:
- LVS和所有RS必須在同一個vlan
- 進出流量都要走LVS轉發
- LVS容易成為瓶頸
- 一般而言需要將VIP配置成RS的網關
為什么NAT要求lvs和RS在同一個vlan
因為回復包必須經過lvs再次修改sip為vip,client才認,如果回復包的sip不是client包請求的dip(也就是vip),那么這個連接會被reset掉。如果LVS不是網關,因為回復包的dip是cip,那么可能從其它路由就走了,LVS沒有機會修改回復包的sip
總結下NAT結構
注意這里LVS修改進出包的(sip, dip)的時候只改了其中一個,所以才有接下來的full NAT。當然NAT最大的缺點是要求LVS和RS必須在同一個vlan,這樣限制了LVS集群和RS集群的部署靈活性,尤其是在阿里云這種對外售賣的公有云環境下,NAT基本不實用。
full NAT模型(full NetWork Address Translation-全部網絡地址轉換)
基本流程(類似NAT):
優點:
- 解決了NAT對LVS和RS要求在同一個vlan的問題,適用更復雜的部署形式
缺點:
- RS看不到cip(NAT模式下可以看到)
- 進出流量還是都走的lvs,容易成為瓶頸(跟NAT一樣都有這個問題)
為什么full NAT解決了NAT中要求的LVS和RS必須在同一個vlan的問題
因為LVS修改進來的包的時候把(sip, dip)都修改了(這也是full的主要含義吧),RS的回復包目的地址是vip(NAT中是cip),所以只要vip和rs之間三層可通就行,這樣LVS和RS可以在不同的vlan了,也就是LVS不再要求是網關,從而LVS和RS可以在更復雜的網絡環境下部署。
為什么full NAT后RS看不見cip了
因為cip被修改掉了,RS只能看到LVS的vip,在阿里內部會將cip放入TCP包的Option中傳遞給RS,RS上一般部署自己寫的toa模塊來從Options中讀取的cip,這樣RS能看到cip了, 當然這不是一個開源的通用方案。
總結下full NAT的結構
注意上圖中綠色的進包和紅色的出包他們的地址變化
那么到現在full NAT解決了NAT的同vlan的要求,基本上可以用于公有云了,但是還是沒解決進出流量都走LVS的問題(LVS要修改進出的包)
那么有沒有一個方案能夠像full NAT一樣不限制lvs和RS之間的網絡關系,同時出去的流量跟DR模式一樣也不走LVS呢?
阿里云的ENAT模式(enhence NAT)
優點:
- 不要求LVS和RS在同一個vlan
- 出去的流量不需要走LVS,性能好
缺點:
- 集團實現的自定義方案,需要在所有RS上安裝ctk組件(類似full NAT中的toa)
基本流程:
ENAT模式在內部也會被稱為 三角模式或者DNAT/SNAT模式
為什么ENAT的回復包不需要走回LVS了
因為之前full NAT模式下要走回去是需要LVS再次改寫回復包的IP,而ENAT模式下,這件事情在RS上被ctk模塊提前做掉了
為什么ENAT的LVS和RS可以在不同的vlan
跟full NAT一樣
總結下 ENAT的結構
最后說一下不太常用的 TUN模型
IP TUN模型(IP Tunneling - IP隧道)
基本流程:
優點:
- 集群節點可以跨vlan
- 跟DR一樣,響應報文直接發給client
缺點:
- RS上必須安裝運行IPIP模塊
- 多增加了一個IP頭
- LVS和RS上的tunl0虛擬網卡上配置同一個VIP(類似DR)
DR模式中LVS修改的是目的MAC
為什么IP TUN不要求同一個vlan
因為IP TUN中不是修改MAC來路由,所以不要求同一個vlan,只要求lvs和rs之間ip能通就行。DR模式要求的是lvs和RS之間廣播能通
IP TUN性能
回包不走LVS,但是多做了一次封包解包,不如DR好
總結下 IP TUN的結構
圖中紅線是再次封裝過的包,ipip是操作系統的一個內核模塊。
DR可能在小公司用的比較多,IP TUN用的少一些,相對而言接下來的三種比較類似,用的也比較多,他們之間的可比較性很強,所以放在一塊了。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的就是要你懂负载均衡--lvs和转发模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink 1.9 实战:使用 SQL
- 下一篇: 常用排序算法总结