背景介紹:為什麼選擇 LVS 負載均衡?
在高併發 Web 架構中,隨着用户量增長,單台服務器的性能瓶頸和單點故障問題會愈發突出。傳統應用層負載均衡(如 Nginx)雖配置靈活,但在百萬級併發場景下,用户態轉發的性能限制會顯現。
LVS(Linux Virtual Server)作為內核級負載均衡方案,工作在傳輸層(Layer 4),通過 IPVS 模塊直接在內核中處理數據包轉發,無需用户態與內核態的頻繁切換,可輕鬆支撐百萬級併發連接,且資源佔用極低。其 NAT 模式配置簡單,無需修改後端服務器網絡架構,是大型互聯網企業高併發場景的首選方案,也適合負載均衡入門者快速掌握內核級負載均衡的核心原理。
本文將在 CentOS 7 系統上從零部署完整的 LVS 負載均衡集羣(NAT 模式),覆蓋環境準備、核心配置、效果驗證及持久化優化,助力快速構建高可用、高併發的 Web 架構。
核心關鍵詞解釋
- LVS(Linux Virtual Server):集成於 Linux 內核的開源負載均衡項目,通過 IPVS 模塊實現高效數據包轉發,支持 NAT、DR、TUN 三種模式;
- IPVS(IP Virtual Server):LVS 的核心內核模塊,負責實現負載均衡的調度算法和數據包轉發邏輯,無需額外安裝;
- VIP(Virtual IP):虛擬 IP 地址,對外提供統一的服務訪問入口,客户端僅需訪問 VIP 即可享受負載均衡服務;
- Director(調度器):運行 LVS 的服務器,負責接收客户端請求,根據調度算法轉發至後端真實服務器;
- RS(Real Server):後端真實服務器,運行 Web 等應用服務,處理調度器轉發的請求;
- NAT 模式:LVS 三種模式之一,通過地址轉換實現請求轉發,所有進出流量均經過調度器,配置簡單但存在流量瓶頸;
- 調度算法:LVS 分發請求的規則,常用輪詢(rr)、加權輪詢(wrr)、最小連接(lc)等;
- ipvsadm:LVS 的用户態管理工具,用於配置、查看和修改 LVS 負載均衡規則。
一、LVS 簡介與 NAT 模式原理
1. 什麼是 LVS?
LVS 是一個開源負載均衡項目,已集成到 Linux 內核中。它通過 IPVS(IP Virtual Server)模塊實現高效的數據包轉發,無需額外安裝內核,僅需通過用户態工具(如 ipvsadm)即可配置和管理。
2. NAT 模式工作原理
NAT(Network Address Translation)模式是 LVS 三種常用模式(NAT、DR、TUN)中配置最簡單的一種,其流量路徑遵循以下流程:
- 客户端發送請求至 LVS 的虛擬 IP(VIP);
- LVS 調度器(Director)接收請求後,根據預設的調度算法(如輪詢)將請求轉發給後端真實服務器(Real Server,簡稱 RS);
- 真實服務器處理請求後,將響應流量返回給 LVS 調度器(因真實服務器網關指向 LVS);
- LVS 調度器對響應流量做地址轉換,最終返回給客户端。
3. NAT 模式優缺點
- ✅ 優點:配置簡單,真實服務器無需修改網絡配置,僅需指定網關即可;
- ⚠️ 缺點:所有進出流量均需經過 LVS 調度器,LVS 易成為流量瓶頸,不適合超大規模併發場景。
二、實驗環境規劃
本次搭建需 3 台 CentOS 7 服務器,角色、主機名、IP 地址規劃如下表所示(LVS 公私網 IP 一致):
|
主機角色
|
主機名
|
操作系統
|
IP 地址
|
|
LVS 調度器
|
lvs-director
|
CentOS 7
|
虛擬 IP(公私網一致):10.0.0.1
|
|
真實服務器 1
|
web1
|
CentOS 7
|
內網 IP:10.0.0.2
|
|
真實服務器 2
|
web2
|
CentOS 7
|
內網 IP:10.0.0.3
|
三、步驟 1:準備後端 Web 服務器
若尚未部署 Web 服務,需在 web1 和 web2 上分別搭建簡單 Web 頁面(以 Apache 為例),確保後端服務可正常響應請求:
1. 在 web1 上執行
bash
# 安裝 Apache 服務
yum install -y httpd
# 創建 Web 首頁(標識 web1,便於測試時區分節點)
echo "Welcome to web1" > /var/www/html/index.html
# 啓動 Apache 並設置開機自啓(確保服務器重啓後服務自動運行)
systemctl start httpd
systemctl enable httpd
2. 在 web2 上執行
僅需將 Web 首頁內容改為 Welcome to web2,其餘命令與 web1 一致:
bash
yum install -y httpd
echo "Welcome to web2" > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd
3. 驗證 Web 服務
在 LVS 調度器或其他內網機器上,通過內網 IP 訪問 web1 和 web2,確認頁面正常返回:
bash
# 訪問 web1(應返回 web1 標識頁面)
curl http://10.0.0.2
# 訪問 web2(應返回 web2 標識頁面)
curl http://10.0.0.3
四、步驟 2:配置 LVS 調度器(Director)
LVS 調度器是整個負載均衡集羣的核心,需完成工具安裝、IP 轉發啓用、防火牆配置三個關鍵操作,確保數據包能正常轉發。
1. 安裝 LVS 管理工具
LVS 內核模塊(IPVS)默認已集成到 CentOS 7 內核中,無需額外安裝,僅需安裝用户態管理工具 ipvsadm:
bash
yum install -y ipvsadm
2. 啓用 IP 轉發(關鍵!)
LVS 作為調度器,需開啓內核 IP 轉發功能,否則無法將客户端請求轉發至後端真實服務器:
bash
# 臨時啓用 IP 轉發(重啓後失效,用於快速測試)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久啓用 IP 轉發(修改配置文件,重啓後仍生效)
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# 使配置立即生效
sysctl -p
# 驗證 IP 轉發是否啓用(輸出 1 表示已啓用)
sysctl net.ipv4.ip_forward
3. 設置防火牆(可選)
若系統啓用了 firewalld,需開放 80 端口(Web 服務默認端口),或臨時關閉防火牆(僅測試環境推薦):
bash
# 方案 1:開放 80 端口(推薦,生產環境適用)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
# 方案 2:臨時關閉 firewalld(測試環境適用,簡化配置)
systemctl stop firewalld
五、步驟 3:配置 LVS 虛擬服務(NAT 模式)
通過 ipvsadm 命令創建 LVS 虛擬服務規則,指定 VIP、調度算法和後端真實服務器,實現請求分發:
bash
# 1. 清空現有 LVS 規則(首次配置可省略,避免舊規則干擾)
ipvsadm -C
# 2. 添加虛擬服務:VIP 為 10.0.0.1,端口 80,調度算法為輪詢(rr)
ipvsadm -A -t 10.0.0.1:80 -s rr
# 3. 添加後端真實服務器(-m 表示 NAT 模式)
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.2:80 -m # 添加 web1 節點
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.3:80 -m # 添加 web2 節點
關鍵參數説明
|
參數
|
含義
|
|
-A
|
添加虛擬服務(Virtual Server)
|
|
-a
|
為虛擬服務添加真實服務器(Real Server)
|
|
-t VIP:PORT
|
指定虛擬服務的 TCP 協議和端口(如 10.0.0.1:80)
|
|
-s rr
|
調度算法為輪詢(round-robin),其他常用算法:wrr(加權輪詢)、lc(最小連接)
|
|
-m
|
指定 LVS 模式為 NAT(Masquerading)
|
|
-r RS_IP:PORT
|
指定後端真實服務器的 IP 和端口
|
六、步驟 4:配置真實服務器網關(關鍵!)
NAT 模式要求真實服務器的默認網關指向 LVS 調度器的 IP(10.0.0.1),否則真實服務器的響應流量無法返回給 LVS,客户端將收不到響應。
1. 在 web1 和 web2 上修改網關
bash
# 編輯網卡配置文件(假設網卡為 eth0,實際需根據服務器網卡名稱調整,可通過 ip addr 查看)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 在文件末尾添加網關配置(指向 LVS 調度器 IP)
GATEWAY=10.0.0.1
2. 重啓網絡服務生效
bash
systemctl restart network
3. 驗證網關配置
bash
# 查看默認網關,輸出應包含"default via 10.0.0.1 dev eth0"
ip route show default
七、步驟 5:測試負載均衡效果
配置完成後,需驗證 LVS 是否能將請求均勻分發到後端兩台真實服務器。
1. 命令行測試(推薦)
在任意客户端(或 LVS 調度器本機)執行循環請求 VIP,觀察返回結果是否交替顯示 web1 和 web2 的頁面:
bash
# 循環請求 10 次 VIP(10.0.0.1)
for i in {1..10}; do
curl -s http://10.0.0.1
done
預期輸出(輪詢交替):
plaintext
Welcome to web1
Welcome to web2
Welcome to web1
Welcome to web2
...
2. 瀏覽器測試
打開瀏覽器,訪問 http://10.0.0.1,多次刷新頁面,觀察頁面內容是否交替變化(若瀏覽器緩存影響,可開啓無痕模式測試)。
八、步驟 6:持久化 LVS 規則(開機自啓)
LVS 規則默認保存在內存中,服務器重啓後規則會丟失。需通過 systemd 創建服務,實現 LVS 規則開機自動加載,確保服務穩定性。
1. 創建 LVS 服務文件
bash
cat > /etc/systemd/system/lvs.service <
2. 啓用並啓動服務bash# 重新加載 systemd 配置(識別新創建的服務)
systemctl daemon-reload
# 設置開機自啓(服務器重啓後自動加載 LVS 規則)
systemctl enable lvs
# 啓動服務(立即加載 LVS 規則)
systemctl start lvs
# 驗證服務狀態(輸出 active 表示正常)
systemctl status lvs九、常用命令與排錯1. 常用 LVS 管理命令功能
命令
查看 LVS 規則(詳細信息,數字格式顯示 IP 和端口)
ipvsadm -ln
查看當前連接數(客户端 IP、後端 RS 等)
ipvsadm -lnc
清空所有 LVS 規則
ipvsadm -C
保存 LVS 規則到文件
ipvsadm -S > /etc/sysconfig/ipvsadm
從文件加載 LVS 規則
ipvsadm -R < /etc/sysconfig/ipvsadm
測試後端 RS 連通性
curl http://10.0.0.2(web1)、curl http://10.0.0.3(web2)
檢查真實服務器網關
ip route show default
2. 常見問題排查問題 1:訪問 VIP 無響應檢查 LVS 調度器的安全組是否開放 80 端口(雲服務器場景);
檢查 LVS 調度器的防火牆是否放行 80 端口(firewall-cmd --list-ports);
檢查真實服務器的網關是否正確指向 LVS 的 IP(10.0.0.1);
檢查真實服務器的 Web 服務是否正常運行(systemctl status httpd)。
問題 2:只有一台後端 RS 響應檢查 LVS 規則是否包含兩台 RS(ipvsadm -ln);
檢查未響應的 RS 的 Web 服務是否正常(curl http://RS_IP);
檢查未響應的 RS 的網關是否正確配置(ip route show default)。
問題 3:連接超時在 LVS 調度器上使用 tcpdump 抓包分析流量路徑,例如: bash
# 抓取與 web1(10.0.0.2)相關的 80 端口流量
tcpdump -i eth0 host 10.0.0.2 and port 80檢查 LVS 與 RS 之間的網絡是否通暢(ping 10.0.0.2、ping 10.0.0.3)。
十、總結與進階建議1. 總結本文完整演示了在 CentOS 7 上從零搭建 LVS 負載均衡集羣(NAT 模式)的流程,核心亮點:LVS 工作在傳輸層,內核級轉發,低延遲、高吞吐,適合高併發場景;
NAT 模式配置簡單,無需修改後端 RS 的網絡架構,僅需指定網關即可快速部署;
LVS 公私網 IP 統一為 10.0.0.1,簡化網絡配置,降低入門門檻;
通過 systemd 實現 LVS 規則開機自啓,確保服務重啓後仍能正常工作。
同時需注意,NAT 模式的侷限性在於 LVS 調度器會成為流量瓶頸,所有進出流量均需經過調度器,不適合超大規模集羣。2. 進階學習方向 切換至 LVS-DR 模式(Direct Routing):DR 模式下,RS 直接將響應流量返回給客户端,繞過 LVS 調度器,突破 NAT 模式的性能瓶頸,適合大規模集羣;
️ 集成 Keepalived:實現 LVS 調度器的高可用(主備自動切換),避免 LVS 單點故障,確保負載均衡服務不中斷;
監控與運維:結合 Prometheus + Node Exporter + Grafana 監控 LVS 的連接數、轉發效率、後端 RS 狀態等指標,實時掌握集羣運行狀態,及時發現並處理異常。
總結LVS 作為內核級負載均衡方案,憑藉其高性能、低資源佔用的優勢,成為高併發場景的核心組件。本文通過 NAT 模式的實戰部署,幫助快速理解 LVS 的工作原理和配置邏輯,適合作為負載均衡進階學習的基礎。後續可根據業務規模,靈活選擇 LVS 模式(NAT/DR/TUN),並結合 Keepalived、監控工具等,構建更穩定、可擴展的高可用架構。