3.3 四層與七層的搭配:LVS / F5 + Keepalived#
Nginx 快被打爆了,誰來保護它?#
3.1 節的 Nginx 集群上線後,流量又漲了十倍。這次倒下的是 Nginx 自己——七層解析 HTTP 太吃 CPU,單機幾萬併發就見頂。更糟的是 Nginx 只有一台,它一掛,全站跟著掛。
解法是分層分工:前面加一層看不懂 HTTP、只看 IP+埠的「蠻力型選手」擋海量流量,Nginx 退到後面做精細分流。這就是四層負載(LVS/F5)+ 七層負載(Nginx)的經典搭配。
四層 vs 七層:只看門牌 vs 拆信看內容#
flowchart LR
U[買家流量] --> L[LVS四層:只看IP+埠<br/>百萬併發/內核轉發]
L --> N1[Nginx-1:看URL分流]
L --> N2[Nginx-2:看URL分流]
N1 --> T1[Tomcat交易集群]
N1 --> T2[Tomcat圖片集群]
N2 --> T1| 面向 | 四層負載(LVS/F5) | 七層負載(Nginx/HAProxy) |
|---|---|---|
| 工作層次 | TCP/UDP:IP + 埠 | HTTP:URL/Header/Cookie |
| 效能 | 極高(LVS-DR 內核轉發,近線速) | 中高(要解析應用層協議) |
| 能力 | 純分流、故障摘除 | 內容路由、rewrite、快取、WAF |
| 代表 | LVS(開源免費)、F5(硬體昂貴) | Nginx、HAProxy、ALB |
| 角色 | 機房總入口擋量 | 業務精細路由 |
一句話記憶:四層負責「扛住」,七層負責「分對」。
LVS 三種模式:NAT / DR / TUN#
flowchart TD
subgraph NAT[NAT:進出都經LVS,簡單但易成瓶頸]
C1[客戶端] --> V1[LVS改目的IP] --> R1[RealServer] --> V1 --> C1
end
subgraph DR[DR:進經LVS,回直返客戶端]
C2[客戶端] --> V2[LVS改MAC] --> R2[RealServer] --> C2
end| 模式 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| NAT | 改目的 IP,來回都經 LVS | 配置最簡單,RealServer 可用私網 IP | LVS 是頻寬瓶頸,只適合小流量 |
| DR(直接路由) | 只改 MAC,RealServer 直接回包給客戶端 | 效能最高,淘寶/大廠主流 | RealServer 要配 VIP、需同二層網路 |
| TUN(隧道) | IP 封裝隧道,可跨機房 | 支援跨網段、異地 | 要封包解包,RealServer 需支援隧道 |
淘寶式結論:流量不大用 NAT,流量大了切 DR,跨機房才考慮 TUN。DR 模式下回包不經 LVS,LVS 只處理「進」的一半流量,這正是它能扛百萬併發的秘密。
Keepalived:VIP 漂移,入口永不失聯#
LVS 本身也是單點,掛了照樣全站失聯。所以 LVS 一定是一主一備 + Keepalived:兩台 LVS 共享一個VIP(虛擬 IP,如 10.0.0.100),平時主節點持有 VIP 對外服務,備節點用 VRRP 心跳監聽,主節點一死,VIP 幾秒內漂到備節點。
# keepalived.conf(主備各一份,state 與 priority 不同)
vrrp_instance VI_TAOBAO {
state MASTER # 備機改為 BACKUP
interface eth0
virtual_router_id 51
priority 100 # 備機改為 90,數字大者當主
virtual_ipaddress {
10.0.0.100 # VIP:域名解析到它,用戶只認它
}
}
flowchart TD
DNS[DNS:shop.taobao.com → VIP 10.0.0.100] --> VIP
VIP -.主活著.-> M[LVS主:持有VIP]
VIP -.主掛了漂移.-> B[LVS備:接管VIP]
M --> N[Nginx集群]
B --> NF5 在哪?LVS 又在哪?#
F5 是硬體四層/七層一體機,效能與穩定性頂級,但一台幾十萬起跳,還有授權費。淘寶的路徑是:早期 F5 救急(花錢買時間),流量大到 F5 也貴到扛不住後,自研/開源 LVS 集群替代。中小團隊記住結論即可:直接用 LVS + Keepalived,省下的錢拿去加機器;雲上則直接用雲廠商的 SLB/CLB(本質就是託管的 LVS+Nginx)。
本章小結#
- 七層扛不住海量併發時,前面加四層擋量:四層扛住、七層分對
- LVS 三模式:NAT 簡單、DR 高效主流、TUN 可跨機房
- DR 回包直返,是高併發的關鍵;代價是 RealServer 要配 VIP
- Keepalived + VIP 漂移解決 LVS 單點,主掛備自動接管
- F5 花錢買時間,LVS 省錢撐規模,雲上直接用 SLB
想一想#
- 為什麼 DR 模式的 LVS 吞吐量可以比 NAT 高好幾倍?(提示:回包走哪條路?)
- Keepalived 的 VIP 漂移解決了什麼單點問題?如果主備之間的心跳網路斷了會發生什麼?(提示:腦裂)
- 畫出「LVS → Nginx → Tomcat」三層架構,標出每一層掛掉一台時,流量如何自動繞行。