0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

负载均衡能否能直接从LVS打到站点层

开关电源芯片 来源:码海 作者:坤哥 2021-08-17 10:29 次阅读

上一篇负载均衡的文章有一个点不少人有疑问,所以我觉得有必要单独写篇文章解释一下,先看下上篇文章展示的架构图:

4b41a5ba-fe81-11eb-9bcf-12bb97331649.png

这里一些朋友的疑问点是 Nginx 是否多此一举,能否能直接从 LVS 打到站点层?即改成下面的架构

4b567bb6-fe81-11eb-9bcf-12bb97331649.jpg

答案是不行,为什么?其实我在上文中有提到一些点已经暗示了,只不过不那么明显而已,我再单独把这些点拎出来

LVS 是四层负载均衡器

Nginx 是七层负载均衡器,可以根据 url 来转发流量

首先我们需要明白为什么根据 url 转发请求这么重要,假设现在有「营销」,「运营中心」这两个集群,使用 Nginx 的话很简单,根据 url 来决定到底将请求转发到哪个集群即可

4b8463a0-fe81-11eb-9bcf-12bb97331649.jpg

由于 LVS 不能根据 url 转发,那么请问 LVS 收到请求后该转给谁

那么 LVS 为什么不能根据 url 来转发呢,因为它是四层负载均衡器,什么是四层和七层,这里就要简单复习下 ISO 七层参考模型了

4bb55438-fe81-11eb-9bcf-12bb97331649.jpg

由此可知,七层对应着应用层,四层对应着传输层,如果从应用层发起一个请求会在「传输层」,「网络层」,「数据链路层」分别加上各自层的包头,比如现在 A 电脑要发一个「I‘m Deepon」数据给 B 电脑,则在各层的转化流程如下图所示

4bd51fca-fe81-11eb-9bcf-12bb97331649.jpg

但最终在互联网上要传输的包(数据链路层传输的包叫祯,统称为包)是有大小限制的,如下图所示

4be74f60-fe81-11eb-9bcf-12bb97331649.jpg

在互联网上传输的包不能超过 14 + 20 + 20 + 1460 + 4 = 1518 byte,其中包含的应用层(即 payload)数据一次性不能超过 1460 个 byte,也就是说如果一个 HTTP 请求有 2000 byte,那么它必须分成两个包发送才能在网络上传输,再来看看 HTTP 的格式

4bf14718-fe81-11eb-9bcf-12bb97331649.jpg

如果一个 HTTP POST 请求很大,超过了 1460 byte(一个包 payload 的最大值),那么它必须分成两个包才能传输,也就意味着一个包可能包含 URI,另一个包不包含 URI,既然包都不包含 URI,那么请问 LVS 如何根据 URL 来转发给相应的集群呢,所以理解了 TCP/IP 的工作机制相信你不难理解开头的问题:LVS 是四层负载均衡器,无法根据 URL 来转发请求。

其实最关键的原因是四层以下其实只负责包的转发,只要拿出包头查看一下 ip 地址就可知道该转发哪里,很高效,如果你还要根据 url 来匹配那么需要拿到应用层数据根据正则等做匹配,显然会消耗更多的性能,所以专业的人做专业的事,应该由 LVS 来负责承载所有流量,Nginx 负责根据 url 来转发给对应的集群,因为它是七层负载均衡器,与上下游各建立了一个 TCP 链接

4c088f04-fe81-11eb-9bcf-12bb97331649.jpg

所以如果有多个分包,由于 Nginx 与 client 建立了 TCP 连接,可以在 Nginx 先拿到 client 发出的所有的分包再组装成完整的报文, 然后根据 url 选择其中一台 server 与之建立 TCP 连接后将数据分批完整地传给上游 server

另外需要注意的是现在在大厂中如果只将 Nginx 作为转发之用是不够的,一般用的 OpenResty ,什么是 OpenResty 呢

“OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 的目标是让你的 Web 服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。”

注意上面一句「提供了与 MySQL ,Redis 等的交互能力」这一点非常关键,我们之前不是说 Nginx 可以根据 url 来决定打向哪个集群吗,假设现在有一个这样的场景:所有包含 operation 的请求都转发到运营中心的集群,则需要写死类似如下的配置

upstream backend {

server 192.168.1.10:8080

server 192.168.1.11:8080

}

server {

location /operation {

proxy_pass http://backed

}

}

在我们集团中类似这样的规则非常多,难道要像上面这样把所有的规则都一个个写死在 Nginx 的配置文件里吗?显然不可行,更合理的方式是把这些规则(哪个 url 对应哪些集群)保存在 MySQL 中,然后 Nginx 在启动的时候将这些规则从 MySQL 中取出并保存在 Redis 及本地缓存中,然后 Nginx 要根据 url 匹配的时候从本地缓存(如果没有从 redis 拿,redis 过期从 MySQL 拿)里拿这些规则再根据匹配项转发到相应的集群,Nginx 没有这样的能力,而 OpenResty 由于集成了 Lua,引入了与 MySQL, Redis 等交互的模块,所以用它是可行的,所以最终架构如下(将 Nginx 换成 OpenResty)

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 负载均衡
    +关注

    关注

    0

    文章

    112

    浏览量

    12368
  • LVS
    LVS
    +关注

    关注

    1

    文章

    36

    浏览量

    9953

