【无标题】

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

相关推荐
LCY13326 分钟前
kotlin中的list set map整理
开发语言·kotlin·list
安静的次元27 分钟前
Rust语言学习
开发语言·学习·rust
消失的旧时光-194331 分钟前
浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
android·开发语言·flutter·react native·跨平台
焦糖码奇朵、40 分钟前
Matlab:二维绘图篇——plot绘图命令(二)
开发语言·windows·matlab·信息与通信
stark张宇42 分钟前
PHP多版本共存终极填坑指南:一台服务器部署多实例的最佳实践
后端·php
C++ 老炮儿的技术栈1 小时前
vector和list的区别是什么
开发语言·c++·笔记·学习
kanhao1001 小时前
【C++学习】Makefile 栈大小设置:正确位置分析
开发语言·c++·学习
军训猫猫头2 小时前
82.RadioButton的选中处理逻辑 C#例子 WPF例子
开发语言·c#·wpf
idMiFeng2 小时前
6.5840 Lab 3: Raft
开发语言·qt
人类群星闪耀时2 小时前
回溯法经典练习:组合总和的深度解析与实战
开发语言·python