• 售前

  • 售后

热门帖子
入门百科

一文概括6种负载均衡技术的实现方式(小结)

[复制链接]
同感丶 显示全部楼层 发表于 2021-10-26 12:23:35 |阅读模式 打印 上一主题 下一主题
负载均衡作为目前服务器集群摆设的一款常用装备,当一台机器性能无法满足业务的增长需求时,不是去找一款性能更好的机器,而是通过负载均衡,利用集群来满足客户增长的需求。
负载均衡技术的实现,重要分为以下几种:
      
  • HTTP 重定向负载  
  • DNS 域名解析负载  
  • 反向署理负载  
  • IP 负载 (NAT 负载和 IP tunnel 负载)  
  • 直接路由 (LVS—DR)  
  • IP隧道 (LVS—TUN)

负载均衡不能狭义地明白为分配给全部现实服务器一样多的工作量,由于多台服务器的承载能力各不相同,这大概表现在硬件配置、网络带宽的差异,也大概由于某台服务器身兼多职,我们所说的“均衡”,也就是盼望全部服务器都不要过载,并且可以或许最大步伐地发挥作用。
http 重定向
当http署理(好比欣赏器)向web服务器请求某个URL后,web服务器可以通过http相应头信息中的Location标志来返回一个新的URL。
这意味着HTTP署理需要继承请求这个新的URL,完成自动跳转。
性能缺陷:
1、吞吐率限制
主站点服务器的吞吐率均匀分配到了被转移的服务器。
现假设使用RR(Round Robin)调理策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要到达3000reqs/s才气完全发挥三台子服务器的作用,那么假如有100台子服务器,那么主服务器的吞吐率可想而知得有大?
相反,假如主服务的最大吞吐率为6000reqs/s,那么均匀分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增长子服务器的数量,增长到6个才气满足。
2、重定向访问深度差异
有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么现实服务器的负载差异是不可预料的,而主站服务器却一无所知。因此整站使用重定向方法做负载均衡不太好。
我们需要权衡转移请求的开销和处理惩罚现实请求的开销,前者相对于后者越小,那么重定向的意义就越大,比方下载。
你可以去许多镜像下载网站试下,会发现基本下载都使用了Location做了重定向。
DNS 负载均衡
DNS负责提供域名解析服务,当访问某个站点时,现实上首先需要通过该站点域名的DNS服务器来获取域名指向的IP地点,在这一过程中,DNS服务器完成了域名到IP地点的映射。
同样,这样映射也可以是一对多的,这时间,DNS服务器便充当了负载均衡调理器,它就像http重定向转换策略一样,将用户的请求分散到多台服务器上,但是它的实现机制完全差异。
使用dig下令来看下"baidu"的DNS设置

可见baidu拥有三个A纪录

