首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

LVS 內核實現深度解析(一):架構、三大模式與 Netfilter 掛載點

     編輯:Java 綜合教學

LVS (Linux Virtual Server) 內核實現核心原理詳解

概述

LVS 是 Linux 內核級負載均衡器,由章文嶽博士主導開發,目標:高性能、高可用、低成本構建服務器集群。核心組件:

  • IPVS (IP Virtual Server):內核模塊,實現四層負載均衡,基於 Netfilter 框架
  • ipvsadm:用戶態管理工具,配置虛擬服務、真實服務器、調度算法

官網:linuxvirtualserver.org | 分析內核版本:Linux 2.6.32(經典參考版本)

核心架構:Netfilter 掛載點

IPVS 在 Netfilter 三個 Hook 點註冊處理函數,攔截數據包:

Hook 點位置IPVS 處理邏輯
NF_INET_PRE_ROUTING路由前(PREROUTING)DNAT:修改目標 IP 為 RS IP(NAT/TUN 模式)
NF_INET_LOCAL_IN本地輸入處理發往 Director 本機的數據包
NF_INET_FORWARD轉發DR 模式:修改 MAC 地址直接轉發
NF_INET_POST_ROUTING路由後(POSTROUTING)SNAT:修改源 IP 為 DIP(NAT 模式回包)
NF_INET_LOCAL_OUT本地輸出Director 主動發起的連接處理

三大工作模式深度對比

1. LVS-NAT (Network Address Translation)

Client → [VIP] Director [DIP] ←→ [RIP] Real Servers
                ↓ DNAT: VIP→RIP
                ↑ SNAT: RIP→DIP
特性說明
網絡要求Director、RS 同一子網,RS 網關指向 DIP
IP 類型RIP 通常用私網 IP
流量路徑請求、響應均經過 Director
OS 要求RS 任意 OS(僅需 TCP/IP 協議棧)
性能瓶頸Director 雙向處理流量,易成瓶頸
端口映射支持端口映射(VIP:80 → RIP:8080)

2. LVS-DR (Direct Routing)

Client → [VIP] Director → [RIP] Real Servers → Client
                ↓ 修改 MAC: D_MAC → R_MAC
                ↑ RS 直接回包,不經 Director
特性說明
網絡要求Director、RS 同一物理網段(二層互通)
IP 類型RIP 可用公網 IP
關鍵配置RS 網關不能指向 DIP,需配置 VIP 於 lo 接口(隱藏/arp_ignore)
流量路徑請求經 Director,響應直連 Client
性能優勢Director 僅處理入向請求,吞吐量極高

3. LVS-TUN (IP Tunneling / IPIP)

Client → [VIP] Director → [新IP頭: DIP→RIP] 封裝 → Tunnel → RS 解封 → Client
                ↓ IPIP 封裝
                ↑ RS 直連回包
特性說明
網絡要求Director、RS 可跨網段、跨機房、跨地域
IP 類型RIP 必須為公網 IP(需路由可達)
封裝開銷每包增加 20 字節 IP 頭
OS 要求RS 需支持 IPIP 隧道(Linux/BSD/部分 Unix)
適用場景跨地域災備、混合雲、異構網絡

模式選型決策樹

是否需要跨網段/跨機房?
  ├─ 是 → LVS-TUN (RIP需公網IP) 或 公網負載均衡器
  └─ 否 → 是否同一物理網段(二層互通)?
          ├─ 是 → LVS-DR (性能最佳,RS直連回包)
          └─ 否 → LVS-NAT (最通用,RS網關指向DIP,雙向經Director)

調度算法(ipvsadm -A -s 算法)

算法全稱特點
rrRound Robin輪詢,均等分發
wrrWeighted Round Robin加權輪詢,按權重分發
lcLeast Connections最少連接,動態負載感知
wlcWeighted Least Connections加權最少連接(默認推薦)
lblcLocality-Based Least Connections基於局部性最少連接,適合緩存集群
shSource Hashing源 IP 哈希,會話保持

內核數據結構關鍵點

  • struct ip_vs_service:虛擬服務(VIP:Port + 協議 + 調度器)
  • struct ip_vs_dest:真實服務器(RIP:Port + 權重 + 連接數 + 狀態)
  • struct ip_vs_conn:連接表項(雙向映射、狀態機、超時定時器)
  • 連接哈希表:ip_vs_conn_tab,雙向鏈表,支持一致性哈希
  • 同步守護進程:ipvs_sync_daemon,主備同步連接表(多播/單播)

總結

LVS 作為內核級四層負載均衡器,通過 Netfilter Hook 實現高性能包轉發。三大模式各有優勢:NAT 通用、DR 高性能、TUN 跨網段。生產環境多採用 LVS-DR + Keepalived 雙機熱備 作為七層負載均衡器(Nginx/HAProxy)的前置四層分發層,構建「LVS + Keepalived + Nginx」經典高可用架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved