介绍
负载均衡是高可用基础架构的关键组成部分,通常用于通过将工作负载分布到多台服务器上来提高网站、应用程序、数据库和其他服务的性能和可靠性。
A web infrastructure with no load balancing might look something like the following:
在本例中,用户直接连接到网站服务器,位于yourdomain.com。如果此单个网站服务器宕机,用户将无法访问网站。此外,如果许多用户同时尝试访问服务器,而服务器无法处理负载,他们可能会遇到较慢的加载时间,或者根本无法连接。
通过在后端引入一个负载均衡器和至少一个额外的网站服务器,可以减轻这种单点故障。通常,所有后端服务器都提供相同的内容,以便用户无论哪个服务器响应都能接收一致的内容。
在上面的示例中,用户访问负载均衡器,负载均衡器将用户的请求转发到后端服务器,后者直接响应用户的请求。在这种情况下,单点故障现在是负载均衡器本身。可以通过引入第二个负载均衡器来减轻这种情况,但在讨论这一点之前,让我们先探讨一下负载均衡器的工作原理。
负载均衡器可以处理哪些类型的流量?
负载均衡器管理员为四种主要类型的流量创建转发规则:
- HTTP — 标准的HTTP负载平衡根据标准的HTTP机制来定向请求。负载均衡器设置
X-Forwarded-For
、X-Forwarded-Proto
和X-Forwarded-Port
头,向后端提供有关原始请求的信息。 - HTTPS — HTTPS负载平衡与HTTP负载平衡的功能相同,但增加了加密。加密有两种处理方式:一种是使用SSL穿透,将加密保持到后端;另一种是使用SSL终止,将解密负担放在负载均衡器上,但将流量未加密发送到后端。
- TCP — 对于不使用HTTP或HTTPS的应用程序,也可以进行TCP流量平衡。例如,可以将流量分布到数据库集群的所有服务器上。
- UDP — 最近,一些负载均衡器添加了对使用UDP的DNS和syslogd等核心互联网协议的负载平衡支持。
这些转发规则将在负载均衡器本身上定义协议和端口,并将它们映射到负载均衡器将用于路由流量到后端的协议和端口。
负载均衡器如何选择后端服务器?
负载均衡器选择将请求转发到哪个服务器,基于两个因素的组合。它们首先确保可以选择的任何服务器实际上都对请求做出了适当的响应,然后使用预先配置的规则从健康池中进行选择。
健康检查
负载均衡器只应将流量转发到“健康”的后端服务器。为了监视后端服务器的健康状况,健康检查定期尝试使用由转发规则定义的协议和端口连接到后端服务器,以确保服务器正在侦听。如果服务器未通过健康检查,因此无法提供请求,则会自动将其从池中移除,并且在其再次响应健康检查之前将不会将流量转发到该服务器。
负载均衡算法
使用的负载均衡算法确定了将选择后端健康服务器中的哪一个。一些常用的算法包括:
轮询 — 轮询意味着服务器将按顺序被选择。负载均衡器将选择其列表中的第一个服务器进行第一个请求,然后按顺序向下移动列表,在达到末尾时重新从顶部开始。
最少连接 — 最少连接意味着负载均衡器将选择连接数最少的服务器,并且在流量导致较长会话时建议使用。
源地址 — 使用源地址算法,负载均衡器将基于请求的源IP的哈希值选择要使用的服务器,例如访客的IP地址。此方法确保特定用户将始终连接到相同的服务器。
管理员可用的算法因所使用的具体负载均衡技术而异。
负载均衡器如何处理状态?
一些应用程序要求用户继续连接到相同的后端服务器。源地址算法基于客户端IP信息创建关联。在Web应用程序级别实现这一点的另一种方法是通过粘性会话,负载均衡器设置一个cookie,该会话的所有请求都定向到同一物理服务器。
冗余负载均衡器
为了消除负载均衡器作为单点故障,可以连接第二个负载均衡器到第一个形成一个集群,每个负载均衡器监视其他负载均衡器的健康状况。每个负载均衡器都具有相同的故障检测和恢复能力。
如果主负载均衡器失败,DNS必须将用户导向第二个负载均衡器。因为DNS更改可能需要相当长的时间在互联网上传播,并且为了使此故障转移自动化,许多管理员将使用允许灵活IP地址重映射的系统,例如保留IP。按需IP地址重映射通过提供静态IP地址,在需要时可以轻松地重新映射,消除了DNS更改中固有的传播和缓存问题。域名可以保持与同一IP地址关联,而IP地址本身则在服务器之间移动。
这是使用保留IP的高可用性基础设施的示例:
结论
在本文中,我们概述了负载均衡器的概念以及它们的工作原理。要了解更多有关特定负载均衡技术的信息,您可能想查看:
DigitalOcean的负载均衡服务
- 如何创建您的第一个DigitalOcean负载均衡器
- 如何在DigitalOcean负载均衡器上配置SSL透传
- 如何在DigitalOcean负载均衡器上配置SSL终止
- 如何使用DigitalOcean负载均衡器平衡TCP流量
HAProxy
Nginx
Source:
https://www.digitalocean.com/community/tutorials/what-is-load-balancing