相比http重定向,基于DNS的负载均衡完全节流了所谓的主站点,大概说DNS服务器已经充当了主站点的职能。
但差异的是,作为调理器,DNS服务器自己的性能几乎不消担心。
由于DNS纪录可以被用户欣赏器大概互联网接入服务商的各级DNS服务器缓存,只有当缓存过期后才会重新向域名的DNS服务器请求解析。
也说是DNS不存在http的吞吐率限制,理论上可以无限增长现实服务器的数量。
特性:
1、可以根据用户IP来举行智能解析。DNS服务器可以在全部可用的A纪录中探求离用记迩来的一台服务器。
2、动态DNS:在每次IP地点变动时,及时更新DNS服务器。固然,由于缓存,一定的耽误不可制止。
不敷:
1、没有效户能直接看到DNS解析到了哪一台现实服务器,加服务器运维人员的调试带来了不便。
2、策略的范围性。比方你无法将HTTP请求的上下文引入到调理策略中,而在前面介绍的基于HTTP重定向的负载均衡系统中,调理器工作在HTTP层面,它可以充实明白HTTP请求后根据站点的应用逻辑来计划调理策略,好比根据请求差异的URL来举行公道的过滤和转移。
3、假如要根据现实服务器的及时负载差异来调解调理策略,这需要DNS服务器在每次解析操纵时分析各服务器的健康状态,对于DNS服务器来说,这种自定义开辟存在较高的门槛,更何况大多数站点只是使用第三方DNS服务。
4、DNS纪录缓存,各级节点的DNS服务器差异步伐的缓存会让你晕头转向。
5、基于以上几点,DNS服务器并不能很好地完成工作量均衡分配,末了,是否选择基于DNS的负载均衡方式完全取决于你的需要。
反向署理负载均衡
这个肯定各人都有所接触,由于几乎全部主流的Web服务器都热衷于支持基于反向署理的负载均衡。它的核心工作就是转发HTTP请求。
相比前面的HTTP重定向和DNS解析,反向署理的调理器扮演的是用户和现实服务器中心人的脚色:
1、任何对于现实服务器的HTTP请求都必须颠末调理器
2、调理器必须等待现实服务器的HTTP相应,并将它反馈给用户(前两种方式不需要颠末调理反馈,是现实服务器直接发送给用户)
特性:
1、调理策略丰富。比方可以为差异的现实服务器设置差异的权重,以到达能者多劳的结果。
2、对反向署理服务器的并发处理惩罚能力要求高,由于它工作在HTTP层面。
3、反向署理服务器举行转发操纵自己是需要一定开销的,好比创建线程、与后端服务器创建TCP毗连、吸收后端服务器返回的处理惩罚结果、分析HTTP头部信息、用户空间和内核空间的频仍切换等。
虽然这部分时间并不长,但是当后端服务器处理惩罚请求的时间非常短时,转发的开销就显得尤为突出。比方请求静态文件,更适合使用前面介绍的基于DNS的负载均衡方式。
4、反向署理服务器可以监控后端服务器,好比系统负载、相应时间、是否可用、TCP毗连数、流量等,从而根据这些数据调解负载均衡的策略。
5、反射署理服务器可以让用户在一次会话周期内的全部请求始终转发到一台特定的后端服务器上(粘滞会话),这样的利益一是保持session的当地访问,二是防止后端服务器的动态内存缓存的资源浪费。
IP 负载均衡(LVS-NAT)
由于反向署理服务器工作在HTTP层,其自己的开销就已经严重制约了可扩展性,从而也限制了它的性能极限。那可否在HTTP层面以下实现负载均衡呢?
NAT服务器:它工作在传输层,它可以修改发送来的IP数据包,将数据包的目的地点修改为现实服务器地点。
从Linux2.4内核开始,其内置的Neftilter模块在内核中维护着一些数据包过滤表,这些表包罗了用于控制数据包过滤的规则。
可喜的是,Linux提供了iptables来对过滤表举行插入、修改和删除等操纵。更加令人奋发的是,Linux2.6.x内核中内置了IPVS模块,它的工作性质类型于Netfilter模块,不过它更专注于实现IP负载均衡。
想知道你的服务器内核是否已经安装了IPVS模块,可以

有输出意味着IPVS已经安装了。IPVS的管理工具是ipvsadm,它为提供了基于下令行的配置界面,可以通过它快速实现负载均衡系统。
这就是大名鼎鼎的LVS(Linux Virtual Server,Linux假造服务器)。
1、打开调理器的数据包转发选项
  1. echo 1 > /proc/sys/net/ipv4/ip_forward
复制代码
2、检查现实服务器是否已经将NAT服务器作为自己的默认网关,假如不是,如添加
  1. route add default gw xx.xx.xx.xx
复制代码
3、使用ipvsadm配置
  1. ipvsadm -A -t 111.11.11.11:80 -s rr
复制代码
添加一台假造服务器,-t 背面是服务器的外网ip和端口,-s rr是指采用简单轮询的RR调理策略(这属于静态调理策略,除此之外,LVS还提供了系列的动态调理策略,好比最小毗连(LC)、带权重的最小毗连(WLC),最短期望时间耽误(SED)等)
  1. ipvsadm -a -t 111.11.11.11:80 -r 10.10.120.210:8000 -m
  2. ipvsadm -a -t 111.11.11.11:80 -r 10.10.120.211:8000 -m
