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

相關新聞

人不僅需要活著,還需要感覺自己的存在能夠產生影響。

人不僅需要活著,還需要感覺自己的存在能夠產生影響。

生存解決的是“我還能不能繼續存在”,而意義解決的是“我的存在是否值得”。人和其他生命不同的地方之一: 不僅會感受到生命的延續, 還會不斷追問:“我存在的價值是什么?”第一層:活著 ≠ 生命感 一個人可以…

2026/8/1 19:11:51 閱讀更多
2026輕薄便攜筆記本推薦,差旅人士的全天候搭檔

2026輕薄便攜筆記本推薦,差旅人士的全天候搭檔

對于經常奔波于不同城市的商務人士而言,筆記本電腦幾乎是行李箱里的固定成員。一場跨城會議結束緊接著趕航班,在候機廳里處理緊急郵件,在高鐵上修改方案——這些場景下,續航就是生產力。那些號稱“長續航”的輕薄本,在…

2026/8/1 19:11:51 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業用三相異步電機,適用于自動化設備及通用機械驅動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業用三相異步電機,適用于自動化設備及通用機械驅動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多