您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

全网最详细的负载均衡原理图 [网站源码]

  • 时间:2022-07-08 02:11 编辑: 来源: 阅读:288
  • 扫一扫,手机访问
摘要:全网最详细的负载均衡原理图 [网站源码]
负载均衡来源于业务早期,我们通常使用单台服务器对外提供服务。 随着业务流量越来越大,单个服务器再怎么优化,硬件再好,总会有一个性能天花板。当单个服务器的性能无法满足业务需求时,就需要组成多台服务器的集群系统来提高整体的解决方案性能。 基于以上需求,我们需要使用统一的流量入口对外提供服务。本质上,我们需要一个流量调度器,通过一个均衡的算法,将客户的大量请求均衡地分发到集群中的不同服务器上。 其实这就是我们今天要讲的:负载均衡。 使用负载均衡可以给我们带来几个好处:提高系统的整体性能;提高系统的可扩展性;提高了系统的可用性;负载均衡类型一般来说,负载均衡器可以分为三类,包括:DNS负载均衡、硬件负载均衡和软件负载均衡。 (一)DNS负载均衡DNS负载均衡是最基本最简单的方式。 一个域名通过DNS解析成多个IP,每个IP对应一个不同的服务器实例,从而完成流量调度。虽然没有使用传统的负载平衡器,但是实现了简单的负载平衡功能。 通过镜像DNS进行负载均衡的方法最大的优点是实现简单,成本低,不需要自己开发或维护负载均衡设施。但是,也有一些缺点,比如延迟的服务器故障转移和不方便的服务器更新。 我们知道,在DNS和客户之间有多层缓存,即使它在出现故障时被DNS及时修改或< Typo id = " Typo-577 " data-origin = " Remove " ignore tag = " true " >:Remove 不平衡流量调度:粒度 DNS调度的平衡与区域运营商LocalDNS返回IP列表的策略有关。一些运营商不轮询以返回多个不同的IP地址。 另外,一个运营商的LocalDNS后面服务了多少客户,也会构成流量调度不均衡的一个重要因素。 流量分配策略过于简单,支持的算法太少。 一般DNS只支持rr轮询,流量分配策略比较简单,不支持权重、哈希等调度算法。 DNS支持的IP列表是有限的。 我们知道DNS使用UDP报文进行信息传输,每个UDP报文的大小受到链路MTU的限制,所以报文中存储的IP地址数量也非常有限。阿里DNS系统支持同一个域名配置10个不同的IP地址。 实际上,这种方法很少用于生产环境中实现负载平衡,毕竟它有明显的缺点。 本文之所以描述DNS负载均衡,是为了更清楚地解释负载均衡的概念。 BAT这样的公司,一般都是用DNS来实现地理层面的全局负载均衡,实现就近访问,提高访问速度。这种方法一般是入口流量的基本负载均衡,下层会有更专业的负载均衡设施实现的负载架构。 (二)硬件负载均衡硬件负载均衡是一种专用的负载均衡设施,通过专门的硬件设施实现负载均衡功能。 目前,业界有两种典型的硬件负载均衡设施:F5和A10 这些设施功能强大,但价格非常昂贵。一般只有土豪才能用。中小公司一般买不起,业务量也没那么大。使用这些设备是没有用的。 硬件负载均衡的优点:功能强大:全面支持各级负载均衡和全面的负载均衡算法。 强大的性能:性能远远超过常见的软件负载均衡器。 稳定性高:商用硬件负载均衡,通过了良好的严格测试,大规模使用后稳定性高。 安全防护:还具有防火墙、DDoS攻击防御、SNAT支持等安全功能。 硬件负载均衡的缺点也很明显:价格高;扩展性差,无法扩展和定制;调试维护麻烦,需要专业人员;(3)软件负载均衡软件负载均衡,可以在普通服务器上运行负载均衡软件,实现负载均衡功能。 目前常用的有Nginx、HAproxy、LVS。 区别:Nginx:七层负载均衡,支持HTTP和E-mail协议,也支持四层负载均衡;HAproxy:支持七层法则,性能也很好。 OpenStack默认使用的负载均衡软件是HAproxy;LVS:它运行在内核模式,在软件负载均衡方面的性能是最高的。严格来说,它是三层工作的,所以比较通用,不太适用于各种应用服务。 软件负载均衡的优点:操作简单:部署和维护都相对简单;便宜:只要需要服务器的成本,软件免费;灵活:可根据业务特点选择4层和7层负载均衡,方便扩展和定制。 负载均衡LVS软件负载均衡主要有Nginx,HAproxy,LVS,都是常用的。 基本上,LVS将用于四层负载平衡。据了解,BAT等大厂商都是LVS的重度用户,由于其优异的性能,可以为公司节省巨额成本。 Linux虚拟服务器(Linux Virtual Server)全称Linux Virtual Server,是由中国公民张博士发起的开源项目,在社会上有很大的知名度。它是基于四层的反向代理服务器,具有很强的性能。 现在是标准内核的一部分,具有可靠性、高性能、可扩展性、可操作性等特点,以低成本达到最佳性能。 netfilter LVS的基本原理是Linux内核中基于netfilter框架的负载均衡功能,所以在学习LVS之前需要简单了解netfilter的基本工作原理。 Netfilter其实很复杂。通常我们说的Linux防火墙是netfilter,但我们通常操作的是iptables,它只是在客户空间编写和交付规则的工具。真正管用的是netfilter。 netfilter的工作机制可以通过下图简单理解:image.pngnetfilter是一种内核态的Linux防火墙机制。作为通用框架,它提供了一套完整的hook功能管理机制,提供了包过滤、网络地址转换、基于协议类型的连接跟踪等功能。 简单来说,netfilter提供了一种机制,可以在数据包流动的过程中,根据规则设置若干检查点(hook函数)来执行相关操作。 Netfilter总共有五个点,包括:路由、输入、转发、输出、POSTROUTINGPREROUTING:刚进入网络层,还没有经过路由搜索的数据包。这里输入:通过route-searched确定发往本机的数据包,这里转发:route-searched后,要转发的数据包,POST_ROUTING前,输出:刚从本地进程发出的数据包,通过这里,POSTROUTING:路由查找后,已经进入网络层,即将离开设施的数据包,确定要转发。通过这里,当一个数据包进入网卡时,会通过链路层进入网络层后到达预路由,然后根据目的IP地址进行路由查找。如果目标IP是本地的,则继续将数据包投递到输入端,通过协议栈后,根据端口将数据发送到相应的应用程序。 应用程序解决请求后,将响应包发送到输出,最后经过POSTROUTING后送出网卡。 如果目标IP不在本地,并且服务器开启了forward参数,那么它会将数据包传递给FORWARD,最后经过POSTROUTING后送出网卡。 LVS基本原理LVS基于netfilter框架,主要作用于输入链。在输入端注册ip_vs_in钩子函数,执行IPVS的主进程。大致原理如图:image.png,客户访问www.sina.com.cn时,客户数据经过层层网络,最终通过交换机进入LVS服务器网卡,再进入内核网络层。 进入PREROUTING后,目的VIP被确定为本地IP地址。因此,当数据包进入输入链时,LVS在输入链上工作。根据接入的IP:Port判断该请求是否为LVS服务。如果是,它将通过LVS主进程,强制修改数据包的相关数据,并将数据包发送到POSTROUTING链。 在POSTROUTING上收到数据包后,根据目的IP地址(后台真实服务器),最终通过路由将数据包发送到后台的服务器。 开源的LVS版本有三种工作模式,每种模式的工作原理都不一样,每种模式都有各自的优缺点和不同的应用场景,包括以下三种模式:DR模式NAT模式隧道模式。这里有必要提一下,还有一种模式是FullNAT,这是开源版本没有的。 这种模式最早源于百度,后来在阿里发扬光大。由阿里团队开源,代码地址如下:alibaba/lvsLVS官网也有相关下载地址,但没有合并到内核主线版本。 后面会有专门一章详细介绍。全自动模式。 灾难恢复、NAT和隧道模式的原理详述如下。 LVS的基本原理图中描述了DR模式实现的原理,这是一个总流程。 下面将重点介绍DR模式的具体实现原理,并给出详细说明 实际上,图像是最常用的工作模式,因为它具有强大的性能。 下面尝试用一个请求和响应数据流的过程来描述DR模式的工作原理(一)实现原理的过程①当客户端请求www.sina.com.cn主页时,请求包通过网络到达新浪的LVS服务器网卡:源IP是客户端的IP地址CIP,目的IP是新浪外部服务器的IP地址,即VIP;此时,源MAC地址是CMAC,实际上是连接到LVS的路由器的MAC地址(为了便于理解,标为CMAC),目的MAC地址是VIP对应的MAC,标为VMAC。 ②数据包通过链路层到达预路由位置(刚进入网络层)。经过路由搜索,发现目的IP是LVS的VIP,会投递到输入链。此时,数据包的MAC、IP和端口还没有被修改。 ③数据包到达输入链,输入是LVS的主要工作位置。 此时,LVS将根据目的IP和端口确认它是否是LVS定义的服务。如果是定义好的VIP业务,它会根据配置信息从真实的服务器列表中选择一个作为RS1,然后以RS1为目标找到out方向的路由,确定出跳信息和发送数据包要经过的网卡。 最后,数据包被传送到输出链。 ④数据包经过POSTROUTING链后,从网络层转到链路层,目的MAC地址改为RealServer服务器的MAC地址,记为RMAC;;而源MAC地址改为LVS和RS同一网段的selfIP对应的MAC地址,记为DMAC。 此时,数据包通过交换机转发到RealServer服务器(注意:为简单起见,图中未显示交换机)。 ⑤请求包到达后台真实服务器后,链路层检查的目的MAC就是它的网卡地址。 到网络层,找到路由,目的IP是VIP (VIP配置在LO上),确定为本地主机的数据包通过协议栈复制到应用程序(如nginx服务器)。nginx响应请求后,会生成一个响应数据包。 然后用CIP找出方向上的路由,确定下一跳信息,发送网卡设备信息。 此时,数据包的源IP和目的IP分别为VIP和CIP,而源MAC地址为RS1的RMAC,目的MAC为下一跳(路由器)的MAC地址,命名为CMAC (CMAC,便于理解)。 然后数据包通过与RS相连的路由器转发给真实用户,完成请求响应的全过程。 从整个过程可以看出,DR模式下LVS的逻辑比较简单,数据包直接路由转发到后台服务器,响应数据包直接由RS服务器发送给用户,不经过LVS。 我们知道请求包通常很小,响应包很大,经过LVS的包基本上都是小包,所以这是LVS DR模式表现强劲的主要原因。 (二)DR模式的优缺点及使用场景优点:响应数据不经过lvs,性能高,数据包修改小,信息保持完整(带客户端源IP)。DR模式的缺点:lvs和rs必须在同一个物理网络上(不支持跨机房)。必须在服务器上配置lo和其他内核参数。如果DR模式的使用场景不支持端口映射,如果性能要求非常高,可以优先选择DR模式,客户端源IP地址可以透明传输。 NAT模式的实现原理lvs的第二种工作模式是NAT模式。下图详细描述了数据包从用户端进入lvs转发给rs,然后rs再次转发响应数据给lvs,lvs回复数据包给用户端的全过程。 Image.png(一)实现原理和流程①客户请求的数据包经过层层网络,到达lvs网卡。此时数据包的源IP是CIP,目的IP是VIP。 ②通过网卡进入网络层预路由位置,根据目的IP找到路由,确认是本地IP,转发数据包输入。此时,源IP和目的IP没有改变。 ③到达lvs后,通过目的IP和目的端口,了解是否可以服务IPVS。 在IPVS业务的情况下,将选择一个RS作为后台服务器,数据包的目的IP将更改为RIP,以RIP为目的的IP将查找路由信息,确定下一跳和出口信息,并将数据包转发到输出。 ④修改后的数据包经过后路由和链路层解析后,到达RS服务器,数据包的源IP为CIP,目的IP为RIP。 ⑤到达RS服务器的数据包经过链路层和网络层检查后,发送到客户空间的nginx程序。 nginx程序求解后,发送响应包。因为RS上的默认网关配置为lvs设施IP,所以nginx服务器会将数据包转发到下一跳,也就是lvs服务器。 此时,数据包的源IP是RIP,目的IP是CIP。 lvs服务器收到RS响应包后,根据路由查找发现目的IP不是本地IP,lvs服务器开启转发模式,于是将包转发到转发链,此时不修改包。 ⑦lvs收到响应数据包后,根据目的IP和目的端口查找服务和连接表,将源IP改为VIP,通过路由查找确定下一跳和出口信息,将数据包发送到网关,通过复杂网络到达客户端,最终完成请求和响应的交互。 NAT模式下的双向流量经过LVS,所以NAT模式性能会有一定的瓶颈。 但是,与其他模式不同,NAT支持端口映射和windows操作系统。 (二)优缺点及使用场景NAT模式的优点可以支持windows操作系统支持的端口映射。 如果rs端口与vport不一致,lvs将修改dport以支持除目的IP之外的端口映射。 NAT模式的缺点后台RS需要配置网关。双向流量对lvs的压力很大。使用NAT模式的场景如果您是windows系统并使用lvs,则必须选择NAT模式。 隧道模式实现原理隧道模式在国内很少使用,但据说腾讯大量使用隧道模式。 也是单臂模式。只有请求数据会经过lvs,响应数据会直接从后台服务器发送到客户端。它也很强大,支持跨机房。 继续看下面的分析原理。 图(一)实现原理和流程①客户请求的数据包经过多层网络,到达lvs网卡。此时数据包的源ip是cip,目的ip是vip。 ②通过网卡进入网络层预路由位置,根据目的ip找到路由,确认是本地ip,将数据包转发到输入链到达lvs。此时,源ip和目的IP没有改变。 ③到达lvs后,通过目的IP和目的端口,了解是否可以服务ipv。 在ipVS业务的情况下,会选择一个rs作为后台服务器,以rip为目的地的ip会搜索路由信息,确定下一跳,dev等信息,然后在ip头前增加一个额外的IP头(以dip为源,以rip为目的地的IP),将数据包转发到输出。 ④根据路由信息,数据包最终经过lvs网卡,发送到路由器网关,通过网络到达后台服务器。 ⑤后台服务器收到数据包后,ipip模块卸载隧道头。正常看到的源ip是cip,目的ip是vip。由于在tunl0上配置了vip,路由查找后确定为本地ip并发送给应用程序。 应用nginx正常响应数据后,以vip为源ip,cip为目的地的ip包送出网卡,最终到达用户端。 隧道模式拥有DR模式的高性能,支持跨房间访问,听起来很完美。 但是国内运营商有一定的特点。比如RS响应包的源IP是VIP,VIP和后台服务器之间可能存在交叉运营商,可能会被运营商的策略屏蔽掉。隧道从来没有在生产环境中使用过,所以在国内实现隧道可能有一定的难度。 (二)隧道模式在使用场景中的优缺点。单臂模式,对lvs的负载压力小,对数据包的修改小,可以跨机房保持完整的信息(但在国内很难实现)。隧道模式的缺点需要在后台服务器安装配置ipip模块,需要在后台服务器tunl0配置vip隧道头,可能会导致碎片。对服务器性能的影响隧道头的IP地址是固定的,后台服务器网卡的哈希可能会参差不齐。不支持端口映射的隧道模式的使用场景。理论上,如果对转发性能要求高,跨机房要求,隧道可能是更好的选择。 到目前为止,LVS的原理已经解释得很清楚了,而且内容很多。建议看两遍,因为文章篇幅太长,下一篇再说实际操作。 如果你觉得这篇文章对你有帮助,可以喜欢,关注一下。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部