LVS負(fù)載均衡集群指南
一、什么是集群集群Cluster 是指將多臺獨立的計算機服務(wù)器通過高速網(wǎng)絡(luò)連接起來協(xié)同完成特定任務(wù)的計算系統(tǒng)。從外部看整個集群就像一臺性能超強的超級計算機。為什么需要集群高可用性HA單點故障時自動切換保證服務(wù)7×24小時在線高性能HP將請求分散到多臺服務(wù)器提升整體處理能力高可擴展性HS通過增加節(jié)點即可線性擴展性能二、集群分類根據(jù)功能和目標(biāo)集群主要分為三大類類型英文縮寫核心目標(biāo)典型產(chǎn)品負(fù)載均衡集群LBLoad Balancing將請求流量分發(fā)到多個后端服務(wù)器LVS、Nginx、HAProxy高可用集群HAHigh Availability保證服務(wù)持續(xù)在線故障自動切換Keepalived、Heartbeat高性能集群HPHigh Performance并行計算解決大規(guī)??茖W(xué)計算問題Hadoop、MPI關(guān)系圖解三、LVS的作用LVSLinux Virtual Server是Linux內(nèi)核自帶的四層負(fù)載均衡軟件由章文嵩博士開發(fā)現(xiàn)已成為Linux內(nèi)核標(biāo)準(zhǔn)組件。核心作用請求分發(fā)將用戶請求按規(guī)則分發(fā)到后端真實服務(wù)器RealServer服務(wù)隱藏后端服務(wù)器的真實IP對內(nèi)網(wǎng)可見對外只暴露VIP虛擬IP水平擴展通過增加后端服務(wù)器提升服務(wù)能力高可用性配合Keepalived實現(xiàn)故障自動切換LVS vs Nginx七層負(fù)載對比項LVS四層Nginx七層工作層級傳輸層TCP/UDP應(yīng)用層HTTP/HTTPS處理速度極快內(nèi)核態(tài)較快用戶態(tài)協(xié)議支持所有TCP/UDP協(xié)議僅HTTP/HTTPS等配置復(fù)雜度相對簡單靈活但復(fù)雜典型場景大流量入口、數(shù)據(jù)庫負(fù)載Web應(yīng)用、API網(wǎng)關(guān)四、LVS的4種模式及原理圖解LVS通過修改數(shù)據(jù)包來實現(xiàn)流量轉(zhuǎn)發(fā)主要有4種工作模式1. NAT模式網(wǎng)絡(luò)地址轉(zhuǎn)換原理請求包到達LVS后將目標(biāo)IPVIP改為RealServer的IPDNATRS處理請求后將響應(yīng)包發(fā)回LVSLVS再將源IP改為VIP后返回客戶端SNAT特點優(yōu)支持端口映射RS可以使用任何操作系統(tǒng)缺進出流量都經(jīng)過LVS成為瓶頸性能最低需修改IP和端口2. DR模式直接路由-最常用原理LVS和RS必須在同一物理網(wǎng)段二層可達RS的lo接口配置VIP非ARP響應(yīng)LVS僅修改請求包的目標(biāo)MAC地址IP和端口不變RS直接響應(yīng)客戶端不經(jīng)過LVS特點優(yōu)性能最高響應(yīng)不走LVS可處理大規(guī)模流量缺LVS和RS必須在同一VLANRS需要配置VIP和抑制ARPRS配置示例# 在RS上配置VIP到lo ifconfig lo:0 172.25.254.100 netmask 255.255.255.255 up # 抑制ARP響應(yīng) echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce3. TUN模式隧道原理LVS將原始請求包封裝在IPIP隧道中發(fā)送給RSRS解封裝后處理請求直接響應(yīng)客戶端RS需要配置tunl接口和VIP特點優(yōu)支持跨網(wǎng)段部署響應(yīng)流量不經(jīng)過LVS缺有隧道封裝開銷RS需要支持IPIP隧道4. FULLNAT模式全網(wǎng)絡(luò)地址轉(zhuǎn)換— 阿里開源原理同時修改源IP和目標(biāo)IPLVS和RS可以跨網(wǎng)段部署RS默認(rèn)網(wǎng)關(guān)指向LVS的內(nèi)網(wǎng)IP特點優(yōu)LVS和RS可跨網(wǎng)段解決了DR模式的網(wǎng)絡(luò)限制缺進出流量都經(jīng)過LVS性能折中五、LVS的13種調(diào)度算法LVS內(nèi)核支持豐富的調(diào)度算法可分為靜態(tài)算法和動態(tài)算法兩類。靜態(tài)算法不檢查RS負(fù)載狀態(tài)算法縮寫原理適用場景輪詢rr按順序輪流分配RS性能一致時加權(quán)輪詢wrr按權(quán)重比例分配RS性能有差異時目標(biāo)地址散列dh同一目標(biāo)IP固定到同一RS緩存服務(wù)器源地址散列sh同一源IP固定到同一RS需要會話保持動態(tài)算法檢查RS負(fù)載狀態(tài)算法縮寫原理適用場景最小連接lc分配給連接數(shù)最少的RS長連接服務(wù)加權(quán)最小連接wlc按權(quán)重比例優(yōu)先給連接數(shù)少的通用推薦最短期望延遲sed特殊wlc算法除以權(quán)重高性能場景永不排隊nqsed優(yōu)化版無空閑時不排隊防止空閑RS等待局部最小連接lblc同一目標(biāo)IP到同一RS的lc帶緩存的Web帶復(fù)制的局部最小連接lblcr先找目標(biāo)IP找不到再用lc大規(guī)模緩存目標(biāo)地址散列dh目標(biāo)IP哈希防火墻集群源地址散列sh源IP哈希會話保持最少隊列調(diào)度seq等待隊列最短的優(yōu)先算法選擇建議# 最常用組合 # 短連接HTTPwlc 或 rr ipvsadm -A -t VIP:80 -s wlc # 長連接數(shù)據(jù)庫lc ipvsadm -A -t VIP:3306 -s lc # 有緩存場景sh源地址哈希 ipvsadm -A -t VIP:80 -s sh六、LVS多端口輪詢問題解決方案問題描述當(dāng)后端服務(wù)有多個端口如HTTP的80和HTTPS的443我們需要將兩種流量都負(fù)載均衡但LVS的傳統(tǒng)做法是每個端口單獨配置# 80端口 ipvsadm -A -t VIP:80 -s rr ipvsadm -a -t VIP:80 -r RS1:80 -m ipvsadm -a -t VIP:80 -r RS2:80 -m # 443端口 ipvsadm -A -t VIP:443 -s rr ipvsadm -a -t VIP:443 -r RS1:443 -m ipvsadm -a -t VIP:443 -r RS2:443 -m缺端口越多配置越繁瑣且無法實現(xiàn)一組RS同時支持多個端口的策略統(tǒng)一。解決方案一防火墻標(biāo)記FWM利用iptables給多個端口打上相同的防火墻標(biāo)記LVS基于標(biāo)記進行調(diào)度# 1. 用iptables給80和443端口打標(biāo)記66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK --set-mark 66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 443 -j MARK --set-mark 66 # 2. LVS使用-f指定防火墻標(biāo)記而非端口 ipvsadm -A -f 66 -s rr # 3. 添加RS使用實際端口 ipvsadm -a -f 66 -r RS1:80 -m ipvsadm -a -f 66 -r RS2:80 -m # 443同理 ipvsadm -a -f 66 -r RS1:443 -m ipvsadm -a -f 66 -r RS2:443 -m優(yōu)多個端口共享同一組調(diào)度策略和會話保持。解決方案二配置文件中統(tǒng)一管理# /etc/sysconfig/ipvsadm 配置示例 -A -f 66 -s wlc -a -f 66 -r 192.168.0.10:80 -m -w 2 -a -f 66 -r 192.168.0.10:443 -m -w 2 -a -f 66 -r 192.168.0.20:80 -m -w 1 -a -f 66 -r 192.168.0.20:443 -m -w 1七、LVS會話粘滯解決方案問題描述會話粘滯Session Sticky用戶登錄后后續(xù)請求必須轉(zhuǎn)發(fā)到同一臺RS否則會出現(xiàn)未登錄或購物車丟失等問題。LVS默認(rèn)的輪詢算法會導(dǎo)致同一用戶的請求被分發(fā)到不同RS造成會話失效。解決方案方案一源地址哈希sh算法 — 簡單有效# 使用源地址哈希同一源IP始終到同一RS ipvsadm -A -t VIP:80 -s sh ipvsadm -a -t VIP:80 -r RS1 -m ipvsadm -a -t VIP:80 -r RS2 -m優(yōu)點配置簡單無額外開銷缺點若RS宕機該IP的所有用戶都會受影響無法解決NAT網(wǎng)絡(luò)下多用戶共享IP的問題方案二持久連接-p參數(shù)# 指定持久超時時間單位秒 ipvsadm -A -t VIP:80 -s rr -p 300 ipvsadm -a -t VIP:80 -r RS1 -m ipvsadm -a -t VIP:80 -r RS2 -m原理LVS在內(nèi)存中維護一個連接跟蹤表記錄源IP→選定RS的映射超時時間內(nèi)同一源IP的請求都發(fā)往同一RS。適用配合其他調(diào)度算法如wlc使用兼顧負(fù)載均衡和會話保持。方案三防火墻標(biāo)記 持久連接解決多端口會話# 80和443標(biāo)記為66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK --set-mark 66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 443 -j MARK --set-mark 66 # LVS使用標(biāo)記并開啟持久 ipvsadm -A -f 66 -s rr -p 600 ipvsadm -a -f 66 -r RS1 -m ipvsadm -a -f 66 -r RS2 -m效果用戶從HTTP跳轉(zhuǎn)到HTTPS時仍然保持在同一臺RS不會丟失會話。方案四應(yīng)用層會話共享終極方案將Session存儲在Redis/Memcached等共享緩存中后端RS無論哪臺處理都能讀取到用戶會話。優(yōu)點徹底解決粘滯問題后端RS可隨意擴縮容缺點需要修改應(yīng)用程序代碼八、一鍵配置腳本實戰(zhàn)以下是一個規(guī)范化的Bash腳本涵蓋了LVS四種模式配置、算法切換、防火墻標(biāo)記和會話保持等所有核心功能。#!/bin/bash # LVS 四種模式及高級功能完整配置腳本 (重構(gòu)版) # 適用場景學(xué)習(xí)/測試 LVS 各項核心配置 # 基于截圖內(nèi)容整理添加了環(huán)境檢查與邏輯控制 # 1. 基礎(chǔ)環(huán)境變量 (按需修改) VIP172.25.254.100 RS1172.25.254.10 RS2172.25.254.11 INTERFACEeth0 # 若VIP綁定的網(wǎng)卡名稱不一致請修改這里 # 2. 基礎(chǔ)環(huán)境安裝 (所有模式通用) install_env() { echo 開始安裝 LVS 基礎(chǔ)環(huán)境... # 截圖中的 yum 或 apt此處用最通用的判斷 if command -v yum /dev/null; then yum install -y ipvsadm elif command -v apt /dev/null; then apt update apt install -y ipvsadm else echo 不支持的系統(tǒng)包管理器請手動安裝 ipvsadm exit 1 fi # 開啟 IP 轉(zhuǎn)發(fā) (NAT 模式必須) echo 1 /proc/sys/net/ipv4/ip_forward echo 環(huán)境安裝完成。 } # 3. 規(guī)則清理 (每次切換模式前執(zhí)行) clear_rules() { echo 清空所有已有的 LVS 規(guī)則和綁定... ipvsadm -C ip addr del $VIP/32 dev $INTERFACE 2/dev/null echo 規(guī)則已清空。 } # 4. 四種核心模式配置函數(shù) # 模式 A: NAT 模式 (配置 VIP 在 Director 上后端 RS 網(wǎng)關(guān)指向 Director) conf_nat() { clear_rules echo 配置 NAT 模式... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -m ipvsadm -a -t $VIP:80 -r $RS2:80 -m # NAT 模式下后端 RS 的網(wǎng)關(guān)必須指向 Director 的 DIP需在 RS 手動配置 echo 注意NAT 模式請確保 RS 的默認(rèn)網(wǎng)關(guān)指向本機內(nèi)網(wǎng) IP。 } # 模式 B: DR 模式 (企業(yè)常用VIP 綁定在 Lo 網(wǎng)卡抑制 ARP) conf_dr() { clear_rules echo 配置 DR 模式... # Director 上綁定 VIP ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -g ipvsadm -a -t $VIP:80 -r $RS2:80 -g echo 注意DR 模式需要在 RS 上執(zhí)行以下命令 echo ip addr add $VIP/32 dev lo:0 echo echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce echo echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore echo echo 2 /proc/sys/net/ipv4/conf/all/arp_announce } # 模式 C: TUN 模式 (IP 隧道) conf_tun() { clear_rules echo 配置 TUN (隧道) 模式... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -i ipvsadm -a -t $VIP:80 -r $RS2:80 -i echo 注意TUN 模式需要 RS 支持隧道并配置 tunl0。 } # 模式 D: FULLNAT 模式 conf_fullnat() { clear_rules echo 配置 FULLNAT 模式 (需內(nèi)核支持)... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -f ipvsadm -a -t $VIP:80 -r $RS2:80 -f echo 注意FULLNAT 需要特殊的內(nèi)核補丁 (如 LVS 全 NAT 版本)。 } # 5. 調(diào)度算法切換 (常用: 輪詢 rr / 加權(quán) wlc) # 用法示例change_algo wlc change_algo() { local new_algo$1 echo 正在將調(diào)度算法切換為: $new_algo # 需要先用 -E 編輯虛擬服務(wù)來修改調(diào)度算法 ipvsadm -E -t $VIP:80 -s $new_algo # 用 -e 編輯真實服務(wù)器保持后端權(quán)重等屬性 ipvsadm -e -t $VIP:80 -r $RS1:80 -m -w 1 ipvsadm -e -t $VIP:80 -r $RS2:80 -m -w 2 echo 算法切換完成。 } # 6. 端口輪詢 / FWMARK (防火墻標(biāo)記) # 示例標(biāo)記 80 和 443 為一組 conf_fwmark() { clear_rules echo 配置 FWMARK 標(biāo)準(zhǔn)解決多端口輪詢問題... # 1. 配置 iptables 進行端口標(biāo)記 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 10 # 2. 配置 LVS 按 FWMARK 轉(zhuǎn)發(fā) ipvsadm -A -f 10 -s rr ipvsadm -a -f 10 -r $RS1:80 -m ipvsadm -a -f 10 -r $RS2:80 -m echo FWMARK 配置完成。 } # 7. 會話保持 (粘滯 Persistent) # 方案 1: SH (源地址哈希) conf_sh_affinity() { clear_rules echo 配置 SH 哈希會話保持... ipvsadm -A -t $VIP:80 -s sh ipvsadm -a -t $VIP:80 -r $RS1:80 -g -w 1 ipvsadm -a -t $VIP:80 -r $RS2:80 -g -w 2 } # 方案 2: 持久化超時 (LVS 原生) conf_timeout_persistence() { clear_rules local persist_time300 # 設(shè)置 300 秒持久化 echo 配置 LVS 持久化超時 ($persist_time 秒)... ipvsadm -A -t $VIP:80 -s rr -p $persist_time ipvsadm -a -t $VIP:80 -r $RS1:80 -m ipvsadm -a -t $VIP:80 -r $RS2:80 -m } # 方案 3: Redis 共享會話 (僅提示LVS 只負(fù)責(zé)轉(zhuǎn)發(fā)) conf_redis_session() { echo Redis 共享會話方案 (無需修改 LVS) echo 此方案不依賴 LVS 配置而是修改后端 Web 應(yīng)用 (如 PHP/Java) 的 Session 存儲。 echo LVS 無需特意配置持久化只需用輪詢 rr/wlc應(yīng)用層通過 Redis 共享 Session 即可。 echo 這樣故障時也無需擔(dān)心 Session 丟失。 } # 8. 策略保存與開機自啟 save_rules() { echo 保存當(dāng)前 LVS 規(guī)則... ipvsadm-save /etc/sysconfig/ipvsadm echo 規(guī)則已保存至 /etc/sysconfig/ipvsadm echo 啟用開機自啟動... systemctl enable ipvsadm --now 2/dev/null || echo 請手動執(zhí)行: systemctl enable ipvsadm } # 9. 查看當(dāng)前規(guī)則 show_rules() { echo 當(dāng)前 LVS 配置: ipvsadm -Ln echo 連接統(tǒng)計: ipvsadm -Ln --stats } # 10. 使用示例菜單 show_menu() { echo LVS 一鍵配置腳本菜單 echo 1. 安裝基礎(chǔ)環(huán)境 echo 2. 配置 NAT 模式 echo 3. 配置 DR 模式 echo 4. 配置 TUN 模式 echo 5. 配置 FULLNAT 模式 echo 6. 切換調(diào)度算法 (需指定算法名) echo 7. 配置 FWMARK 多端口負(fù)載均衡 echo 8. 配置 SH 源地址哈希會話保持 echo 9. 配置持久連接會話保持 echo 10. 保存規(guī)則并設(shè)置開機自啟 echo 11. 查看當(dāng)前規(guī)則 echo 12. 清空所有規(guī)則 echo 0. 退出 } # 主程序 (支持命令行參數(shù)和交互菜單) main() { # 如果帶了參數(shù)直接執(zhí)行對應(yīng)功能 case $1 in install) install_env ;; nat) conf_nat ;; dr) conf_dr ;; tun) conf_tun ;; fullnat) conf_fullnat ;; algo) change_algo $2 ;; fwmark) conf_fwmark ;; sh) conf_sh_affinity ;; persist) conf_timeout_persistence ;; save) save_rules ;; show) show_rules ;; clear) clear_rules ;; *) # 沒有參數(shù)則顯示交互菜單 while true; do show_menu read -p 請輸入選項編號: choice case $choice in 1) install_env ;; 2) conf_nat ;; 3) conf_dr ;; 4) conf_tun ;; 5) conf_fullnat ;; 6) read -p 請輸入算法名 (rr/wlc/wrr/sed/nq等): algo; change_algo $algo ;; 7) conf_fwmark ;; 8) conf_sh_affinity ;; 9) conf_timeout_persistence ;; 10) save_rules ;; 11) show_rules ;; 12) clear_rules ;; 0) echo 退出...; exit 0 ;; *) echo 無效選項請重新輸入 ;; esac echo done ;; esac } # 執(zhí)行主程序 main $

