LVS—DR模式
LVS DR 模式詳細簡介
一、模式定義與核心原理
LVS DR(Direct Routing)模式,即直接路由模式,是 Linux Virtual Server(LVS)實現負載均衡的經典模式之一,工作于網絡四層(傳輸層)。其核心原理為:客戶端向負載均衡調度器(Director Server,簡稱 DS)發起請求,DS 接收到數據包后,僅修改數據包的目標 MAC 地址為后端真實服務器(Real Server,簡稱 RS)的 MAC 地址,源 IP 和目標 IP 地址保持不變,隨后將數據包轉發至 RS;RS 處理完請求后,直接將響應數據返回給客戶端,無需再次經過 DS,實現了請求與響應路徑的分離。
二、數據流走向詳解
(一)請求階段
-
客戶端(Client)發送請求,數據包的源 IP 為客戶端 IP(CIP),目標 IP 為虛擬 IP(VIP,綁定在 DS 上),源 MAC 為客戶端 MAC,目標 MAC 為 DS 的 MAC。
-
數據包到達 DS 后,經過 PREROUTING 鏈進入內核,IPVS 模塊判斷請求屬于集群服務,將目標 MAC 地址修改為后端某臺 RS 的 MAC 地址,源 MAC 改為 DS 的 MAC,IP 地址不變,然后通過 POSTROUTING 鏈將數據包轉發給對應的 RS。
(二)響應階段
-
RS 接收到數據包后,由于目標 MAC 是自己的 MAC 地址,開始處理請求。處理完成后,RS 將響應數據包的源 IP 設置為 VIP(因為請求的目標 IP 是 VIP),目標 IP 設置為 CIP,源 MAC 為 RS 的 MAC,目標 MAC 為客戶端 MAC。
-
響應數據包直接從 RS 發送回客戶端,不經過 DS。
為更直觀呈現,可用流程圖展示:
三、核心優勢
-
高吞吐量與低延遲:DS 僅負責請求調度,響應數據直接由 RS 返回客戶端,減少了 DS 的處理壓力,大幅提升系統的吞吐量和響應速度,能高效處理高并發請求。
-
靈活的 IP 配置:RS 可以使用私有地址,降低成本;也可使用公網地址,滿足特定的訪問需求,網絡部署更加靈活。
-
良好的擴展性:通過增加 RS 的數量,可輕松擴展集群的處理能力,適應業務規模的增長。
-
資源利用率高:由于 DS 負載輕,無需配置高性能設備,降低硬件成本,同時充分利用 RS 的計算資源。
四、典型使用場景
-
大型網站與電商平臺:在 “雙十一” 等大促活動期間,面臨海量用戶訪問,LVS DR 模式能快速分發請求,保障系統穩定運行,提升用戶購物體驗。
-
內容分發網絡(CDN):用于將靜態資源(如圖片、視頻、腳本文件等)緩存到分布在各地的 RS 上,用戶請求時通過 DR 模式快速獲取資源,加速網頁加載速度。
-
在線游戲服務器:游戲在線人數眾多,對實時性要求高,DR 模式可實現高效的流量分發,確保游戲服務器穩定運行,減少玩家延遲卡頓現象。
-
企業內部應用系統:企業內部的 ERP、OA 等系統,在多人同時訪問時,LVS DR 模式能均衡負載,提高系統可用性和響應效率。
示例
環境配置
101 =nfs
102=web1
103=web2
104=lvs
105=客戶端
配置lvs
[root@bogon ~]# cd /etc/sysconfig/network-scripts/
[root@bogon network-scripts]# ls
ifcfg-ens160
[root@bogon network-scripts]# cp ifcfg-ens160 ifcfg-ens160:0
[root@bogon network-scripts]# ls
ifcfg-ens160 ifcfg-ens160:0
[root@bogon network-scripts]# vim ifcfg-ens160:0
[root@bogon network-scripts]# nmcli c reload
[root@bogon network-scripts]# nmcli c up ens160
連接已成功激活(D-Bus 活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/3)
###編輯虛擬網卡配置地址為vip 192.168.10.172
[root@bogon network-scripts]# ipvsadm -A -t 192.168.10.172:80 -s wrr
[root@bogon network-scripts]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1
[root@bogon network-scripts]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1
[root@bogon network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.172:80 wrr-> 192.168.10.102:80 Route 1 0 0 -> 192.168.10.103:80 Route 1 0 0
配置web
[root@bogon ~]# ip addr add 192.168.10.172/32 dev lo label lo:0
[root@bogon ~]# ifconfig
[root@bogon ~]# ip route add local 192.168.10.172/32 dev lo[root@bogon ~]# vim /etc/rc.local #!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/local
ip addr add 192.168.10.172/32 dev lo label lo:0
ip route add local 192.168.10.172/32 deb lo
~ [root@bogon ~]# chmod +x /etc/rc.local
###重啟查看是否生效
[root@bogon ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=1
[root@bogon ~]# sysctl -p
代碼解釋
# 添加一個回環接口別名,綁定IP地址192.168.10.172到lo:0
ip addr add 192.168.10.172/32 dev lo label lo:0# 查看網絡接口配置(ifconfig為舊版命令,推薦使用ip addr)
ifconfig# 添加一條本地路由規則,確保該IP地址的流量通過回環接口處理
ip route add local 192.168.10.172/32 dev lo# 編輯系統啟動腳本,設置開機自動執行網絡配置
vim /etc/rc.local #!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# ...(原有注釋保持不變)...# 創建鎖文件標記腳本已執行
touch /var/lock/subsys/local# 開機自動添加回環接口別名
ip addr add 192.168.10.172/32 dev lo label lo:0# 開機自動添加本地路由(注意:原命令中"deb"為拼寫錯誤,已修正為"dev")
ip route add local 192.168.10.172/32 dev lo# 賦予啟動腳本執行權限
chmod +x /etc/rc.local ###重啟查看是否生效# 編輯系統內核參數配置文件
vim /etc/sysctl.conf # ARP優化參數配置說明:
# arp_ignore=1: 僅在接收到的ARP請求所請求的IP地址
# 配置在接收網卡上時,才給予響應
net.ipv4.conf.all.arp_ignore=1# arp_announce=2: 總是使用最合適的本地地址來響應對端的ARP請求
# (確保從正確的網卡發送ARP響應)
net.ipv4.conf.all.arp_announce=2# 對默認接口應用相同的ARP優化策略
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce=2# 對回環接口應用ARP優化策略(注意:此處arp_announce設為1,
# 表示盡量使用合適的本地地址響應,與all/default的策略略有不同)
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=1# 使sysctl配置立即生效
sysctl -p
配置nfs
[root@bogon wwwroot]# vim /etc/exports
/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)
在兩臺web上
[root@bogon html]# mount 192.168.10.101:/opt/wwwroot /var/www/html/
驗證
[root@bogon html]# df -hT
文件系統 類型 大小 已用 可用 已用% 掛載點
/dev/mapper/openeuler-root ext4 191G 1.9G 180G 1% /
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs tmpfs 675M 9.1M 666M 2% /run
tmpfs tmpfs 1.7G 0 1.7G 0% /tmp
/dev/nvme0n1p2 ext4 974M 174M 733M 20% /boot
192.168.10.101:/opt/wwwroot nfs4 191G 1.8G 180G 1% /var/www/html
客戶端訪問lvs
[root@localhost ~]# curl 192.168.10.172
web1
[root@localhost ~]# curl 192.168.10.172
web2