1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。
LVS(Linux Virtual Server)的 NAT 模式 和 DR 模式是两种主流的负载均衡实现方式,各有其适用场景和优缺点。以下是它们的核心对比:
1. NAT 模式(Network Address Translation)
工作原理:
- 请求流程:客户端请求到达负载均衡器(Director),Director 修改目标 IP 为后端 Real Server 的 IP,转发请求;Real Server 响应时需经过 Director,由 Director 将源 IP 改回虚拟 IP(VIP)后返回客户端。
- 网络要求 :Real Server 通常使用私有 IP,且网关需指向 Director。
模式特点:
集群节点,必须在一个网络中
真实服务器必须将网关指向负载调度器
RIP 通常都是私有 IP,仅用于各个集群节点通信
负载调度器必须位于客户端和真实服务器之间,充当网关
支持端口映射
2. DR 模式(Direct Routing)
工作原理:
- 请求流程:Director 仅修改请求帧的 MAC 地址,直接将请求转发给 Real Server;Real Server 处理后直接响应客户端(不再经过 Director)。
- 网络要求:Director 和 Real Server 需在同一物理网络(二层互通),Real Server 需配置 VIP 并抑制 ARP 响应。
- 所有集群节点RS必须和Director在相同的物理网段(即同一个局域网中);
2)所有客户端入站(而不是出站)请求由Director首先接收,并转发给集群节点RS;
3)集群节点RS通常来说最好带外部IP,而不使用Director及某固定机器作为默认网关,以便将数据包直
接回复给客户端计算机,且不会产生回包的瓶颈;
4)所有集群节点RS上必须在lo网卡上绑定VIP地址,以便验证通过目的IP非RS的数据包;
5)由于所有集群节点RS上必须在lo网卡上绑定VIP地址,因此,带来arp问题,即集群节点RS默认会相
应发往Director VIP的数据包。因此要对所有集群节点RS做ARP抑制处理,把响应VIP的请求交给LVS
Director;
6)很多操作系统都可以用在集群内部的RS真实服务器上只要该操作系统能够实现ARP隐藏,如:
Windows,linux,unix;
7)LVS/DR模式不需要开启调度器转发功能,这点和LVS/NAT模式是不同的。
8)LVS/DR Director(服务器数量100台)可以比LVS-NAT Director(服务器数量10-20台)承受更多的
并发请求和转发更多的服务器数量。
对比总结
特性 | NAT 模式 | DR 模式 |
---|---|---|
性能 | 低(响应需经 Director) | 高(响应直达客户端) |
网络要求 | 支持跨网段部署 | 必须同一二层网络 |
端口映射 | 支持 | 不支持 |
安全性 | 高(后端隐藏) | 较低(后端暴露 VIP) |
配置复杂度 | 简单 | 复杂(需 ARP 抑制) |
适用场景 | 中小规模、私有网络环境 | 高并发、低延迟场景(如 CDN、大流量) |
选择建议
- NAT 模式:适合对灵活性要求高、规模较小或需跨网段部署的场景(如测试环境或内网服务)。
- DR 模式:适合追求极致性能、高吞吐量的生产环境(如 Web 服务、API 网关)。
实际应用中,DR 模式更常见于大型互联网服务,而 NAT 模式多用于需简化部署的场景。若需更高容错性,可结合 Keepalived 实现 Director 的高可用。
2. 基于 openEuler 构建 LVS-DR 群集。
1
nmcli connection add type dummy ifname dummy2 ipv4.method manual ipv4.addresses 192.168.234.137/32
yum install ipvsadm -y
ipvsadm -Ln
ipvsadm -At 192.168.234.137:80 -s rr
ipvsadm -at 192.168.234.137:80 -r 192.168.234.140:80 -g
ipvsadm -at 192.168.234.137:80 -r 192.168.234.141:80 -g
ipvsadm -Ln
curl 192.168.234.140
systemctl stop firewalld
2
yum install -y nginx
echo "web test page,ip is `hostname -I`." > /usr/share/nginx/html/index.html
systemctl enable --now nginx
curl localhost
nmcli connection add type dummy ifname dummy2 ipv4.method manual ipv4.addresses 192.168.234.137/32
ip a
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.dummy2.arp_ignore = 1
net.ipv4.conf.dummy2.arp_announce = 2
systemctl stop firewalld
curl 192.168.234.140
3
yum install -y nginx
echo "web test page,ip is `hostname -I`." > /usr/share/nginx/html/index.html
systemctl enable --now nginx
curl localhost
nmcli connection add type dummy ifname dummy2 ipv4.method manual ipv4.addresses 192.168.234.137/32
ip a
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.dummy2.arp_ignore = 1
net.ipv4.conf.dummy2.arp_announce = 2
systemctl stop firewalld
curl 192.168.234.140