原文标题:再谈负载均衡

文章出处:【微信号:gh_3980db2283cd,微信公众号:开关电源芯片】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    常见的lvs负载均衡算法

    常见的lvs负载均衡算法包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)、基于局部性的最少链接(LBLC)、带复制的LBLC(LBLCR)、目标地址散列(DH)、源地址
    的头像 发表于 12-12 13:50 94次阅读

    负载均衡服务器与服务器如何连接?

    负载均衡服务器与服务器如何连接?负载均衡服务器与服务器可通过多种方式连接,包括直接连接、交换机连接、路由器连接以及云计算环境中的连接。小型网
    的头像 发表于 12-09 13:41 123次阅读

    常用的服务器负载均衡多少钱一台?

    服务器负载均衡的价格因配置、功能、类型(硬件、软件或云服务)及服务提供商不同而异。硬件负载均衡价格区间大,数千元到数十万元不等;软件
    的头像 发表于 12-05 11:52 85次阅读

    多链路负载均衡设置在哪里?

    多链路负载均衡设置涉及交换机、路由器和(可选)负载均衡器的设置。首先规划网络拓扑和IP地址,备份设备配置。然后,在交换机上配置VLAN和Trunk链路,在路由器上配置接口、路由协议和策
    的头像 发表于 11-13 10:19 135次阅读

    nginx负载均衡配置介绍

    目录 nginx负载均衡 nginx负载均衡介绍 反向代理与负载均衡 nginx
    的头像 发表于 11-10 13:39 253次阅读
    nginx<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>配置介绍

    华纳云:什么是负载均衡?优化资源利用率的策略

    负载均衡是现代计算机网络架构中不可或缺的一部分,它通过智能分配请求和任务,确保系统资源的高效利用。本文将探讨负载均衡的概念、工作原理、优化资源利用率的策略及其在实际应用中的重要性。 1
    的头像 发表于 10-28 16:07 170次阅读

    天翼云弹性负载均衡介绍

    负载均衡(Load Balancing)是一种优化资源分配的技术,主要用于在网络环境中分散工作负载,以提高系统的响应速度、吞吐量以及可靠性。在互联网服务中,当单台服务器无法处理大量并发请求时,就需要
    的头像 发表于 10-25 16:20 592次阅读
    天翼云弹性<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>介绍

    IPVS负载均衡原理解析

    ipvs (IP Virtual Server) 实现了传输负载均衡,也就是我们常说的4LAN交换,作为 Linux 内核的一部分。ipvs运行在主机上,在真实服务器集群前充当
    的头像 发表于 10-24 17:34 231次阅读

    零基础也可以搞懂负载均衡怎么配置!

    负载均衡怎么配置?在Linux中配置负载均衡器的步骤涉及多个环节,包括选择负载均衡软件、安装
    的头像 发表于 10-12 15:58 251次阅读

    负载均衡是什么意思?盘点常见的三种方式

    负载均衡是什么意思?负载均衡(LoadBalancing)是一种计算机技术,主要用于在多个计算资源(如服务器、虚拟机、容器等)中分配和管理负载
    的头像 发表于 09-29 14:30 288次阅读

    负载均衡服务由几部分组成?分别是什么

    均衡服务通常由六部分组成,分别是客户端、负载均衡器、后端服务器、负载均衡算法、监控和健康检查及会话保持。这六者互相协同工作,实现了流量的有效
    的头像 发表于 09-18 11:16 275次阅读

    基于LVS+Keepalived实现高可用负载均衡

    LVS 是一种预装在 Linux 系统中,基于四、具有强大性能的反向代理服务器。ipvsadm 是 LVS 的命令行管理工具。
    的头像 发表于 04-09 12:30 1190次阅读
    基于<b class='flag-5'>LVS</b>+Keepalived实现高可用<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    视频网站服务器的四种负载均衡技术

    域名并返回多个服务器的IP地址列表,客户端会根据DNS返回的IP地址进行请求。这种方式简单易用,但无法直接控制请求的分配,且存在DNS缓存问题。另外,由于DNS解析的缓存时间,可能导致负载均衡。 2、硬件
    的头像 发表于 04-01 17:36 648次阅读

    是德科技与英特尔携手完成负载均衡单节点2100万连接新建性能测试

    2024年1月18日,是德科技(Keysight Technologies,Inc.)与英特尔携手完成负载均衡产品单节点2100万连接新建性能测试。英特尔提供软硬件结合优化的四负载
    的头像 发表于 01-18 14:11 629次阅读
    是德科技与英特尔携手完成<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>单节点2100万连接新建性能测试

    负载均衡器的诞生和工作机制

    今天我们来深度揭秘一下负载均衡LVS 的秘密,相信大家看了你管这破玩意儿叫负载均衡?这篇文章后,还是有不少疑问,比如
    的头像 发表于 01-04 12:26 1012次阅读
    <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器的诞生和工作机制