【无标题】

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势。

NAT模式,全称是网络地址转换模式。NAT模式下,负载均衡器(Director)会修改请求和响应的IP地址。客户端的请求先到达Director,Director将请求的目标地址改成后端真实服务器的地址,然后转发给后端服务器。后端服务器处理完请求后,将响应返回给Director,Director再将响应的源地址改回自己的虚拟IP(VIP),最后返回给客户端。这样的话,对于客户端来说,它只知道Director的地址,不知道后端服务器的存在。

DR模式,即直接路由模式。DR模式下,Director和后端服务器都配置了同一个虚拟IP地址。当客户端请求到达Director时,Director通过修改请求的目标MAC地址,将请求转发给选中的后端服务器。后端服务器处理请求后,直接通过自己的网络接口将响应返回给客户端,而不需要经过Director。这样响应数据可以直接从服务器到客户端,减少了Director的负担。

  1. NAT模式(Network Address Translation)

1.优势:

1.网络拓扑灵活:

2.后端服务器(Real Server)可使用私有IP地址,无需暴露公网IP。

3.支持跨子网部署,Real Server可位于不同网络环境中(如云服务器跨可用区)。

2.配置简单:

1.Real Server无需特殊配置,只需设置默认网关为Director(负载均衡器)。

2.无需修改Real Server的内核参数(如ARP抑制)。

3.安全性较高:

1.Real Server隐藏在Director后,对外不可见,避免直接暴露于公网。

4.支持端口映射:

1.Director可修改目标端口,实现灵活的端口转换(如将80端口请求转发到后端8080端口)。

5.适用场景:

1.中小规模流量场景。

2.需要跨子网或混合云部署。

3.对后端服务器安全性要求较高。

  1. DR模式(Direct Routing)

1.优势:

1.高性能与低延迟:

1.响应数据直接由Real Server返回客户端,无需经过Director,避免带宽瓶颈。

吞吐量高,适合高并发、大流量场景(如视频流、大规模Web应用)。

2.扩展性强:

1.Director仅处理入站请求,后端服务器数量增加时性能影响较小。

3.资源利用率高:

1.Real Server直接使用公网带宽,减轻Director的网络负载。

4.适用场景:

1.高并发、大流量场景(如电商大促、在线游戏)。

2.对吞吐量和延迟敏感的服务。

3.需充分利用Real Server的公网带宽。

以下是 NAT模式DR模式 的对比表格:

对比项 NAT模式 DR模式
工作层次 传输层(四层)或应用层(七层) 数据链路层(二层)或网络层(三层)
IP地址处理 修改目标/源IP(客户端IP→负载均衡器IP→后端IP) 仅修改目标MAC地址,IP地址保持不变
流量路径 请求和响应均经过负载均衡器 请求经过负载均衡器,响应直接返回客户端
性能 受限于负载均衡器带宽,吞吐量较低 高吞吐量,适用于高并发场景
网络结构 后端服务器通常位于私有网络 负载均衡器与服务器需在同一局域网(LAN)
后端服务器要求 可配置私有IP,无需公网路由 需配置公网IP或VIP,支持直接路由
配置复杂度 简单,适合小规模部署 复杂(需配置ARP抑制、VIP绑定等)
透明性 客户端感知负载均衡器IP,隐藏后端服务器 客户端直接收到后端响应,但IP仍为负载均衡器VIP
适用场景 中小规模、对性能要求不高 大规模高并发(如Web服务、CDN)
端口转换支持 支持(可修改目标端口) 不支持(保持原始端口)
服务器数量限制 受限于负载均衡器性能 可横向扩展更多服务器
优缺点 优点 :配置简单、隐藏后端; 缺点:性能瓶颈、扩展性差 优点 :高性能、扩展性强; 缺点:网络配置复杂

IP规划

  • Director
    • 公网IP(VIP):192.168.234.10
    • 内网IP(DIP):192.168.234.11
  • Real Server
    • 内网IP(RIP):192.168.234.14 和 192.168.234.15
  • 客户端
    • 公网IP:192.168.234.13

NAT模式配置步骤

1. 配置Real Server

在Real Server上安装Web服务,例如Nginx,并启动服务。

bash

复制

复制代码
yum install nginx -y
systemctl start nginx
systemctl enable nginx

创建测试页面并设置默认网关为Director的DIP。

bash

复制

复制代码
echo "web test page,ip is `hostname -I`" > /usr/share/nginx/html/index.html
route add default gw 192.168.234.11
2. 配置Director

安装LVS管理工具ipvsadm

bash

复制

复制代码
yum install ipvsadm -y

配置VIP和NAT规则。

bash

复制

复制代码
ifconfig eth0:1 192.168.234.10 netmask 255.255.255.255 up
ipvsadm --add-service --tcp-service 192.168.234.10:80 --scheduler rr
ipvsadm --add-server --tcp-service 192.168.234.10:80 --real-server 192.168.234.14:80 --masquerade
ipvsadm --add-server --tcp-service 192.168.234.10:80 --real-server 192.168.234.15:80 --masquerade

开启IP转发。

bash

复制

复制代码
echo 1 > /proc/sys/net/ipv4/ip_forward
3. 测试

从客户端访问VIP,检查是否能够轮询访问到不同的Real Server。

bash

复制

复制代码
curl 192.168.234.10

DR模式配置步骤

1. 配置Real Server

与NAT模式相同,安装Web服务并创建测试页面。

bash

复制

复制代码
yum install nginx -y
systemctl start nginx
systemctl enable nginx
echo "web test page,ip is `hostname -I`" > /usr/share/nginx/html/index.html

绑定VIP到dummy接口并配置ARP抑制。

bash

复制

复制代码
nmcli connection add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.234.10/32
vim /etc/sysctl.conf
# 添加以下内容
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
sysctl -p
2. 配置Director

安装ipvsadm并配置VIP和DR规则。

bash

复制

复制代码
yum install ipvsadm -y
ifconfig eth0:1 192.168.234.10 netmask 255.255.255.255 up
ipvsadm --add-service --tcp-service 192.168.234.10:80 --scheduler rr
ipvsadm --add-server --tcp-service 192.168.234.10:80 --real-server 192.168.234.14:80 --gatewaying
ipvsadm --add-server --tcp-service 192.168.234.10:80 --real-server 192.168.234.15:80 --gatewaying
3. 测试

与NAT模式相同,从客户端访问VIP并检查响应。

相关推荐
柯南二号14 分钟前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
dog25029 分钟前
难以超越的 TCP AIMD
网络协议·tcp/ip·php
我是哈哈hh34 分钟前
【Node.js】ECMAScript标准 以及 npm安装
开发语言·前端·javascript·node.js
檀越剑指大厂2 小时前
【Linux系列】如何在 Linux 服务器上快速获取公网
linux·服务器·php
Sammyyyyy2 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
William一直在路上3 小时前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习3 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前3 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔4 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
三千道应用题4 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf