专栏首页服务端思维做负载均衡,你得先了解这些

做负载均衡,你得先了解这些

为了让大家进一步了解负载均衡,从而做好负载均衡,今天我再给大家详细介绍一下。

负载均衡要解决什么问题

负载均衡主要解决以下几个问题:

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

负载均衡如何实现

实现负载均衡可以从硬件和软件两方面着手,在硬件上我们可以使用F5等负载均衡器,在软件上我们可以使用LVS、Nginx、HaProxy等负载均衡软件。使用硬件性能强悍,使用软件灵活智能。不过,不管是从硬件层面还是从软件层面去解决负载均衡,其原理不外乎以下几点:

1、利用DNS,通过使用域名解析实现负载均衡

配置多个A 记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。显而易见,使用这种方式的负载均衡的控制权在域名商那里,不易拓展,并且用这种方式的负载不能很好的分流,有可能造成所有的请求都集中到一个节点上。不过,若作为第一层的负载均衡的确是个好办法。

2、利用HTTP进行负载均衡

当HTTP代理(比如浏览器)向WEB服务器请求某个URL后,WEB服务器可以通过HTTP响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。

3、利用IP在网络层通过修改请求目标地址进行负载均衡。

用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为获得的真实IP地址,不需要经过用户进程处理。真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的IP地址,发送给用户浏览器。

4、利用链路层,在通信协议的数据链路层修改MAC地址,进行负载均衡。

数据分发时,不修改IP地址,只修改目标MAC地址,配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。实际处理服务器IP和数据请求目的IP一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。

5、使用混合方式

其实这就显而易见了,当单一的负载均衡方式无法很好的解决现有的问题,那么我们就可以把他们结合在一起使用,这也很符合当下的发展潮流啊… 具体的结合方式有很多,例如 我们可以考虑分层,在每一层采用不同的方式来进行负载均衡,在最外层使用 DNS负载均衡,在使用反向代理来做缓存以及动态请求分发 ,最后在是应用负载均衡(IP/DR), 分流到对应的应用集群

由于在实际的工作中,我们大多数是使用软件来解决负载均衡,因此,下面我以LVS、HaProxy、Nginx为例,介绍一下负载均衡的具体实现。

LVS

LVS (Linux Virtual Server) 工作在网络七层协议的第四层上,是基于IP层的负载均衡调度技术。它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。

使用LVS进行负载均衡有如下特点:

  • 抗负载能力强,因为LVS工作方式的逻辑是非常之简单,而且工作在网络四层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。
  • 配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
  • 工作稳定,因为其本身抗负载能力很强,所以,稳定性高也是顺理成章。另外,各种LVS都有完整的双机热备方案,所以,一点不用担心均衡器本身会出什么问题。节点出现故障的话,LVS会自动判别,所以系统整体是非常稳定的。
  • 无流量,上面已经有所提及了。LVS仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量,同时,也保住了均衡器的IO性能不会受到大流量的影响。
  • 基本上能支持所有应用,因为LVS工作在网络四层,所以,它可以对几乎所有应用做负载均衡,包括HTTP、数据库、聊天室等等.

大多时候LVS是和Keepalived一起配合使用的,LVS提供负载均衡,Keepalived提供健康检查。采用这样的架构,扩展方便。扩展时只需要在后端添加或者减少Real Server,然后更改LVS的配置文件即可。

HaProxy

HaProxy工作在网络七层协议的第七层之上,能够补充Nginx的一些缺点,比如,Session的保持,Cookie的引导等工作。

HaProxy支持URL检测,利用此功能,可以检测后端服务器是否出现问题。

HaProxy支持多种负载均衡策略,比如,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)等。

单纯从效率上来讲,HaProxy更会比Nginx有更出色的负载均衡速度。

HaProxy可以对MySQL进行负载均衡,对后端的DB节点进行检测和负载均衡。

Nignx

Nginx工作在网络七层协议的第七层,可以针对HTTP应用做一些分流的策略,比如,针对域名、目录结构等。

Nginx对网络的依赖比较小,Nginx安装和配置比较简单,测试起来比较方便。

Nginx也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发。

Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。

不过其中缺点就是不支持url来检测。

Nginx对请求的异步处理可以帮助节点服务器减轻负载。

Nginx不支持Session的保持、对Big request header的支持也不是很好。另外,默认的只有Round-robin和IP-hash两种负载均衡算法。

如何选择是用何种软件来实现负载均衡

这要分三个阶段:

第一阶段:利用Nginx或者HaProxy进行单点的负载均衡。

这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小。没有专业的维护团队来进行维护,也不需要进行大规模的网站部署。这样利用Nginx或者HAproxy就是第一选择,此时,这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。

第二阶段:随着网络服务进一步扩大,单点的Nginx已经不能满足,这时,使用LVS或者商用F5就是首要选择。

Nginx此时就作为LVS或者F5的节点来使用。具体LVS或者F5的是选择是根据公司规模,人才以及资金能力来选择的,这里也不做详谈,但是,一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时,随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时,无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选。这时,LVS会成为主流。最终形成比较理想的状态为:F5/LVS -> Haproxy -> Squid/Varnish -> AppServer。

LVS/HaProxy/Nignx 的相关介绍摘自网上, 感谢作者,其实网上的介绍都是这样, 我也不知道谁是第一作者了,所以此处就不标注出处了, 望作者原谅

本文分享自微信公众号 - 服务端思维(gh_c3775931ac9d)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 请不要再称数据库是CP或者AP

    在 Jeff Hodges 精彩的博客文章给年轻人关于分布式系统的笔记中,他建议我们用CAP定理来评论系统。很多人都听取了这个建议,描述他们的系统为"CP" (...

    用户2781897
  • 一文详解JDK13新特性

    核心库/ java.nio中添加了FileSystems.newFileSystem(Path,Map <String,?>)方法

    用户2781897
  • 高可用的Redis主从复制集群,从理论到实践

    我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不可用。所以服务做成高可用是很有必要的,Redis服务自然也是这样。本文主要从理论和实践两方...

    用户2781897
  • 负载均衡基础知识

     互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问...

    哲洛不闹
  • Web负载均衡学习笔记之四层和七层负载均衡的区别

      ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换...

    Jetpropelledsnake21
  • 负载均衡基础知识

     互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问...

    lyb-geek
  • 四层和七层负载均衡的区别

    (一) 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载...

    小小科
  • linux负载均衡总结性说明(四层负载/七层负载)

    在常规运维工作中,经常会运用到负载均衡服务。负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 一,什么是负载均衡 1)负载均衡...

    洗尽了浮华
  • 负载均衡 - 综述

    1 什么是负载均衡 网络的各个核心部件随着业务量的提高、访问量和数据流量的快速增长,其处理能力和计算强度也相应增大,使得单一设备根本无法承担。在此情况下,如果扔...

    三丰SanFeng
  • 四层和七层负载均衡的区别

    ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换...

    后端技术探索

扫码关注云+社区

领取腾讯云代金券