复制代码
添加两台现实服务器(不需要有外网ip),-r背面是现实服务器的内网ip和端口,-m表现采用NAT方式来转发数据包
运行ipvsadm -L -n可以检察现实服务器的状态。这样就大功告成了。
实验证实使用基于NAT的负载均衡系统。作为调理器的NAT服务器可以将吞吐率提拔到一个新的高度,几乎是反向署理服务器的两倍以上,这大多归功于在内核中举行请求转发的较低开销。
但是一旦请求的内容过大时,岂论是基于反向署理照旧NAT,负载均衡的整体吞吐量都差距不大,这说明对于一睦开销较大的内容,使用简单的反向署理来搭建负载均衡系统是值思量的。
这么强大的系统照旧有它的瓶颈,那就是NAT服务器的网络带宽,包罗内部网络和外部网络。
固然假如你不差钱,可以去花钱去购买千兆交换机或万兆交换机,乃至负载均衡硬件装备,但假如你是个屌丝,咋办?
一个简单有效的办法就是将基于NAT的集群和前面的DNS肴杂使用,好比5个100Mbps出口宽带的集群,然后通过DNS来将用户请求均衡地指向这些集群,同时,你还可以利用DNS智能解析实现地域就近访问。
这样的配置对于大多数业务是足够了,但是对于提供下载或视频等服务的大规模站点,NAT服务器照旧不够出色。
直接路由(LVS-DR)
NAT是工作在网络分层模型的传输层(第四层),而直接路由是工作在数据链路层(第二层),貌似更屌些。
它通过修改数据包的目的MAC地点(没有修改目的IP),将数据包转发到现实服务器上,差异的是,现实服务器的相应数据包将直接发送给客户羰,而不颠末调理器。
1、网络设置
这里假设一台负载均衡调理器,两台现实服务器,购买三个外网ip,一台机一个,三台机的默认网关需要相同,末了再设置同样的ip别名,这里假设别名为10.10.120.193。
这样一来,将通过10.10.120.193这个IP别名来访问调理器,你可以将站点的域名指向这个IP别名。
2、将ip别名添加到回环接口lo上
这是为了让现实服务器不要去探求其他拥有这个IP别名的服务器,在现实服务器中运行:


另外还要防止现实服务器相应来自网络中针对IP别名的ARP广播,为此还要实验:
      
  • echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore  
  • echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce  
  • echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore  
  • echo "1" > /proc/sys/net/ipv4/conf/all/arp_announce
配置完了就可以使用ipvsadm配置LVS-DR集群了
      
  • ipvsadm -A -t 10.10.120.193:80 -s rr  
  • ipvsadm -a -t 10.10.120.193:80 -r 10.10.120.210:8000 -g  
  • ipvsadm -a -t 10.10.120.193:80 -r 10.10.120.211:8000 -g
-g 就意味着使用直接路由的方式转发数据包
LVS-DR 相较于LVS-NAT的最大上风在于LVS-DR不受调理器宽带的限制,比方假设三台服务器在WAN交换机出口宽带都限制为10Mbps,只要对于毗连调理器和两台现实服务器的LAN交换机没有限速。
那么,使用LVS-DR理论上可以到达20Mbps的最大出口宽带,由于它的现实服务器的相应数据包可以不颠末调理器而直接发往用户端啊,所以它与调理器的出口宽带没有关系,只能自身的有关系。
而假如使用LVS-NAT,集群只能最大使用10Mbps的宽带。所以,越是相应数据包远远凌驾请求数据包的服务,就越应该低落调理器转移请求的开销,也就越能提高整体的扩展能力,最终也就越依靠于WAN出口宽带。
总的来说,LVS-DR适合搭建可扩展的负载均衡系统,岂论是Web服务器照旧文件服务器,以及视频服务器,它都拥有出色的性能。条件是你必须为现实器购买一系列的合法IP地点。
IP 隧道(LVS-TUN)
基于IP隧道的请求转发机制:将调理器收到的IP数据包封装在一个新的IP数据包中,转交给现实服务器,然后现实服务器的相应数据包可以直接到达用户端。
目前Linux大多支持,可以用LVS来实现,称为LVS-TUN,与LVS-DR差异的是,现实服务器可以和调理器不在同一个WANt网段,调理器通过IP隧道技术来转发请求到现实服务器,所以现实服务器也必须拥有合法的IP地点。
总体来说,LVS-DR和LVS-TUN都适合相应和请求不对称的Web服务器,怎样从它们中做出选择,取决于你的网络摆设需要,由于LVS-TUN可以将现实服务器根据需要摆设在差异的地域,并且根据就近访问的原则来转移请求,所以有雷同这种需求的,就应该选择LVS-TUN。
以上就是本文的全部内容,盼望对各人的学习有所帮助,也盼望各人多多支持草根技术分享。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作