目录:


负载均衡是什么

负载均衡的作用

IP地址重定向—HTTP重定向

DNS负载均衡

反向代理服务器

IP负载均衡

直接路由(数据链路层)

IP隧道








负载均衡是什么:

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡(Load Balance) 其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。





负载均衡的作用:

  1. 解决 并发 压力,提高应用处理性能(增加吞吐量,加强网络处理能力)
  2. 提供故障转移,实现 高可用
  3. 通过添加或减少服务器数量,提供网站 伸缩性(扩展性)
  4. 安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

负载均衡有 硬件 和 软件 两种

目前主流的软件负载均衡分为四层和七层

LVS属于四层负载均衡,工作在tcp/ip协议栈上,通过修改网络包的ip地址和端口来转发,由于效率比七层高,一般放在架构的前端

LVS ( Linux Virtual Server ) ,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

可伸缩网络服务的几种结构,它们都需要一个前端(后端的)的负载调度器(或者多个进行主从备份)。

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

七层的负载均衡有nginx,haproxy,apache等,工作在应用层, 因此可以将HTTP请求等应用数据发送到具体的应用服务器,如将图片请求转发到特定的服务器上。总之可以做到更智能的负载均衡,这些功能在四层负载均衡上不好实现,一般放在架构的后面位置,布置在应用服务器前面。

负载均衡都是工作在应用层的





IP地址重定向

HTTP重定向

Web 服务器可通过Http 响应头信息中的 Location 标记来返回一个新的 URL,浏览器自动去访问这个新的 URL。

实现: 可以通过Web应用程序代码实现你想到的调度策略,如可根据请求的URL的不同来进行合理的过滤和转移。

HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的服务器地址,并将真实的服务器地址写入HTTP重定向响应中(响应状态码302)返回给浏览器,然后浏览器再自动请求真实的服务器。

优点: 比较简单
缺点: 浏览器需 要每次请求两次服务器才能拿完成一次访问,性能较差;重定向服务器自身的处理能力有可能成为瓶颈。因此这种方案在实际使用中并不见多。


linux iptable 实现负载均衡 linux服务器负载均衡_负载均衡




DNS负载均衡

DNS负责将用户请求的域名映射为实际的IP地址,这种映射可以是一对多的( DNS的A记录,用来指定域名对应的IP地址),这样DNS服务器便充当负载均衡调度器。大型网站总是部分使用DNS解析,作为第一级负载均衡。

DNS节省了所谓的主站点,DNS服务器已经充当了主站点的职能。常见的策略是对多个A记录进行RR(轮询)


linux iptable 实现负载均衡 linux服务器负载均衡_linux_02

但在使用DNS均衡负载时,由于DNS数据刷新的延迟问题,无法确保用户请求的完全均衡。 而且,一旦其中某台服务器出现故障,即使修改了DNS配置,仍然需要等到新的配置生效后,故障服务器才不会被用户访问到。 目前,DNS负载均衡仍在大量使用,但多用于实现“多地就近接入”的应用场景。

优点

  1. 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
  2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;

缺点

  1. 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;
  2. 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;
  3. 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据 系统与服务的状态来判断负载)




反向代理服务器

反向代理服务器的核心工作是转发HTTP,它工作在HTTP层面,因此,基于反向代理的负载均衡也称为七层负载均衡。

任何对于实际服务器的HTTP请求都必须经过调度器;调度器必须等待实际服务器的HTTP响应,并将它反馈给用户。


linux iptable 实现负载均衡 linux服务器负载均衡_IP_03

优点部署简单,处于http协议层面。

缺点:使用了反向代理服务器后,web 服务器地址不能直接暴露在外,因此web服务器不需要使用外部 IP地址(公网),而反向代理服务作为沟通桥梁就 需要配置双网卡、外部内部两套IP地址。不适合视频类,直播 类等高流量业务





IP负载均衡

网络地址转换(NAT)负载均衡工作在 传输层,对数据包中的IP地址和端口进行修改,从而达到转发的目的,称为四层负载均衡。

NAT服务器(前端服务器)必须作为实际服务器(后端服务器)的网关,否则数据包被转发后将一去不返。


linux iptable 实现负载均衡 linux服务器负载均衡_负载均衡_04

优点: 在内核进程完成数据分发,比在应用层分发性能更好

缺点所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽。





直接路由(数据链路层)

这种方式工作在数据链路层

修改数据包的目标MAC地址,并没有修改目标IP(因为这种转发工作在数据链路层,它对上层端口无能为力),然后发给实际的服务器,实际服务器的响应数据直接发回给用户,而不用经过调度器。但实际服务器必须接入外网,而且不能将调度器作为默认网关,要给实际服务 器添加和调度器IP地址相同的IP别名。

公用一个虚拟ip,对外网进行数据回复


linux iptable 实现负载均衡 linux服务器负载均衡_负载均衡_04

优点:不需要负载均衡服务器进行地址的转换。数据响应时不需要经过负载均衡服务器。
缺点:配置复杂。





IP隧道

基于IP隧道的负载均衡系统也可以使用LVS(Linux Virtual Server)来实现,称为LVS-TUN。与LVS-DR 不同的是,实际服务器和调度器可以不在同一个WAN网段,调度器通过IP隧道技术来转发请求到实际服 务器,所以实际服务器必须有合法的IP地址

基于IP隧道的请求转发机制,是将调度器收到的IP数据包封装在一个新的IP数据包中,转交给实际服务器,然后实际服务器的响应数据包可以直接到达用户端。

基于IP隧道的独特方式,可以将实际服务器部署在不同的地域并根据就近原则转移请求,比如一些CDN 服务器就是基于IP隧道技术实现的。