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 简单总结
- 负载均衡用于将工作负载合理分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性;
- 负载均衡分类:DNS 负载均衡,二层(MAC)、三层(IP)、四层(IP+Port)、七层(HTTP)负载均衡;
- 常见的是四层及七层负载均衡,一般四层用 LVS,七层用 Nginx;
- 四层负载均衡效率更高、七层负载均衡更灵活。