一、LVS-DR 模式核心原理
1.1. DR 模式工作原理
LVS-DR(Direct Routing)模式通过 数据链路层(MAC 层) 实现负载均衡,其核心特点是 请求流量经过 Director,响应流量由 Real Server 直接返回客户端,从而突破 Director 的带宽瓶颈。以下是详细工作流程:
1.1.1.数据包流向分解
客户端发起请求
-
客户端发送 HTTP 请求到 VIP(Virtual IP),目标 MAC 地址为 Director 的 MAC。
-
关键点:客户端通过 ARP 协议解析 VIP 对应的 MAC 地址,此时应由 Director 响应 ARP 请求。
Director 处理入站请求
-
Director 接收请求后,根据负载均衡算法(如 wrr、lc)选择一个 Real Server。
-
修改数据帧:
-
保留原始 IP 包头(源 IP= 客户端 IP,目标 IP=VIP)。
-
仅修改目标 MAC 地址为选中的 Real Server 的 MAC 地址。
-
-
转发数据帧到选中的 Real Server。
Real Server 处理请求
-
Real Server 的网卡接收到目标 MAC 为本机的数据帧,检查目标 IP 是否为本地配置的 VIP:
- 由于 VIP 绑定在 Real Server 的 lo 接口(回环接口),操作系统认为该 IP 属于本机,接收并处理请求。
-
生成HTTP响应数据包:
-
源 IP=VIP,目标 IP= 客户端 IP。
-
直接通过默认网关(不经过 Director) 返回给客户端。
-
客户端接收响应
- 客户端收到响应,认为数据来自 VIP(对后端拓扑无感知)。
1.1.2.关键特性与优势
-
高性能:响应流量不经过 Director,避免回程流量成为瓶颈。
-
低延迟:Real Server 直接与客户端通信,减少中间跳数。
-
透明性:客户端仅感知 VIP,无需修改应用逻辑。
二、环境准备
硬件与网络拓扑
-
架构图示例:Director + 多台 Real Server(同局域网)。
-
网络要求:所有节点需在同一物理网络(不支持跨路由)。
软件依赖
-
Director:ipvsadm。
-
Real Server:Web服务(如 Nginx)、VIP 配置工具。
IP规划示例
-
VIP:192.168.67.200
-
Director IP:192.168.67.50
-
Real Server IP:
-
RS1:192.168.67.10
-
RS2:192.168.67.20
-
-
Router IP:
-
内网:192.168.67.100
-
外网:192.168.13.100
-
-
Client IP:192.168.67.200

三、详细配置步骤
3.1.配置环境 IP
IP 规划根据上图,Router 需要两块网卡,需要打开内核路由,实现通信。其他主机根据规划的 IP 配置,网关指向规定的位置。
Client 需要吧网络适配器改为仅主机模式,Router 需要增加一块仅主机模式的网络适配器。

各主机配置相应的 IP
Client 主机网关指向 Router 外网仅主机接口
Director 和 RS1/2 主机网关指向 Router 内网 NAT 接口
3.1.1.Client
bash
# ens160 需要用 ip a 命令看自己主机的网卡名字进行设置
# Client 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.13.200/24 ipv4.gateway 192.168.13.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
3.1.2.Router
bash
# Router 主机配置 IP
ip addr add 192.168.67.100/24 dev ens192 # 新网卡添加 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.100/24 ipv4.gateway 192.168.67.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
# 打开内核路由,实现通信
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 # 12行改为=1
# 使内核参数更改立即生效
sysctl -p

