四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队

导读

本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出四层负载均衡器的NAT模型和DR模型的工作原理。通过本文可以了解到四层负载均衡的技术特点、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的优缺点。读者可以重点关注NAT模型到DR模型演进的原因(一种技术的诞生肯定是为了弥补现有技术的不足)。除此之外,读者可以多多关注一些基本的、底层的知识,比如内核空间、用户空间、计算机网络等。 为了叙述方便,文中将"四层负载均衡器" 简称为"FLB" (Four-tier Load Balancer)。

一、FLB在网络中的基本拓扑

FLB工作在OSI七层网络参考模型的第四层(传输控制层),FLB上必须具备两个IP地址,VIP和DIP。VIP是暴露给客户端的访问地址;DIP是FLB的分发IP,将数据包通过DIP所在的网卡发送给后端的真实提供服务的服务器(后面简称"RS"(Real Server)),如下图。

其中CIP为客户端的ip,RIP为RS的ip。

二、四层负载均衡技术的特点

由于FLB工作在传输控制层,因此它对数据包的处理(转发)总是运行在内核态,不会产生内核态和用户态的切换。

虽然FLB工作在传输控制层,但是它并不会和client进行三次握手,它只是"偷窥"数据包中的ip地址和端口号,然后根据配置的规则进行数据包的转发,速度极快。

三、提出问题

在图1中,如果client发送数据包最终到达server1,由于client数据包的目的ip为VIP,当server1收到数据包时,发现数据包的目的ip竟然不是自己的ip,那岂不会丢弃数据包?

四、NAT模型

NAT(Network Address Translation)模型,针对3中的问题,可以在FLB中增加对客户端的目的地址vip的地址转换,将vip转换成后端某一RS的ip,然后再将数据包发送出去,详细的网络拓扑如图2。

需要注意的是,上面的后端的server的默认网关需要配置成负载均衡服务器的地址。这样server响应的数据包才能回到负载均衡服务器上。

NAT模型的弊端

很明显的一点是,在做NAT地址转换时,会消耗负载均衡服务器cpu的算力。大多数情况下,client向server请求的数据报文很小,而server向client响应的数据报文很大,这就是"非对称 "的。在通过NAT的方式实现负载均衡时,client请求报文和server返回的数据报文都要经过负载均衡服务器进行网络地址转换,如果请求的并发流量很大,那么大量并发的响应报文返回到FLB时,负载均衡服务器的网络带宽就会成为瓶颈

五、DR(Direct Route)模型

直接路由模式可以解决NAT模型的两个弊端。DR模式不经过NAT地址转换,而是将server端返回的数据包的源ip直接写成VIP发送出去。这其中涉及到几个要点:

  • 由于server返回的数据包的源ip要写成vip,而不是rip,那么在server本地需要配置vip。并且这个vip必须是对外隐藏的,也就是说外界(客户端、负载均衡器)不能直接访问到server中的vip,而是必须访问负载均衡器暴露的vip。
  • 在负载均衡器中,接收到client的数据包的源ip是cip,目的ip是负载均衡器暴露的vip,那么负载均衡器如何才能将该数据包发送给server呢?(由于server的vip是隐藏的,负载均衡服务器只能看到rip)。在DR模式中,是通过MAC地址欺骗的方式来实现。负载均衡服务器接收到client的请求数据包之后,将目的MAC地址替换为后端某一台server1的MAC地址(替换之前,目的MAC地址为负载均衡器的MAC地址),然后将数据包发送出去,进行点到点通信,这样server1就收到了client的数据包。 点对点通信依赖的是MAC地址(数据链路层)。
  • 基于上述内容:要实现负载均衡器和后端server点对点通信,因此约束了:负载均衡服务器的DIP和后端的server必须在同一个机房(局域网)。

根据上面的推导,DR模型的基本网络拓扑如图3所示。

在RS中如何配置VIP,如何实现VIP隐藏?且听下回分解:LVS DR模型实验搭建与验证。

作者:京东物流 伍泓全

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

相关推荐
LKAI.27 分钟前
搭建Elastic search群集
linux·运维·elasticsearch·搜索引擎
青木沐2 小时前
Jenkins介绍
运维·jenkins
WTT00113 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋33 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中3 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭4 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
BUG 4044 小时前
Linux——Shell
linux·运维·服务器
大霞上仙4 小时前
Linux 多命令执行
linux·运维·服务器
冷心笑看丽美人4 小时前
探索 Samba 服务器:搭建跨平台文件共享的桥梁
运维·服务器