负载均衡 (一) 工作模式以及工作原理

负载均衡(科普篇)

?
?
负载均衡(Load Balancing),简单地说就是将多台服务器组成一个服务器集群,然后根据我们设置的规则给服务器集群分配“工作任务”。
?
典型的互联网应用的拓扑结构

?
负载均衡的多种解决方案:

HTTP重定向

当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向。
通过重定向,来达到“负载均衡”的目标。例如,我们在下载PHP源码包的时候,点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址。重定向的HTTP返回码是302
这个重定向非常容易实现,并且可以自定义各种策略。但是,它在大规模访问量下,性能不佳。而且,给用户的体验也不好,实际请求发生重定向,增加了网络延时。
?

反向代理负载均衡

反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中转的角色。因为它工作在HTTP层(应用层),也就是网络七层结构中的第七层,因此也被称为“七层负载均衡”。可以做反向代理的软件很多,比较常见的一种是Nginx。
Nginx是一种非常灵活的反向代理软件,可以自由定制化转发策略,分配服务器流量的权重等。反向代理中,常见的一个问题,就是Web服务器存储的session数据,因为一般负载均衡的策略都是随机分配请求的。同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题。

解决方案主要有两种:
1)配置反向代理的转发规则,让同一个用户的请求一定落到同一台机器上(通过分析cookie),复杂的转发规则将会消耗更多的CPU,也增加了代理服务器的负担。
2)将session这类的信息,专门用某个独立服务来存储,例如Redis/memchache,这个方案是比较推荐的。

反向代理服务,也是可以开启缓存的,如果开启了,会增加反向代理的负担,需要谨慎使用。这种负载均衡策略实现和部署非常简单,而且性能表现也比较好。
但是,它有“单点故障”的问题,如果挂了,会带来很多的麻烦。而且,到了后期Web服务器继续增加,它本身可能成为系统的瓶颈。
?

DNS负载均衡

DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。
这种负载均衡策略,配置简单,性能极佳。但是,不能自由定义规则,而且,变更被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题。
?

DNS/GSLB负载均衡

我们常用的CDN(Content Delivery Network,内容分发网络)实现方式,其实就是在同一个域名映射为多IP的基础上更进一步,通过GSLB(Global Server Load Balance,全局负载均衡)按照指定规则映射域名的IP。
一般情况下都是按照地理位置,将离用户近的IP返回给用户,减少网络传输中的路由节点之间的跳跃消耗。

CDN在Web系统中,一般情况下是用来解决较大的静态资源(html/Js/Css/图片/视频/文件等)的加载问题,让这些比较依赖网络下载的内容,尽可能离用户更近,提升用户体验。
这种方式,和前面的DNS负载均衡一样,性能极佳,而且支持配置多种策略。但是,搭建和维护成本非常高。互联网一线公司,会自建CDN服务,中小型公司一般使用第三方提供的CDN。

IP负载均衡

IP负载均衡服务是工作在网络层(修改IP)和传输层(修改端口,第四层),比起工作在应用层(第七层)性能要高出非常多。
原理是,他是对IP层的数据包的IP地址和端口信息进行修改,达到负载均衡的目的。这种方式,也被称为“四层负载均衡”。
常见的负载均衡方式,是LVS,通过IPVS(IP Virtual Server,IP虚拟服务)来实现。

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

?
这个项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
?

Lvs 提供几种负载均衡集群机制:

?

DR模式  直接路由模式
NAT模式 网络地址转换模式
TUN模式 隧道模式
FULLNAT模式 

LB 负载均衡(Load Balance)
RS 真实服务器(Real Server)  

?

1.DR模式(Direct Routing)


  DR模式下,客户端的请求包到达负载均衡器的虚拟服务IP端口后,负载均衡器不会改写请求包的IP和端口,但是会改写请求包的MAC地址为后端RS的MAC地址,然后将数据包转发;真实服务器处理请求后,响应包直接回给客户端,不再经过负载均衡器。所以DR模式的转发效率是最高的,特别适合下行流量较大的业务场景,比如请求视频等大文件。
?
  DR模式的特点:
