文章目录

  • 1 什么是负载均衡?
  • 1.1 维基百科
  • 1.2 知乎
  • 2 负载均衡分类
  • 2.1 DNS负载均衡
  • 2.2 二层负载均衡(MAC)
  • 2.3 三层负载均衡(IP)
  • 2.4 四层负载均衡(TCP)
  • 2.5 七层负载均衡(HTTP)
  • 2.6 混合负载均衡及软件
  • 3 简单总结


1 什么是负载均衡?

1.1 维基百科

负载平衡(Load Balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。

1.2 知乎

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
一个没有负载均衡的 web 架构类似下面这样

在这里用户是直连到 web 服务器,如果这个服务器宕机了,那么用户自然也就没办法访问了。另外,如果同时有很多用户试图访问服务器,超过了其能处理的极限,就会出现加载速度缓慢或根本无法连接的情况。

而通过在后端引入一个负载均衡器和至少一个额外的 web 服务器,可以缓解这个故障。通常情况下,所有的后端服务器会保证提供相同的内容,以便用户无论哪个服务器响应,都能收到一致的内容。

从图里可以看到,用户访问负载均衡器,再由负载均衡器将请求转发给后端服务器。在这种情况下,单点故障现在转移到负载均衡器上了。这里又可以通过引入第二个负载均衡器来缓解。

当主负载均衡器发生了故障,就需要将用户请求转到第二个负载均衡器。因为 DNS 更改通常会较长的时间才能生效,因此需要能灵活解决 IP 地址重新映射的方法,比如浮动 IP(floating IP)。这样域名可以保持和相同的 IP 相关联,而 IP 本身则能在服务器之间移动。

2 负载均衡分类

负载均衡虽然不是什么非常特殊的黑科技,但它的技术实现可以有很多种,都能达到效果。
主要有DNS负载均衡和二、三、四、七层负载均衡。

2.1 DNS负载均衡

这种是属于较早出现的技术,其利用域名解析实现负载均衡,在DNS服务器配置多个A记录,这些A记录对应的服务器构成集群互相减轻服务压力。大型网站总是部分使用DNS解析,作为第一级负载均衡。

2.2 二层负载均衡(MAC)

二层负载均衡又叫链路层负载均衡,其对应OSI模型的第二层,基于MAC地址进行服务分发。

2.3 三层负载均衡(IP)

三层对应OSI模型的网络层,三层负载均衡提供一个虚拟IP对外提供服务,当请求进入负载均衡器后转发至集群中某个真实IP,这里的虚拟IP可能是一个外网IP,而真实IP可能是内网IP。

2.4 四层负载均衡(TCP)

OSI模型的四层主要协议是TCP/UDP,其特点是在IP负载均衡的基础上基于IP及端口号来进行负载均衡。

2.5 七层负载均衡(HTTP)

对应OSI模型的应用层, 基于虚拟的URL或其他应用层信息(例如:浏览器类别、语言)的负载均衡。

2.6 混合负载均衡及软件

在实际中我们可以混用多种技术。我们最常见的四层和七层负载均衡,如果没有第四层的基础也是做不到七层负载均衡的。

实现四层负载均衡的软件有:F5、LVS、Nginx、HAProxy。

实现七层负载均衡的软件有:HAProxy、Nginx、Apache、MySQL Proxy。

3 简单总结

1、负载均衡用于将工作负载合理分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性;

2、负载均衡分类:DNS负载均衡,二层(MAC)、三层(IP)、四层(IP+Port)、七层(HTTP)负载均衡;

3、常见的是四层及七层负载均衡,一般四层用LVS,七层用Nginx;

4、四层负载均衡效率更高、七层负载均衡更灵活。