就是要你懂负载均衡--lvs和转发模式

本文希望阐述清楚LVS的各种转发模式,以及他们的工作流程和优缺点,同时从网络包的流转原理上解释清楚优缺点的来由,并结合阿里云的slb来说明优缺点。

如果对网络包是怎么流转的不太清楚,推荐先看这篇基础:程序员的网络知识 -- 一个网络包的旅程,对后面理解LVS的各个转发模式非常有帮助。

几个术语和缩写

cip:Client IP,客户端地址
vip:Virtual IP,LVS实例IP
rip:Real IP,后端RS地址
RS: Real Server 后端真正提供服务的机器
LB: Load Balance 负载均衡器
LVS: Linux Virtual Server
sip: source ip
dip: destination

LVS的几种转发模式

  • DR模型 -- (Director Routing-直接路由)
  • NAT模型 -- (NetWork Address Translation-网络地址转换)
  • fullNAT -- (full NAT)
  • ENAT --(enhence NAT 或者叫三角模式/DNAT,阿里云提供)
  • IP TUN模型 -- (IP Tunneling - IP隧道)

DR模型(Director Routing--直接路由)

如上图所示基本流程(假设 cip 是200.200.200.2, vip是200.200.200.1):

  1. 请求流量(sip 200.200.200.2, dip 200.200.200.1) 先到达 LVS
  2. 然后LVS,根据负载策略挑选众多 RS中的一个,然后将这个网络包的MAC地址修改成这个选中的RS的MAC
  3. 然后丢给交换机,交换机将这个包丢给选中的RS
  4. 选中的RS看到MAC地址是自己的、dip也是自己的,愉快地手下并处理、回复
  5. 回复包(sip 200.200.200.1, dip 200.200.200.2)
  6. 经过交换机直接回复给client了(不再走LVS)

我们看到上面流程,请求包到达LVS后,LVS只对包的目的MAC地址作了修改,回复包直接回给了client。

同时还能看到多个RS和LVS都共用了同一个IP但是用的不同的MAC,在二层路由不需要IP,他们又在同一个vlan,所以这里没问题。

RS上会将vip配置在lo回环网卡上,同时route中添加相应的规则,这样在第四步收到的包能被os正常处理。

优点:

  • DR模式是性能最好的一种模式,入站请求走LVS,回复报文绕过LVS直接发给Client

缺点:

  • 要求LVS和rs在同一个vlan;
  • RS需要配置vip同时特殊处理arp;
  • 不支持端口映射。

为什么要求LVS和RS在同一个vlan(或者说同一个二层网络里)

因为DR模式依赖多个RS和LVS共用同一个VIP,然后依据MAC地址来在LVS和多个RS之间路由,所以LVS和RS必须在一个vlan或者说同一个二层网络里

DR 模式为什么性能最好

因为回复包不走LVS了,大部分情况下都是请求包小,回复包大,LVS很容易成为流量瓶颈,同时LVS只需要修改进来的包的MAC地址。

DR 模式为什么回包不需要走LVS了

因为RS和LVS共享同一个vip,回复的时候RS能正确地填好sip为vip,不再需要LVS来多修改一次(后面讲的NAT、Full NAT都需要)

总结下 DR的结构

绿色是请求包进来,红色是修改过MAC的请求包

NAT模型(NetWork Address Translation - 网络地址转换)

nat模式的结构图如下:

基本流程:

  1. client发出请求(sip 200.200.200.2,dip 200.200.200.1)
  2. 请求包到达lvs,lvs修改请求包为(sip 200.200.200.2, dip rip)
  3. 请求包到达rs, rs回复(sip rip,dip 200.200.200.2)
  4. 这个回复包不能直接给client,因为rip不是VIP会被reset掉
  5. 但是因为lvs是网关,所以这个回复包先走到网关,网关有机会修改sip
  6. 网关修改sip为VIP,修改后的回复包(sip 200.200.200.1,dip 200.200.200.2)发给client

优点:

  • 配置简单
  • 支持端口映射(看名字就知道)
  • RIP一般是私有地址,主要用户LVS和RS之间通信

缺点:

  • LVS和所有RS必须在同一个vlan
  • 进出流量都要走LVS转发
  • LVS容易成为瓶颈
  • 一般而言需要将VIP配置成RS的网关

为什么NAT要求lvs和RS在同一个vlan

因为回复包必须经过lvs再次修改sip为vip,client才认,如果回复包的sip不是client包请求的dip(也就是vip),那么这个连接会被reset掉。如果LVS不是网关,因为回复包的dip是cip,那么可能从其它路由就走了,LVS没有机会修改回复包的sip

总结下NAT结构

注意这里LVS修改进出包的(sip, dip)的时候只改了其中一个,所以才有接下来的full NAT。当然NAT最大的缺点是要求LVS和RS必须在同一个vlan,这样限制了LVS集群和RS集群的部署灵活性,尤其是在阿里云这种对外售卖的公有云环境下,NAT基本不实用。

full NAT模型(full NetWork Address Translation-全部网络地址转换)

基本流程(类似NAT):

  1. client发出请求(sip 200.200.200.2 dip 200.200.200.1)
  2. 请求包到达lvs,lvs修改请求包为(sip 200.200.200.1, dip rip) 注意这里sip/dip都被修改了
  3. 请求包到达rs, rs回复(sip rip,dip 200.200.200.1)
  4. 这个回复包的目的IP是VIP(不像NAT中是 cip),所以LVS和RS不在一个vlan通过IP路由也能到达lvs
  5. lvs修改sip为vip, dip为cip,修改后的回复包(sip 200.200.200.1,dip 200.200.200.2)发给client

优点:

  • 解决了NAT对LVS和RS要求在同一个vlan的问题,适用更复杂的部署形式

缺点:

  • RS看不到cip(NAT模式下可以看到)
  • 进出流量还是都走的lvs,容易成为瓶颈(跟NAT一样都有这个问题)

为什么full NAT解决了NAT中要求的LVS和RS必须在同一个vlan的问题

因为LVS修改进来的包的时候把(sip, dip)都修改了(这也是full的主要含义吧),RS的回复包目的地址是vip(NAT中是cip),所以只要vip和rs之间三层可通就行,这样LVS和RS可以在不同的vlan了,也就是LVS不再要求是网关,从而LVS和RS可以在更复杂的网络环境下部署。

为什么full NAT后RS看不见cip了

因为cip被修改掉了,RS只能看到LVS的vip,在阿里内部会将cip放入TCP包的Option中传递给RS,RS上一般部署自己写的toa模块来从Options中读取的cip,这样RS能看到cip了, 当然这不是一个开源的通用方案。

总结下full NAT的结构

注意上图中绿色的进包和红色的出包他们的地址变化

那么到现在full NAT解决了NAT的同vlan的要求,基本上可以用于公有云了,但是还是没解决进出流量都走LVS的问题(LVS要修改进出的包)

那么有没有一个方案能够像full NAT一样不限制lvs和RS之间的网络关系,同时出去的流量跟DR模式一样也不走LVS呢?

阿里云的ENAT模式(enhence NAT)

优点:

  • 不要求LVS和RS在同一个vlan
  • 出去的流量不需要走LVS,性能好

缺点:

  • 集团实现的自定义方案,需要在所有RS上安装ctk组件(类似full NAT中的toa)

基本流程:

  1. client发出请求(cip,vip)
  2. 请求包到达lvs,lvs修改请求包为(vip,rip),并将cip放入TCP Option中
  3. 请求包根据ip路由到达rs, ctk模块读取TCP Option中的cip
  4. 回复包(RIP, vip)被ctk模块截获,并将回复包改写为(vip, cip)
  5. 因为回复包的目的地址是cip所以不需要经过lvs,可以直接发给client

ENAT模式在内部也会被称为 三角模式或者DNAT/SNAT模式

为什么ENAT的回复包不需要走回LVS了

因为之前full NAT模式下要走回去是需要LVS再次改写回复包的IP,而ENAT模式下,这件事情在RS上被ctk模块提前做掉了

为什么ENAT的LVS和RS可以在不同的vlan

跟full NAT一样

总结下 ENAT的结构

最后说一下不太常用的 TUN模型

IP TUN模型(IP Tunneling - IP隧道)

基本流程:

  1. 请求包到达LVS后,LVS将请求包封装成一个新的IP报文
  2. 新的IP包的目的IP是某一RS的IP,然后转发给RS
  3. RS收到报文后IPIP内核模块解封装,取出用户的请求报文
  4. 发现目的IP是VIP,而自己的tunl0网卡上配置了这个IP,从而愉快地处理请求并将结果直接发送给客户

优点:

  • 集群节点可以跨vlan
  • 跟DR一样,响应报文直接发给client

缺点:

  • RS上必须安装运行IPIP模块
  • 多增加了一个IP头
  • LVS和RS上的tunl0虚拟网卡上配置同一个VIP(类似DR)

DR模式中LVS修改的是目的MAC

为什么IP TUN不要求同一个vlan

因为IP TUN中不是修改MAC来路由,所以不要求同一个vlan,只要求lvs和rs之间ip能通就行。DR模式要求的是lvs和RS之间广播能通

IP TUN性能

回包不走LVS,但是多做了一次封包解包,不如DR好

总结下 IP TUN的结构

图中红线是再次封装过的包,ipip是操作系统的一个内核模块。

DR可能在小公司用的比较多,IP TUN用的少一些,相对而言接下来的三种比较类似,用的也比较多,他们之间的可比较性很强,所以放在一块了。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 环境 crontab+shell+sqlplus 调用oracle 存储过程实现数据同步

需求背景:与第三方厂商合作使用sql_loadv1.0进行数据加载,他们负责推数,我拉数。 执行流程: 1.ODS推数--------》sftp服务器 2.拉数--------》sftp服务器 3.将数据文件解析到临时表中 4.将临时表中的数据通过【存储过程】同步到目…

JVM-SANDBOX:从阿里精准测试走出的开源贡献奖

阿里妹导读:稳定性是历年双11的技术质量保障核心。从 2016 年开始淘宝技术质量部潜心修行,创新地研发了一套实时无侵入的字节码增强框架,于是「JVM-SANDBOX」诞生了,并且顺手在 MTSC 大会上拿了开源贡献奖,今天&#x…

EMR Spark Runtime Filter性能优化

背景 Join是一个非常耗费资源耗费时间的操作,特别是数据量很大的情况下。一般流程上会涉及底层表的扫描/shuffle/Join等过程, 如果我们能够尽可能的在靠近源头上减少参与计算的数据,一方面可以提高查询性能,另一方面也可以减少资源的消耗(网…

集齐最后一块拼图,全栈Serverless时代正式开启

近日腾讯云正式发布国内首个Serverless数据库新品——PostgreSQL for Serverless。相比普通云上数据库,该数据库能够最快1秒完成部署,成本降低70%。这款新型数据库将为数百万开发者带来更灵活的业务开发模式、更快捷的上云体验,以及更大空间的…

Java-所有类型的Class对象

public class Test04 {public static void main(String[] args) {Class c1 Object.class; // 类Class c2 Comparable.class; // 接口Class c3 String[].class; // 一位数组Class c4 int[][].class; // 二维数组Class c5 Override.class; // 注解Class c6 ElementType.cla…

oracle 数据库_操作事项_05

文章目录1. 目标表2. 临时表3. 日志表4. 配置表5. 用户查询6. 配置数据声明:请使用oralce用户登录plsq操作 1. 目标表 与ODS(数据仓库)约定的表模型,把表结构在数据进行初始化 2. 临时表 把目标表复制一份,将表名统…

分布式服务架构下的混沌工程实践

本文来自阿里巴巴高可用架构团队高级开发工程师肖长军(花名穹谷)在 GIAC(全球互联网架构大会)上的分享,包含三部分内容:(阿里巴巴中间件公众号对话框发送“混沌工程”,获取分享PPT&a…

甲骨文提供免费HR工具,助力客户保障员工安全

为了帮助抗击疫情,甲骨文将为现有Oracle人力资本管理云(Oracle HCM Cloud)客户免费提供员工健康和安全(Workforce Health and Safety)解决方案,帮助客户管理主要工作场所的健康和安全问题,并轻松…

数据加载约定表模型变更_08

需求背景:与ODS约定表模型为6张表,现在临时为了满足业务需求新增一张表模型。 表模型变更场景分析: 1》表模型新增 2》表模型表名调整 3》表模型字段新增或者删除 4》表型字段类型调整 文章目录一、前置准备1.1. 设计新增目标表结构1.2. 设计…

Java-类加载内存分析

没有听懂 public class Test05 {public static void main(String[] args) {A a new A();System.out.println(A.m);/*1. 加载到内存&#xff0c;会产生一个类对应Class对象2. 链接&#xff0c; 链接结束后 m 03. 初始化<clinit>(){System.out.println("A类静态代码…

小谈CDN回源函数计算的应用场景

CDN团队联合函数计算团队近期推出了一个全新功能&#xff0c;即通过CDN把回源流量指向函数计算进行处理&#xff0c;该功能旨在帮助CDN用户能通过函数计算快速处理和便捷处理回源数据为目的&#xff0c;用户仅仅需要在CDN回源地址填写函数计算的自定义域名即可把请求转发到函数…

只需12 个步骤,就能在AWS中创建自定义VPC,用过都惊了!

作者| Kunal Yadav译者 | 天道酬勤 责编| 徐威龙封图| CSDN下载于视觉中国在本文中&#xff0c;作者将创建一个具有公共子网和私有子网的自定义VPC。每个子网中都有一个EC2实例&#xff08;已安装WordPress&#xff09;。亚马逊VPC图标公共子网中的实例可以通过互联网访问&…

阿里前端委员会主席圆心:未来前端的机会在哪里?

阿里妹导读&#xff1a;在近期举办的行业大会上&#xff0c;阿里前端技术委员会主席&#xff0c;淘系技术部资深总监圆心发表了《前端路上的思考》的演讲&#xff0c;分别从前端的发展历程、今天的机会、如何引领新技术、前端价值这四个方面进行深入探讨。流年笑掷&#xff0c;…

数据装载服务器_操作事项_06

文章目录一、数据装载前置准备1.1. 切换用户1.2. 生成文件二、手动触发2.1. 拉取文件2.2.文件数据加载2.3. 数据查询2.4. 数据查询三、定时调度3.1. 添加任务3.2. 配置频次3.3. 重新加载3.4. 总览任务列表3.5. 监控是否执行一、数据装载前置准备 1.1. 切换用户 切换用户为ora…

Java-分析类初始化

public class Test06 {static {System.out.println("Main类被加载");}public static void main(String[] args) throws ClassNotFoundException {// 1. 主动引用 // Son son new Son();/* 结果Main类被加载父类被加载子类被加载*/// 反射也会产生主动引用 //…

阿里云人脸识别公测使用说明

概述 之前阿里云人脸识别只提供人脸检测&#xff0c;人脸属性及人脸对比三个API接口&#xff0c;关于这方面的介绍及使用细节&#xff0c;可以参考阿里云人脸识别使用流程简介&#xff0c;之前使用的服务地址为&#xff1a;dtplus-cn-shanghai.data.aliyuncs.com。目前新版本加…

Flowable 数据库表结构 ACT_ID_USER

用户信息表( act_id_user ) 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√主键IDREV_乐观锁int√乐观锁VersionFIRST_姓nvarchar(255)√LAST_名nvarchar(255)√EMAIL_EMAIL_nvarchar(255)√PWD_密码nvarchar(255)√PICTURE_ID_图片IDnvarchar(64)√

安卓应用开发顶级框架大盘点,总有一款适合你

作者 | Slava Vaniukov译者 | 苏本如&#xff0c;责编 | 夕颜封图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09;随着软件开发向移动应用的转变&#xff0c;越来越多的企业意识到&#xff0c;移动应用程序对于企业和客户之间建立牢固的联系至关重要。这…

蚂蚁金服王旭:开源的意义是把社区往前推进一步

互联网技术发展速度之快是所有从业者甚至非从业者都能感受到的。尤记得在世纪之交时&#xff0c;那时候互联网刚刚在中国开始向民用普及&#xff0c;不说支撑大规模的网站访问量的相关技术&#xff0c;就连 Linux、负载均衡甚至都没有被普遍使用。而在二十年之后&#xff0c;云…

Java-类加载器-类运行时结构-。。。。

https://www.bilibili.com/video/BV1p4411P7V3?p16 获取注解信息 https://www.bilibili.com/video/BV1p4411P7V3?p11 https://www.bilibili.com/video/BV1p4411P7V3?p12 https://www.bilibili.com/video/BV1p4411P7V3?p13 https://www.bilibili.com/video/BV1p4411P7V3?p1…