数据包在LB转发过程中,源/目的IP端口都不会变化
  LB只是将数据包的MAC地址改写为RS的MAC地址,然后转发给相应的RS。
?
每台RS上都必须在环回网卡上绑定LB的虚拟服务IP
  因为LB转发时并不会改写数据包的目的IP,所以RS收到的数据包的目的IP仍是LB的虚拟服务IP。为了保证RS能够正确处理该数据包,而不是丢弃,必须在RS的环回网卡上绑定LB的虚拟服务IP。这样RS会认为这个虚拟服务IP是自己的IP,自己是能够处理这个数据包的。否则RS会直接丢弃该数据包!
?
RS上的业务进程必须监听在环回网卡的虚拟服务IP上,且端口必须和LB上的虚拟服务端口一致
  因为LB不会改写数据包的目的端口,所以RS服务的监听端口必须和虚拟服务端口一致,否则RS会直接拒绝该数据包。
?
RS处理完请求后,响应直接回给客户端,不再经过LB
  因为RS收到的请求数据包的源IP是客户端的IP,所以理所当然RS的响应会直接回给客户端,而不会再经过LB。这时候要求RS和客户端之间的网络是可达的。
?
LB和RS须位于同一个子网
  因为LB在转发过程中需要改写数据包的MAC为RS的MAC地址,所以要能够查询到RS的MAC。而要获取到RS的MAC,则需要保证二者位于一个子网,否则LB只能获取到RS网关的MAC地址。

?

2.NAT模式(Network Address Translation)


  NAT模式下,请求包和响应包都需要经过LB处理。当客户端的请求到达虚拟服务后,LB会对请求包做目的地址转换(DNAT),将请求包的目的IP改写为RS的IP。当收到RS的响应后,LB会对响应包做源地址转换(SNAT),将响应包的源IP改写为LB的IP。

?
  NAT模式的特点:

LB会修改数据包的地址
  对于请求包,会进行DNAT;对于响应包,会进行SNAT。
?
LB会透传客户端IP到RS(DR模式也会透传)
  虽然LB在转发过程中做了NAT转换,但是因为只是做了部分地址转发,所以RS收到的请求包里是能看到客户端IP的。
?
需要将RS的默认网关地址配置为LB的浮动IP地址
  因为RS收到的请求包源IP是客户端的IP,为了保证响应包在返回时能走到LB上面,所以需要将RS的默认网关地址配置为LB的虚拟服务IP地址。当然,如果客户端的IP是固定的,也可以在RS上添加明细路由指向LB的虚拟服务IP,不用改默认网关。
?
LB和RS须位于同一个子网,并且客户端不能和LB/RS位于同一子网
  因为需要将RS的默认网关配置为LB的虚拟服务IP地址,所以需要保证LB和RS位于同一子网。
?
  又因为需要保证RS的响应包能走回到LB上,则客户端不能和RS位于同一子网。否则RS直接就能获取到客户端的MAC,响应包就直接回给客户端了,不会走网关,也就走不到LB上面了。这时候由于没有LB做SNAT,客户端收到的响应包源IP是RS的IP,而客户端的请求包目的IP是LB的虚拟服务IP,这时候客户端无法识别响应包,会直接丢弃。
?

3.TUN模式 (tunnel)


  采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。
为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。
这样调度器就只处理 入站请求报文,由于一般网络服务应答数据比请求报文大很多,采用TUN模式后,集群系统的最大吞吐量可以提高10倍。
  ?
  TUN和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。
并且直接把包发送给客户端,不用经过LB服务器。
?

4.FULLNAT模式


FULLNAT模式
  FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。
?
  FULLNAT模式的特点:

LB完全作为一个代理服务器
  FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到LB。此种模式和七层负载均衡有点相似,只不过不会去解析应用层协议,而是在TCP层将消息转发
LB和RS对于组网结构没有要求
  不同于NAT和DR要求LB和RS位于一个子网,FULLNAT对于组网结构没有要求。只需要保证客户端和LB、LB和RS之间网络互通即可。

原文地址:http://blog.51cto.com/xmomo/2177814

时间: 2024-10-11 10:30:13

