LVS-DR (Direct Routing, 直接路由) 是 Linux Virtual Server (LVS) 三种工作模式中性能最高、生产环境最常用 的四层负载均衡方案。它通过二层 MAC 地址改写实现请求分发,响应包直接由后端服务器返回客户端,彻底规避调度器带宽瓶颈。
一、核心原理与特点
核心思想 :请求进调度器,响应直连客户
- 架构角色
- Director (调度器):对外暴露 VIP,接收并分发请求。
- Real Server (RS, 真实服务器):处理业务,直接响应客户端。
- VIP (Virtual IP):集群统一入口 IP,Director 与所有 RS 共享。
- 数据流向
- 客户端 → Director
- 包:源 IP=CIP, 目标 IP=VIP, 目标 MAC=Director MAC
- Director → RS
- 仅改写:源 MAC=Director, 目标 MAC = 选中 RS
- IP 地址完全不变(CIP → VIP)
- RS 处理
- RS 收到包,发现目标 IP 是本机 lo 上的 VIP,接收并处理。
- RS → 客户端
- 响应包:源 IP=VIP, 目标 IP=CIP
- 直接从 RS 物理网卡发出,不经过 Director
- 客户端 → Director
- 关键特性
- 同网段强制 :Director 与所有 RS 必须在同一物理二层网络(同一交换机)。
- VIP 共享 :Director 配置在物理网卡,RS 配置在 lo 回环接口。
- ARP 抑制 :RS 必须禁止响应 VIP 的 ARP(
arp_ignore=1, arp_announce=2),否则 IP 冲突。 - 无端口映射:Director 与 RS 服务端口必须一致(如都 80)。
- 性能最优 :仅二层转发,调度器无回传流量,支持10 万 + 并发。
二、部署步骤(CentOS/RHEL)
环境示例
- VIP:
192.168.1.100 - Director (DIP):
192.168.1.10 - RS1 (RIP):
192.168.1.20 - RS2 (RIP):
192.168.1.21
1. Director 配置
1.1 安装工具
bash
运行
systemctl stop firewalld
setenforce 0
modprobe ip_vs
yum install -y ipvsadm keepalived
1.2 配置 VIP
bash
运行
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
# 编辑 ifcfg-ens33:0
DEVICE=ens33:0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.255 # 关键:32位掩码
ONBOOT=yes
ifup ens33:0
1.3 配置 LVS 规则
bash
运行
ipvsadm -C # 清空
# 添加VIP服务(-s wrr=加权轮询)
ipvsadm -A -t 192.168.1.100:80 -s wrr
# 添加RS(-g=DR模式)
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g -w 1
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.21:80 -g -w 1
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm
1.4 内核参数(可选)
bash
运行
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
sysctl -p
2. Real Server 配置(所有 RS 执行)
2.1 配置 VIP 到 lo
bash
运行
# 临时生效
ip addr add 192.168.1.100/32 dev lo label lo:0
# 永久
echo "ip addr add 192.168.1.100/32 dev lo label lo:0" >> /etc/rc.local
chmod +x /etc/rc.local
2.2 强制 ARP 抑制(核心)
bash
运行
vi /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
sysctl -p
- arp_ignore=1 :只响应目标 IP 是本机物理网卡的 ARP。
- arp_announce=2:不宣告 lo 上的 VIP 到网络。
2.3 关闭路由转发
bash
运行
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
sysctl -p
三、验证与管理
bash
运行
# 查看规则
ipvsadm -Ln
# 查看连接状态
ipvsadm -Lnc
# 测试
curl http://192.168.1.100
四、优缺点
- 优点
- 性能最强:无回传流量,调度器无瓶颈。
- 延迟低:二层转发,响应直连。
- 配置清晰:RS 网关无需指向 Director。
- 缺点
- 不支持跨网段:Director 与 RS 必须同局域网。
- 不支持端口映射:端口必须统一。
- ARP 抑制必须正确,否则不通。
五、适用场景
- 高并发 Web、API、游戏服务
- 电商秒杀、直播、大流量入口
- 追求极致性能的四层负载均衡
六、与 NAT 模式对比
表格
| 特性 | LVS-DR | LVS-NAT |
|---|---|---|
| 转发层级 | 二层(MAC) | 三层(IP) |
| 回传流量 | RS 直连 | 必须经 Director |
| 性能 | 最高 | 中等(调度器瓶颈) |
| 跨网段 | ❌ 必须同网段 | ✅ 支持跨网段 |
| 端口映射 | ❌ 不支持 | ✅ 支持 |
| 生产首选 | ✅ 是 | ❌ 较少 |