| 角色 | IP | 主机名 | 密码 |
|---|---|---|---|
| Director(负载均衡器) | 10.211.55.3 | Debian1 | vagrant |
| Real Server 1 | 10.211.55.4 | Debian2 | vagrant |
| Real Server 2 | 10.211.55.5 | Debian3 | vagrant |
| VIP(虚拟 IP) | 10.211.55.100 | — |
架构图

# Director (10.211.55.3)
apt install -y ipvsadm
# RS1 / RS2 (10.211.55.4 / 10.211.55.5)
apt install -y nginx

配置 Real Server(两台都要执行)
RS1 (10.211.55.4):
cat > /var/www/html/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>RS1 - 10.211.55.4</title></head>
<body style="font-family: Arial; text-align: center; margin-top: 100px;">
<h1>Real Server 1</h1>
<h2 style="color: #2196F3;">10.211.55.4</h2>
<p>LVS 负载均衡测试 - 后端服务器 1</p>
</body>
</html>
EOF
systemctl restart nginx
RS2 (10.211.55.5):
cat > /var/www/html/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>RS2 - 10.211.55.5</title></head>
<body style="font-family: Arial; text-align: center; margin-top: 100px;">
<h1>Real Server 2</h1>
<h2 style="color: #4CAF50;">10.211.55.5</h2>
<p>LVS 负载均衡测试 - 后端服务器 2</p>
</body>
</html>
EOF
systemctl restart nginx
配置 ARP 抑制 + lo:0 VIP
为什么需要 ARP 抑制?
LVS DR 模式下,Director 和 RS 共享同一个 VIP。如果不抑制 ARP,RS 也会响应 VIP 的 ARP 请求,导致 Client 直接访问 RS 而绕过 Director。arp_ignore=1 让 RS 只响应目标 IP 是本机接口 IP 的 ARP 请求,arp_announce=2 让 RS 用接口 IP 而非 VIP 发送 ARP 响应。
cat >> /etc/sysctl.conf << 'EOF'
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
EOF
sysctl -p
ip addr add 10.211.55.100/32 dev lo:0
开启 IP 转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
ip addr add 10.211.55.100/32 dev enp0s5
# 创建虚拟服务
ipvsadm -A -t 10.211.55.100:80 -s rr
# 添加后端 Real Server(-g = DR 模式)
ipvsadm -a -t 10.211.55.100:80 -r 10.211.55.4:80 -g
ipvsadm -a -t 10.211.55.100:80 -r 10.211.55.5:80 -g
# 查看规则
ipvsadm -L -n

验证负载均衡
注意:浏览器测试时所有请求可能打到同一台 RS
这是 HTTP Keep-Alive(长连接)导致的正常现象。浏览器默认使用 HTTP/1.1 长连接,第一次请求经过 LVS 分配到某台 RS 后,TCP 连接会保持复用。LVS 是四层(传输层)负载均衡,按连接调度而非按请求
从任意一台机器访问 VIP:
for i in 1 2 3 4 5 6; do curl -s -H "Connection: close" http://10.211.55.100 | grep -o '10.211.55.[45]'; done
预期结果(轮询交替):

cat > /etc/systemd/system/lvs-setup.service << 'SERVICEEOF'
[Unit]
Description=LVS DR setup
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipvsadm-restore < /etc/ipvsadm.rules
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
SERVICEEOF
# 保存规则
ipvsadm-save > /etc/ipvsadm.rules
systemctl enable lvs-setup
cat > /etc/systemd/system/rs-vip.service << 'SERVICEEOF'
[Unit]
Description=Real Server VIP setup
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/ip addr add 10.211.55.100/32 dev lo:0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
SERVICEEOF
systemctl enable rs-vip
# 查看 LVS 规则
ipvsadm -L -n
# 查看连接统计
ipvsadm -L -n -c
# 清空所有规则
ipvsadm -C
# 保存规则
ipvsadm-save > /etc/ipvsadm.rules
# 恢复规则
ipvsadm-restore < /etc/ipvsadm.rules
# 查看 VIP
ip addr show | grep 10.211.55.100
| 现象 | 可能原因 | 排查命令 |
|---|---|---|
| curl VIP 超时 | RS 未抑制 ARP | cat /proc/sys/net/ipv4/conf/all/arp_ignore |
| 只有一台 RS 响应 | RS 的 lo:0 VIP 未配置 | ip addr show lo |
| Director 本机 curl VIP 不通 | LVS 不过本地回环 | 从其他机器测试 |
| 连接都到同一台 RS | 调度算法非 rr | ipvsadm -L -n 查看 Scheduler |
广告:
THE END













暂无评论内容