一、实验环境规划

1.1 拓扑结构图

本次 LVS-DR 模式完整拓扑如下:

1.2 主机信息详细规划表

主机角色 主机名 物理网卡 IP VIP / 特殊配置 网关 业务角色
客户端 client 172.25.254.99/24 - 172.25.254.100 测试访问节点
路由器 router

eth0:172.25.254.100/24

eth1:192.168.0.100/24

- 外网网关 172.25.254.2 跨网段路由转发
LVS 调度器 lvs 192.168.0.50/24 lo:192.168.0.200/32(VIP) 192.168.0.100 负载均衡调度器
真实服务器 RS1 RS1 192.168.0.10/24 lo:192.168.0.200/32(VIP) 192.168.0.100 后端 Web 业务节点
真实服务器 RS2 RS2 192.168.0.20/24 lo:192.168.0.200/32(VIP) 192.168.0.100 后端 Web 业务节点

二、各节点 IP 配置

所有节点使用 RHEL9 默认的 NetworkManager 管理网络配置,修改配置文件后重载生效。

2.1 Client 客户端配置

NAT 网卡配置,网关指向路由器外网 IP:

# /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=172.25.254.99/24,172.25.254.100
method=manual

2.2 Router 路由器双网卡配置

外网 NAT 网卡 eth0:
# /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=172.25.254.100/24,172.25.254.2
dns=8.8.8.8;
内网仅主机网卡 eth1:
# /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1

[ipv4]
method=manual
address1=192.168.0.100/24

2.3 LVS 调度器配置

仅主机网卡 eth0:
# /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.0.50/24,192.168.0.100
回环网卡 lo(配置 VIP):
# /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.200/32

2.4 RS1/RS2 真实服务器配置(RS1 示例,RS2 仅 IP 不同)

仅主机网卡 eth0(RS1 示例):
# /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.0.10/24,192.168.0.100
回环网卡 lo(配置 VIP,RS1/RS2 配置相同):
# /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.200/32

2.5 所有节点 IP 配置生效命令

nmcli connection reload
nmcli connection up eth0
# 路由器额外重载外网网卡
nmcli connection up eth1

三、Router 路由器内核转发与 NAT 配置

路由器需要开启内核路由转发,并配置双向 SNAT,实现内外网网段互通。

3.1 开启内核 IP 转发

# 查看当前转发状态
sysctl -a | grep ipv4.ip_forward
# 默认输出 net.ipv4.ip_forward = 0

# 永久开启转发
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p
# 输出 net.ipv4.ip_forward = 1 即为成功

3.2 配置 iptables SNAT 策略

# 1. 内网网段访问外网时,源IP转换为路由器外网IP
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100

# 2. 外网访问内网时,源IP转换为路由器内网IP(确保回包正常)
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100

# 查看配置
iptables -t nat -L -n

四、RS1/RS2 节点 Web 服务与 ARP 抑制配置

4.1 部署 httpd 服务(区分 RS1/RS2 节点)

RS1 配置:
dnf install httpd -y
systemctl enable --now httpd
echo 192.168.0.10-RS1 > /var/www/html/index.html
# 本地验证服务
curl localhost
RS2 配置:
dnf install httpd -y
systemctl enable --now httpd
echo 192.168.0.20-RS2 > /var/www/html/index.html
# 本地验证服务
curl localhost

4.2 关键配置:RS 节点 ARP 抑制

DR 模式中,VS 和 RS 同时配置 VIP,若不做 ARP 抑制,会导致 ARP 广播冲突,客户端无法正确将请求发送到 VS。

配置永久 ARP 抑制(写入 sysctl.conf):
# RS1执行
echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf

# RS2执行相同配置
echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf

# 重载配置
sysctl -p
参数解析:
参数 配置值 作用
arp_ignore 1 仅当 ARP 请求的目标 IP 是接收网卡的本地 IP 时,才响应 ARP 请求
arp_announce 2 发送 ARP 请求时,优先使用与目标 IP 匹配的网卡 IP 作为源地址

!!!通俗理解:配置后,RS 节点不会响应任何针对 VIP 的 ARP 请求,只有 VS 会响应,确保所有客户端请求先抵达 VS 调度器。

临时生效方法(可选):
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

五、LVS 调度器 DR 模式策略配置

5.1 安装 ipvsadm 工具

dnf install ipvsadm -y

5.2 配置 DR 模式转发规则

# 1. 新增虚拟服务器VIP:80,调度算法为rr轮询
ipvsadm -A -t 192.168.0.200:80 -s rr

# 2. 添加RS1节点,-g表示DR模式(直接路由)
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g

# 3. 添加RS2节点,DR模式
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g

# 查看已配置规则
ipvsadm -Ln

5.3 配置成功输出

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0 

!!!Route标识代表当前为 DR 直接路由模式,报文仅修改二层 MAC 地址转发,三层 IP 不变。

六、最终负载均衡功能测试

切换到 Client 客户端,循环访问 VIP 地址,验证轮询效果:

for i in {1..10};do curl 192.168.0.200;done

测试结果

请求按 rr 轮询算法均匀分发到 RS1 和 RS2,响应交替出现:

192.168.0.20-RS2
192.168.0.10-RS1
192.168.0.20-RS2
192.168.0.10-RS1
192.168.0.20-RS2
192.168.0.10-RS1
192.168.0.20-RS2
192.168.0.10-RS1
192.168.0.20-RS2
192.168.0.10-RS1

至此,RHEL9.3 LVS-DR 模式完整实验部署完成

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