目錄
一、核心原理與理論
二、背景與架構設計
三、全流程部署步驟
1. NFS共享存儲配置(192.168.7.100)
?2. Real Server節點配置(四臺服務器)
3. Director服務器配置
四、常見問題解決方案
五、生產環境總結
拓撲示意圖:
一、核心原理與理論
LVS-DR(Direct Routing)模式通過MAC地址改寫實現高效轉發:
- 數據流向
-
LVS-DR(Direct Routing)工作流程:
-
請求處理
-
客戶端訪問VIP(172.16.16.172)
-
Director接收請求,通過調度算法選擇Real Server
-
修改目標MAC地址(不改變IP)轉發至Real Server
-
Real Server通過lo:0接口直接響應客戶端
-
-
關鍵技術
-
ARP抑制:Real Server隱藏VIP(
arp_ignore=1, arp_announce=2
) -
直接路由:響應流量不經過Director
-
雙網卡隔離:公網(ens33)處理客戶端請求,內網(ens37)連接存儲
-
-
二、背景與架構設計
網絡規劃:
設備 | ens33 (公網) | ens37 (存儲內網) |
---|---|---|
Director | 172.16.16.171 | 192.168.7.171 |
Real Server×4 | 172.16.16.131-134 | 192.168.7.131-134 |
NFS Server | - | 192.168.7.100 |
VIP | 172.16.16.172 | - |
核心優勢:
-
吞吐量提升:響應流量直返客戶端,避免Director瓶頸
-
安全隔離:存儲網絡獨立于公網
-
數據一致性:NFS共享Web根目錄
場景需求:
-
公網訪問VIP:
172.16.16.0/24
(ens33) -
存儲內網通信:
192.168.7.0/24
(ens37) -
共享存儲:NFS服務器發布
/var/www/html
架構優勢:
-
解耦網絡流量:公網/內網物理隔離
-
數據一致性:NFS共享Web根目錄
-
高性能:DR模式避免Director帶寬瓶頸
三、全流程部署步驟
1. NFS共享存儲配置(192.168.7.100)
# 安裝NFS服務
yum install -y nfs-utils rpcbind# 創建共享目錄
mkdir -p /var/www/html
chmod 777 /var/www/html# 配置訪問權限(/etc/exports)
echo "/var/www/html 172.16.16.0/24(rw,sync,no_root_squash)" >> /etc/exports
echo "/var/www/html 192.168.7.0/24(rw,sync,no_root_squash)" >> /etc/exports# 啟動服務
systemctl enable --now rpcbind nfs-server
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload
?2. Real Server節點配置(四臺服務器)
# 掛載NFS存儲
yum install -y nfs-utils
mkdir -p /var/www/html
mount -t nfs 192.168.7.100:/var/www/html /var/www/html
echo "192.168.7.100:/var/www/html /var/www/html nfs defaults 0 0" >> /etc/fstab# 配置VIP到lo:0
echo "DEVICE=lo:0" > /etc/sysconfig/network-scripts/ifcfg-lo:0
echo "IPADDR=172.16.16.172" >> /etc/sysconfig/network-scripts/ifcfg-lo:0
echo "NETMASK=255.255.255.255" >> /etc/sysconfig/network-scripts/ifcfg-lo:0
ifup lo:0# 添加永久路由
echo "route add -host 172.16.16.172 dev lo:0" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
route add -host 172.16.16.172 dev lo:0# 配置ARP抑制
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p# 安裝Web服務(以Nginx為例)
yum install -y nginx
systemctl enable --now nginx
3. Director服務器配置
# 配置VIP到ens33:0
echo "DEVICE=ens33:0" > /etc/sysconfig/network-scripts/ifcfg-ens33:0
echo "IPADDR=172.16.16.172" >> /etc/sysconfig/network-scripts/ifcfg-ens33:0
echo "NETMASK=255.255.255.255" >> /etc/sysconfig/network-scripts/ifcfg-ens33:0
ifup ens33:0# 禁用ICMP重定向
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.ens33.send_redirects = 0" >> /etc/sysctl.conf
sysctl -p# 加載IP_VS模塊
modprobe ip_vs# 安裝管理工具
yum install -y ipvsadm# 配置LVS規則
ipvsadm -C
ipvsadm -A -t 172.16.16.172:80 -s rr
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.131:80 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.132:80 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.133:80 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.134:80 -g -w 1# 保存配置
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
?4. 驗證配置
# 在客戶端訪問測試
curl http://172.16.16.172# 查看連接分發
ipvsadm -Ln --stats# 檢查Real ServerARP抑制
sysctl -a | grep arp_ignore# 測試NFS寫入
touch /var/www/html/testfile
?
?
四、常見問題解決方案
故障現象 | 診斷方法 | 解決方案 |
---|---|---|
VIP無法訪問 | ipvsadm -Ln 查看規則狀態 | 檢查Director的VIP配置和路由 |
所有請求分配到同一節點 | 檢查調度算法(-s參數) | 確認使用rr輪詢而非sh等哈希算法 |
NFS寫入權限被拒絕 | showmount -e 192.168.7.100 | 檢查exports的no_root_squash配置 |
節點服務器無法響應VIP請求 | tcpdump -i lo host 172.16.16.172 | 驗證ARP抑制參數是否生效 |
存儲網絡延遲高 | ping -s 8972 192.168.7.100 | 調整MTU:ip link set ens37 mtu 9000 |
五、生產環境總結
性能優化建議:
-
網卡調優
# 啟用巨幀(存儲網絡) ip link set ens37 mtu 9000 ethtool -G ens37 rx 4096 tx 4096
-
內核參數優化
# Director防止端口耗盡 echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf# Real Server連接復用 echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
-
會話保持方案
???????# 啟用源IP哈希調度 ipvsadm -E -t 172.16.16.172:80 -s sh
容災設計:
-
使用Keepalived實現Director雙機熱備
-
存儲網絡配置bonding冗余
-
實時監控:
watch -n 1 "ipvsadm -Ln --stats"
?經驗總結:在雙網卡架構中,務必關閉存儲網卡的ARP代理:
echo "net.ipv4.conf.ens37.proxy_arp = 0" >> /etc/sysctl.conf
拓撲示意圖:
[ 客戶端 ]|| (訪問 172.16.16.172)|
[ Director ]| || | (ens37: 192.168.7.0/24)| || [ NFS Server ]| (192.168.7.100)|| (調度流量)|
[Real Server1]--[Real Server2]--[Real Server3]--[Real Server4]
(172.16.16.131) (172.16.16.132) (172.16.16.133) (172.16.16.134)
?