LVS VS/DR 模式部署教程

环境信息

角色 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

架构图

20260702160353206-image

部署步骤

安装软件

# Director (10.211.55.3)
apt install -y ipvsadm

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

20260702161528219-image

配置 Real Server(两台都要执行)

配置 index.html 显示本机 IP

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

配置 Director (10.211.55.3)

开启 IP 转发

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

配置 VIP

ip addr add 10.211.55.100/32 dev enp0s5

配置 LVS 规则(rr 轮询)

# 创建虚拟服务
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

20260702162003582-image

验证负载均衡

⚠️ 注意:浏览器测试时所有请求可能打到同一台 RS

这是 HTTP Keep-Alive(长连接)导致的正常现象。浏览器默认使用 HTTP/1.1 长连接,第一次请求经过 LVS 分配到某台 RS 后,TCP 连接会保持复用。LVS 是四层(传输层)负载均衡,按连接调度而非按请求调度——同一条 TCP 连接内的所有 HTTP 请求都固定在同一台 RS。

从任意一台机器访问 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

预期结果(轮询交替):

20260702162134351-image

验证结果: 实际测试 4 次请求,交替返回 RS1 → RS2 → RS1 → RS2,LVS rr 轮询正常工作。

持久化配置

Director 持久化脚本

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

RS 持久化脚本

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
喜欢就支持一下吧
点赞8打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容