LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
目录
一、核心原理与理论
二、背景与架构设计
三、全流程部署步骤
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)