LVS几种模式介绍

备注:这篇真的是水文,不看也罢。

LVS,linux virtual server,可提供IP网络层的负载均衡。

其主要模式主要有以下几种:

LVS-NAT  主要通过网络地址转换,修改目的IP实现。Network Address Translation

LVS-TUN  主要封装一层IP头 IP Tunneling

LVS-DR   主要是修改目的MAC  Direct Routing

LVS-FULLNAT   这个是阿里研发的一种模式,主要是解决多vlan的场景,它会修改请求报文的(源/目的)地址、(源/目的)端口。

先看几个LVS的名词定义:

        CIP:客户端ip

        Director:负载调度集群的主机,简称DR

        VIP:Virtual IP,向外提供服务的IP

        RIP:Real Server IP,内部真正提供服务的IP

        DIP:DR主机用于内部通信的IP

一个完整的经过LVS请求的都会涉及到上面几个角色。

1、LVS-NAT

流程示意图:

其请求处理流程:

1.客户端(Client)发送请求到LVS, 目标IP地址为VIP
2. LVS根据某种负载均衡算法选择一个Real-server,并记录连接信息到hash表中,然后修改客户端的request的目的IP地址为选择的RS(这个RIP只是内部通信用的),随后将请求发给RS,此时源IP为CIP,目的IP为RIP;
3. RS收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS,此时源IP为RIP,目的IP是CIP;
4. LVS收到reply包后,修改reply包的的源地址为VIP,原端口为VIP端口;
5. LVS将reply发送给客户端;
6. 客户端来的属于本次连接的包,查hash表,然后发给对应的RS;
7. 客户端发送完毕,此次连接结束时,LVS自动从hash表中删除此条记录;

上面流程的特点是:

1、DR和RS必须是在同一个网段内,RS的网关配置成DIP,RIP和DIP都是用于内网机器间通信的IP。我感觉说的直白点,RS的网关为DR;

2、所有请求响应都要经过DR,这必然会导致DR会成为整个网络的瓶颈。

2、LVS-TUN

1.客户端Client 发送request包到LVS服务器, 目标地址VIP;
2. LVS按照算法选择后端的一个Real-server,并将记录一条消息到hash表中,然后将客户端的request包封装到一个新的IP包里,新IP包的目的IP是RIP,源IP是DIP,然后转发给RS;
3. RS收到包后,解封装,取出客户端的request包,发现还有一个IP包,目的地址是VIP,而RS发现在自己的虚拟网卡tunl0上有这个IP地址,于是处理客户端的请求,处理完成通过虚拟网卡发送给eth0网口发送出去,此时源IP为VIP,目的地址是CIP;
4. 该客户端的后面的request包,LVS直接按照hash表中的记录直接转发给Real-server,当传输完毕或者连接超时,那么将删除hash表中的记录。

该模式中:

RIP,VIP,DIP都可以是公网地址,可以跨网段;

请求报文都走DR,响应不走,直接由RS发送给Client。这个特点使得TUN的性能要相比NAT提升了几倍,且解决了跨网段问题,问题就在于其维护成本挺高的;

3、LVS-DR

1、客户端Client 发送request包到LVS服务器, 目标地址VIP;
2、LVS根据负载均衡算法选择一台active的Realserver,将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里,因为是在数据链路层,所以必须在同一局域网;
3、RS在局域网中收到这个帧,拆开后发现目标IP不是自己的IP,正常来讲RS会抛弃的,但由于我们在lo上配置了VIP,所以RS会接收该请求包,并进行处理。

4、处理后,RS直接经过网络发送给客户端,源IP为VIP,目的IP为CIP。

LVS-DR技术解决了NAT的DR瓶颈问题,提高性能,但其最大限制就是DR和RIP必须是同一网段的,解决不料跨网段的问题。

4、LVS-FULLNAT

这个是阿里做的。

LVS的DR和NAT模式要求RS和DR在同一个vlan中,导致部署成本过高;TUN模式虽然可以跨vlan,但RealServer上需要部署ipip隧道模块等,网络拓扑上需要连通外网,较复杂,不易运维。

为了解决上述问题,开发出FULLNAT,该模式和NAT模式的区别是:数据包进入时,除了做DNAT,还做SNAT(用户ip->内网ip),从而实现LVS-RealServer间可以跨vlan通讯,RealServer只需要连接到内网。

整体流程:

        LVS和上联交换机间运行OSPF协议。当客户端请求到达上联交换机时,上联交换机通过ECMP等价路由,将数据流分发给LVS集群,LVS集群再转发给业务服务器;

