一、概述
负载均衡(Load Balance),它在网络现有结构之上可以提供一种廉价、有效、透明的方法来扩展网络设备和服务器的带宽,并可以在一定程度上增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性等。用官网的话说,它充当着网络流中“交通指挥官”的角色,“站在”服务器前处理所有服务器端和客户端之间的请求,从而最大程度地提高响应速率和容量利用率,同时确保任何服务器都没有超负荷工作。如果单个服务器出现故障,负载均衡的方法会将流量重定向到其余的集群服务器,以保证服务的稳定性。当新的服务器添加到服务器组后,也可通过负载均衡的方法使其开始自动处理客户端发来的请求。
使用负载均衡可以给我们带来的几个好处:
- 提高了系统的整体性能;
- 提高了系统的扩展性;
- 提高了系统的可用性;
二、分类
广义上的负载均衡器大概可以分为 3 类,包括:DNS 方式实现负载均衡、硬件负载均衡、软件负载均衡。
(一)DNS 实现负载均衡
DNS 实现负载均衡是最基础简单的方式。一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,这样就完成了流量的调度,虽然没有使用常规的负载均衡器,但实现了简单的负载均衡功能。DNS 轮询是将多台服务器映射到同一个主机名上,当用户访问 foo.example.com
时多台服务器都可用于处理它们的请求,使用的就是这种方式。
优点:实现简单,成本低,无需自己开发或维护负载均衡的设备
缺点:
- 服务器延迟大,服务器升级不方便。DNS 与用户之间是层层缓存,发生故障时通过DNS 修改或者摘除故障服务器,中间会经过层层缓存
- 流量调度不均衡,粒度太粗。
- 流量分配策略太简单,支持的算法太少。DNS 一般只支持
rr
的轮询方式,流量分配策略比较简单,不支持权重、Hash 等调度算法。 - DNS 支持的 IP 列表有限制。我们知道 DNS 使用 UDP 报文进行信息传递,每个 UDP 报文大小受链路的 MTU 限制,所以报文中存储的 IP 地址数量也是非常有限的,阿里 DNS 系统针对同一个域名支持配置 10 个不同的 IP 地址
子域委派结合轮询
有多个子域或者地理位置比较分散的服务器时,就应该去使用它。它的响应时间更快,并且宕机的服务器不会去响应,因此客户端不会因为等待回复而被挂住。
(二)硬件负载均衡
硬件负载均衡是通过专门的硬件设备来实现负载均衡功能,是专用的负载均衡设备。目前业界典型的硬件负载均衡设备有两款:F5
和 A10
。
硬件负载均衡的优点:
- 功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法。
- 性能强大:性能远超常见的软件负载均衡器。
- 稳定性高:商用硬件负载均衡,经过了良好的严格测试,经过大规模使用,稳定性高。
- 安全防护:还具备防火墙、防 DDoS 攻击等安全功能,以及支持 SNAT 功能。
硬件负载均衡的缺点:
- 价格贵;
- 扩展性差,无法进行扩展和定制;
- 调试和维护比较麻烦,需要专业人员;
(三)软件负载均衡
软件负载均衡从通信层面来看,又可以分为四层和七层负载均衡。
- 七层负载均衡:就是可以根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。
-
DNS 重定向,原理:基于 DNS 查询缓存,按照负载情况返回不同服务器的 IP 地址。
-
HTTP 重定向,原理是:根据用户的 HTTP 请求计算出一个真实的服务器地址,将该服务器地址写入 HTTP 重定向响应中,返回给浏览器,由浏览器重新进行访问。
-
反向代理,原理:反向代理(Reverse Proxy)方式是指以 代理服务器 来接受网络请求,然后 将请求转发给内网中的服务器,并将从内网中的服务器上得到的结果返回给网络请求的客户端。反向代理负载均衡属于七层负载均衡。反向代理服务的主流产品:Nginx、Apache。
-
- 四层负载均衡:基于 IP 地址和端口进行请求的转发。
-
修改 IP 地址,原理:IP 负载均衡是在网络层通过修改请求目的地址进行负载均衡。
-
修改 MAC 地址
-
软件负载均衡,可以在普通的服务器上运行负载均衡软件,实现负载均衡功能。目前常见的有 Nginx
、HAproxy
、LVS
。其中的区别:
Nginx
:七层负载均衡,支持 HTTP、E-mail 协议,同时也支持 4 层负载均衡;- https://zhuanlan.zhihu.com/p/134220193?utm_id=0
HAproxy
:支持七层规则的,性能也很不错。OpenStack 默认使用的负载均衡软件就是 HAproxy;LVS
:运行在内核态,性能是软件负载均衡中最高的,严格来说工作在三层,所以更通用一些,适用各种应用服务
软件负载均衡的优点:
- 易操作:无论是部署还是维护都相对比较简单;
- 便宜:只需要服务器的成本,软件是免费的;
- 灵活:4 层和 7 层负载均衡可以根据业务特点进行选择,方便进行扩展和定制功能。
负载均衡算法
根据负载均衡算法在候选服务器列表选出一个服务器;
将请求数据发送到该服务器上。
负载均衡算法的特性及原理:轮询、随机、最小活跃数、源地址哈希、一致性哈希。
参考文章