3.1.3.Director
需要在 Director,RS1,RS2 主机的环回接口上都添加同样的 VIP,VIP 是一个 IP 地址,所以子网要是 /32
bash
# Director 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.50/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo
3.1.4.RS1
bash
# RS1 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.10/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo
3.1.5.RS2
bash
# RS2 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.20/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo
3.1.6.添加 Hosts 解析(可不做)
添加 Hosts 解析是为了让 Director 主机做的 LVS 策略能够快速保存 save,要做 Hosts 解析,每个主机都需要做。
bash
echo >> /etc/hosts << EOF
192.168.13.200 client
192.168.13.100 router
192.168.67.100 router
192.168.67.50 director
192.168.67.10 rs1
192.168.67.20 rs2
EOF
3.2.配置服务
3.2.1.Real Server 节点配置 Nginx 服务
安装 Nginx 服务,配置 Nginx
bash
yum install nginx -y
# 为便于查看结果,在 RS1 和 RS2 上设置不同的 Nginx 访问界面
echo rs1 - 192.168.67.10 > /usr/share/nginx/html/index.html # RS1
echo rs1 - 192.168.67.10 > /usr/share/nginx/html/index.html # RS2
systemctl enable --now nginx # 开启 Nginx 服务
3.2.2. Real Server 节点配置 ARP 抑制
原理
① ARP 问题的根源
在 DR 模式中,Director 和所有 Real Server 都配置了相同的 VIP。若未做特殊处理,会导致以下问题:
ARP 响应冲突
- 当客户端广播 ARP 请求解析 VIP 的 MAC 地址时,Director 和所有 Real Server 都可能响应,导致客户端记录的 VIP MAC 地址不稳定。
数据包环路
- Real Server 可能直接收到目标 MAC 为本机的客户端请求(绕过 Director),破坏负载均衡逻辑。
② ARP 抑制的解决方案
通过调整 Linux 内核的 ARP 响应行为,确保:
-
只有 Director 响应 VIP 的 ARP 请求。
-
Real Server 忽略针对 VIP 的 ARP 请求,仅在处理本机服务时使用 VIP。
内核参数 | 作用 | 推荐值(DR模式) |
---|---|---|
arp_ignore | 控制是否响应 ARP 请求的条件: | 1 |
arp_announce | 控制 ARP 通告(宣告)的 IP 地址选择策略: | 2 |
arp_ignore 详解
-
定义:控制是否响应 ARP 请求的严格级别。
-
关键值说明:
-
0(默认):只要本地任意接口有该 IP,就响应 ARP 请求。
-
1:仅在 ARP 请求的目标 IP 配置在接收 ARP 请求的接口上时,才响应。
-
DR 模式配置逻辑:
-
将 VIP 绑定在 Real Server 的 lo 接口(非物理接口)。
-
设置 arp_ignore=1,使得当物理接口(如eth0)收到针对 VIP 的 ARP 请求时,因 VIP 不在该接口上,Real Server 不响应。
-
只有 Director 的 lo 接口配置 VIP,正常响应 ARP 请求。
arp_announce 详解
-
定义:控制发送 ARP 通告时使用的源 IP 地址选择策略。
-
关键值说明:
-
0(默认):允许使用任意本地接口的 IP 作为 ARP 通告的源 IP。
-
2:优先选择与目标 IP 在同一子网的本地接口 IP,且避免使用非本地主 IP。
-
DR 模式配置逻辑:
-
设置 arp_announce=2,防止 Real Server 在发送 ARP 通告或响应时,错误地使用 VIP 作为源 IP。
-
确保 Real Server 的物理接口仅通告其真实 IP,而非 VIP。
配置
bash
# RS1 和 RS2 都需要设置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ARP 抑制永久生效(可不做)
bash
echo >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
EOF
# sysctl -p 设定
sysctl -p
3.2.3.Director 节点配置 LVS 服务
安装 ipvsadm 服务,配置策略
bash
yum install ipvsadm -y
ipvsadm -A -t 192.168.67.200:80 -s wrr
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.10:80 -g -w 1
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.20:80 -g -w 2
ipvsadm -Ln

四、测试(Client 访问)
测试结果:本次测试成功验证了 LVS 加权轮询算法的准确性与权重配置的有效性,表明集群能够按预设比例(1:2)合理分配请求负载。

总结
-
DR 模式适用场景
- 高性能 Web 服务、对延迟敏感的业务。
-
优缺点总结
-
优点:吞吐量高、响应速度快。
-
缺点:配置复杂、需同局域网。
-