相關(guān)新聞

【限時開源】我們團隊沉淀3年的提示詞知識圖譜(含217個領(lǐng)域?qū)嶓w關(guān)系+動態(tài)權(quán)重算法)

【限時開源】我們團隊沉淀3年的提示詞知識圖譜(含217個領(lǐng)域?qū)嶓w關(guān)系+動態(tài)權(quán)重算法)

更多請點擊: https://intelliparadigm.com 第一章:編程提示詞最佳實踐 編寫高質(zhì)量的編程提示詞(Prompt)是提升大模型代碼生成準(zhǔn)確率與可維護性的關(guān)鍵環(huán)節(jié)。它不僅影響輸出結(jié)果的語法正確性,更決定邏輯完整性、邊界處理…

2026/7/29 11:46:26 閱讀更多
BBWEYY · 教培增長解決方案,財會考證培訓(xùn)機構(gòu)GEO獲客與小程序轉(zhuǎn)化一體化策劃案,含零代碼SAAS、AI編程、源碼定制交付

BBWEYY · 教培增長解決方案,財會考證培訓(xùn)機構(gòu)GEO獲客與小程序轉(zhuǎn)化一體化策劃案,含零代碼SAAS、AI編程、源碼定制交付

BBWEYY 教培增長解決方案 財會考證培訓(xùn)機構(gòu)GEO獲客與小程序 轉(zhuǎn)化一體化策劃案 從“被AI推薦”到“查詢報考條件或領(lǐng)取備考方案”的完整招生轉(zhuǎn)化閉環(huán) 項目定位 適用對象 方案版本 GEO獲客與招生轉(zhuǎn)化 財會考證培訓(xùn)機構(gòu) 策劃方案 V1.0|2026年7月 核心判斷 財會…

2026/7/29 12:36:28 閱讀更多
ssm 童裝銷售管理系統(tǒng)

ssm 童裝銷售管理系統(tǒng)

一、關(guān)鍵詞童裝銷售管理系統(tǒng)、童裝銷售、童裝銷售訂單管理、童裝銷售在線交易二、作品包含源碼數(shù)據(jù)庫萬字設(shè)計文檔PPT全套環(huán)境和工具資源本地部署教程三、項目技術(shù)前端技術(shù): Html、Css、Js、Vue2.6、Element-ui后端技術(shù):Java、SSM(Spring 5.0…

2026/7/29 12:26:27 閱讀更多
面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個問題:在 Claude Code 里把一個任務(wù)拆給 5 個 Subagent 并行跑,結(jié)果可能比 1 個 agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實擲骰子的過程。應(yīng)用投擲兩個骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號直觀展示每個骰子的點數(shù),并伴有快速滾動的動畫效果?!?/p>

2026/7/29 0:15:24 閱讀更多