负载均衡 (一) 工作模式以及工作原理的相关文章

LVS负载均衡群集(三种工作模式原理详解)

LVS负载均衡群集(三种工作模式原理详解) 一.前言 ? 在互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求越来越高,单台服务器力不从心.所以我们需要通过一些方法来解决这样的瓶颈. ? 最简单的方法就是使用价格昂贵的大.小型的主机:但这样在大多数企业中显然是不可取或者说不现实的.那么我们就需要通过多个普通服务器构建服务器群集. 二.相关概念概述 2.1何为LVS? ? LVS--Linux Virtual Server,即Linux虚拟服务器(虚拟主机.共享主机),虚拟主

nginx(4)-负载均衡的5种策略及原理

nginx的upstream目前支持的5种方式的分配 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2.指定权重指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. upstream backserver { server 192.168.0.14 weight=8; server 192

LVS负载均衡之NAT模式部署

1.LVS的NAT模式介绍 参考自官网:http://www.linuxvirtualserver.org/zh/lvs3.html 由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址(10.0.0.0/255.0.0.0. 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66].这些地址不在Internet上使用,而是专门为内部网络预留的.当内部网络中的主机要访问Internet或被Internet访问

Lvs 负载均衡之nat模式配置

Lvs nat模式全称是Virtual Server via Network Address Translation(VS/NAT),通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程. Lvs nat工作原理图如下 特点: 1,所有的后端服务器和Lvs服务器(调度器)要在同一个网段内 2,后端服务器IP是私有地址,仅用于集群节点之间进行通信 3,Lvs服务器同

LVS负载均衡群集DR模式

LVS-DR在DR模式的群集中,LVS负载器为访问入口,但不作网关处理:服务器池中所有节点都各自接入internet,发送给客户端WEB响应数据包不需要LVS负载调度器.nat模式和dr模式的区别 两种模式都是实现负载均衡lvs的方法,nat模式在包进入的时候在分发器上做了目的地址的mac转换,也就是DNAT,包回去的时候从哪进来的也要从哪里出去,这就造成了nat模式在real server过多的时候造成了数据包在回去的时候都是从一个出口方向,也就造成了瓶颈. DR模式在数据包进入的时候由分发器

Keepalived+LVS实现高可用负载均衡双主模式

LVS是一种集群(Cluster)技术:采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的.高可用的虚拟服务器.整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序.工作在四层,在内核空间工作,基于ipvs模块,不占用流量. 双机高可用方法目前分为两种: 1)双机主从模式:即前端使用两台服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟

微服务管理平台nacos虚拟ip负载均衡集群模式搭建

一.Nacos简介 Nacos是用于微服务管理的平台,其核心功能是服务注册与发现.服务配置管理. Nacos作为服务注册发现组件,可以替换Spring Cloud应用中传统的服务注册于发现组件,如:Eureka.consul等,支持服务的健康检查. Nacos作为服务配置中心,可以替换Spring Cloud Config. 当然Nacos作为一个微服务管理平台,除了面向spring Cloud,还支持很多其他的微服务基础设施,如:docker.dubbo.kubernetes等.除了核心的服务

Git的工作模式和工作流程

git的优缺点 git属于分布式版本控制系统:客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整的镜像下来. 优点: 1.由于任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在本地执行,速度就是相当的快,并且可以在网络断开的时候操作仍然不受影响,可以频繁的进行提交更新,等到有网络的时候再上传到远程的镜像仓库就可以了. 2.git的分支模型,相当的轻量级,被称为"必杀技". 缺点: 1.每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重

LVS负载均衡群集--NAT模式

LVS简介1. 在互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求越来越高,单台服务器难以承担所有的访问.除了使用价格昂贵的大型机.专用负载分流设备以外,企业多选择构建群集服务器--通过整合多台相对廉价的普通服务器,以同一个地址对外提供相对的服务.本篇博客将介绍企业中常用的一种群集技术--LVS.负载均衡群集:以提高应用系统的响应能力.尽可能处理更多的访问请求.减少延迟为目标,获得高并发.高负载(LB)的整体性能.LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请