【无标题】

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

相关推荐
皓月盈江38 分钟前
Linux电脑本机使用小皮面板集成环境开发调试WEB项目
linux·php·web开发·phpstudy·小皮面板·集成环境·www.xp.cn
格林威1 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
橙子199110161 小时前
在 Kotlin 中什么是委托属性,简要说说其使用场景和原理
android·开发语言·kotlin
androidwork2 小时前
Kotlin Android LeakCanary内存泄漏检测实战
android·开发语言·kotlin
学地理的小胖砸2 小时前
【Python 基础语法】
开发语言·python
DanB244 小时前
Java笔记4
java·开发语言·笔记
Dddle14 小时前
C++:this指针
java·c语言·开发语言·c++
studyer_domi4 小时前
Matlab 234-锂电池充放电仿真
开发语言·matlab
yuanpan4 小时前
.net/C#进程间通信技术方案总结
开发语言·c#·.net
吃面不喝汤664 小时前
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
开发语言·qt