【无标题】

对比 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并检查响应。

相关推荐
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982073 天前
PHP 扩展——从入门到理解
php
鹏仔先生4 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
LDR0064 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术4 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园4 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob4 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享4 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.4 天前
C语言--day30
c语言·开发语言