OSPF协议是一种最短路经优先的协议,详情可以查询相关资料。之前在联通的时候学过很多各种路由协议,但时间久了就忘得差不多了。

当客户端访问VIP后,DR会将源IP改成DIP,目的IP改成RIP,RIP同样是通过某种均衡算法找的。

剩下的就是内网调用的事情了,可以是同网段,也可以是不同网段,至于不同Vlan如何通信,这个就不用多说了把,就是路由策略配置的问题了。

FULLNAT相对于之前那三种方式,可能不是完全集中缺点,但避开了他们的很多缺点,比如配置维护都很简单,可以跨网段。现在也是LVS主流的使用模式。

小米的lvs:

参考资料:

最强lvs总结

高并发场景 LVS 安装及高可用实现

LVS 负载均衡原理及安装配置详解

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

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

相关文章

JS封装网页进入/退出全屏功能,兼容各大主流浏览器

1、演示 2、封装进入全屏函数 mozRequestFullScreen:兼容Firefox webkitRequestFullscreen:兼容 Chrome、Safari、Opera msRequestFullscreen:兼容:IE/Edge const enter () > {const element document.documentElementif (el…

32-数据处理:如何高效处理应用程序产生的数据?

如何更好地进行异步数据处理。 一个大型应用为了后期的排障、运营等,会将一些请求数据保存在存储系统中 。例如:应用将请求日志保存到 Elasticsearch 中,方便排障;网关将 API 请求次数、请求消息体等数据保存在数据库中&#xff…

.net 6 swagger Failed to load API definition

为什么会出现这样的问题? 因为swagger用的是restful 规则同一个路径下面,只有一个Get、Post、Put 如果你控制器下面有多个HttpGet、HttpPost、HttpPut 请求就会报错 正确方式,在控制器上添加路由[Route("api/[controller]/[action]")] 或…

算法练习第四十二天|01背包问题、416. 分割等和子集

一些背包问题 01背包问题 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自…

蓝桥杯嵌入式学习笔记(9):RTC程序设计

目录 前言 1. RTC介绍 2. 使用CubeMx进行源工程配置 3. 代码编程 3.1 准备工作 3.2 进行bsp_rtc.h编写 3.3 进行bsp_rtc.c编写 3.4 main.c编写 3.4.1 头文件引用 3.4.2 变量声明 3.4.3 子函数声明 3.4.4 函数实现 3.4.5 main函数编写 4. 代码实验 5. 总结 前言 因本人备赛蓝…

如何使用 Python 本地客户端操作读写云服务器 Redis 缓存数据库详细教程(更新中)

Redis 基本概述 Redis(Remote Dictionary Server)是一个开源的使用 ANSI C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。它通常被称为数据结构服务器,因为值(value…

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查?

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查? 一、节点健康检查1、使用 kubectl 查看节点状态2、查看节点详细信息3、检查节点资源使用情况 2、Pod 健康检查2.1、 使用 kubectl 查看 Pod 状态2.2、 查看特定 Pod 的详细信息…

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 减缓热岛效应 D题 人机游戏中的数学模型 原题再现: 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力,使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可…

zabbix 7.0 新增功能亮点(一)——T参数

概要: T参数是zabbix7.0新增的一项功能,它支持对配置文件进行可用性验证,即zabbix程序(server/proxy/agent等)修改配置文件后,支持-T或–test-config参数验证配置参数可用性。 T参数主要包含以下三个方面的应用场景: …

解决Centos7无法连接网络和访问网页连接不上问题

一、网络无法连接问题 网络无法连接的问题我查到了一个很良心的操作,不用重装,因为可能是你虚拟机设置上的问题。我先写我的解决方案,再附上其他几种解决方案。 问题一: 虚拟机的问题****加粗样式 解决: (…

ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘

原因:torchvision模块在运行时要调用PIL模块的PILLOW_VERSION函数,但PILLOW_VERSION在Pillow 7.0.0之后的版本被移除了,Pillow 7.0.0之后的版本使用__version__函数代替PILLOW_VERSION函数。 解决方法:降低pillow版本即可。 参考…

人工智能应用工程师怎样报名,费用多少,就业机会怎么样?

人工智能应用工程师是能够利用人工智能相关技术进行应用研发,并开展各类工作的从业人员统称。为贯彻落实《国务院关于印发新一代人工智能发展规划的通知》、工业和信息化部《促进新一代人工智能产业发展三年行动计划(2018-2020年)》等文件精神…