您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

四层负载均衡的 NAT 模型与 DR 模型推导

时间:2023-08-28 13:53:57  来源:京东云开发者  作者:

导读

 

本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出四层负载均衡器的 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)),如下图。

图 1 FLB 的基本网络拓扑图

其中 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。

图 2 FLB 的 NAT 模型的基本网络拓扑图

需要注意的是,上面的后端的 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 所示。

图 3 FLB 的 DR 模型的基本网络拓扑图

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

 

作者:京东物流 伍泓全
来源:京东云开发者社区 自猿其说 Tech 转载请注明来源


Tags:负载均衡   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
三分钟学会负载均衡的重要性与Ribbon集成
在这个充满挑战和收获的60天学习之旅中,你将迅速提升成为一名全栈工程师。专注于Spring Boot框架,我们将深入研究高级特性,从项目初始化到微服务架构,再到性能优化和持续集成部...【详细内容】
2024-03-11  Search: 负载均衡  点击:(26)  评论:(0)  加入收藏
C++编程实践:IP哈希负载均衡算法
Nginx是一个高性能的开源Web服务器和反向代理服务器,它可以有效地处理高并发的请求。 下面是Nginx处理高并发的一些主要特点和技术: 事件驱动模型:Nginx使用事件驱动的异步非...【详细内容】
2023-12-11  Search: 负载均衡  点击:(191)  评论:(0)  加入收藏
Nginx的负载均衡实现,你学会了吗?
环境 主机 ip 用途 软件 web1 192.168.50.60 nginx-1 httpd web2 192.168.50.61 nginx-2 httpd proxy 192.168.50.62 负载...【详细内容】
2023-12-06  Search: 负载均衡  点击:(145)  评论:(0)  加入收藏
负载均衡在大规模分布式系统中的应用:解决性能瓶颈
随着互联网的快速发展,大规模分布式系统在各行各业得到了广泛应用。这些系统需要处理大量的请求和数据,面临着性能瓶颈的挑战。负载均衡作为一种关键的技术手段,可以帮助大规模...【详细内容】
2023-11-14  Search: 负载均衡  点击:(298)  评论:(0)  加入收藏
常见的负载均衡算法及其适用场景
负载均衡是指将请求分发到多个服务器上,以实现负载的均衡,提高系统的性能和可靠性。在云计算、大数据等领域,负载均衡技术已经成为了重要的研究方向。本文将介绍常见的负载均衡...【详细内容】
2023-11-13  Search: 负载均衡  点击:(198)  评论:(0)  加入收藏
云计算中的负载均衡技术:实现弹性和可伸缩性
云计算作为一种新型的计算模式,已经成为了许多企业和个人的首选。在云计算中,负载均衡技术起着至关重要的作用,它可以实现系统的弹性和可伸缩性,确保系统能够应对不断变化的负载...【详细内容】
2023-11-13  Search: 负载均衡  点击:(82)  评论:(0)  加入收藏
SpringCloud OpenFeign整合Ribbon实现负载均衡及源码分析
负载均衡器在分布式网络中扮演着非常重要的角色。通过负载均衡,可以实现更好的性能和可靠性,同时提高系统的可扩展性和弹性。目前,SpringCloud体系中,主要使用的有两种:Netflix的...【详细内容】
2023-11-09  Search: 负载均衡  点击:(235)  评论:(0)  加入收藏
Nacos有几种负载均衡策略?
Nacos 作为目前主流的微服务中间件,包含了两个顶级的微服务功能:配置中心和注册中心。1、配置中心扫盲配置中心是一种集中化管理配置的服务,通俗易懂的说就是将本地配置文件“...【详细内容】
2023-11-01  Search: 负载均衡  点击:(215)  评论:(0)  加入收藏
深入剖析Netflix Ribbon:分布式微服务架构的负载均衡神器
作者 | 波哥审校 | 重楼在现代分布式微服务架构中,负载均衡是保证系统高可用、高性能的关键组件之一。Netflix Ribbon作为Netflix开源的负载均衡库,为微服务架构提供了强大的...【详细内容】
2023-11-01  Search: 负载均衡  点击:(220)  评论:(0)  加入收藏
Kubernetes使用OkHttp客户端进行网络负载均衡
在一次内部Java服务审计中,我们发现一些请求没有在Kubernetes(K8s)网络上正确地实现负载均衡。导致我们深入研究的问题是HTTP 5xx错误率的急剧上升,由于CPU使用率非常高,垃圾收集...【详细内容】
2023-10-30  Search: 负载均衡  点击:(261)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条