

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 负载均衡一个层
<a name="best-server-load-balancing"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

OpsWorks Stacks 提供了两个负载平衡选项，即 [Elastic L](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elastic-load-balancing.html) oad Balancing 和 [HAProxy](http://www.haproxy.org/)，它们通常用于在应用服务器层的实例之间平衡负载。本主题介绍这两个选项各自的优点和限制，帮助您决定在向一个层添加负载均衡时应该选择哪个选项。在某些情况下，最佳方法是同时使用这两个选项。

**SSL 终止**  <a name="best-server-load-balancing-ssl"></a>
内置 HAProxy 层不处理 SSL 终止；您必须在服务器上终止 SSL。这种方法的好处是，通信内容在抵达服务器之前都是加密的。不过，服务器必须处理解密工作，这会增加服务器负载。另外，您必须将您的 SSL 证书放到应用服务器上，这样用户访问起来才更容易。  
借助 Elastic Load Balancing，您可以在负载均衡器上终止 SSL。这会减少您应用服务器上的负载，但负载均衡器和服务器之间的通信不会经过加密。Elastic Load Balancing 还使您可以[在服务器上终止 SSL](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-https-load-balancers.html)，但是设置起来有点儿复杂。

**扩展**  <a name="best-server-load-balancing-scaling"></a>
如果传入流量超过 HAProxy 负载均衡器的容量，则必须手动增加其容量。  
Elastic Load Balancing 会自动扩展以处理传入流量。要确保 Elastic Load Balancing 负载均衡器一上线就有足够能力处理预期的负载，您可以对其进行[预热](https://aws.amazon.com/articles/1636185810492479#pre-warming)。

**负载均衡器故障**  <a name="best-server-load-balancing-failure"></a>
如果托管您的 HAProxy 服务器的实例出现故障，则可能会使您的整个站点处于离线状态，直到您可以重启该实例。  
Elastic Load Balancing 的抗故障能力比 HAProxy. 例如，它在每个已注册 EC2 实例的可用区中配置负载平衡节点。如果在某区的服务中断，其他节点会继续处理输入通信量。有关更多信息，请参阅 [Elastic Load Balancing Concepts](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html)。

**空闲超时**  <a name="best-server-load-balancing-timeout"></a>
如果服务器空闲时间超过指定的空闲超时值，这两个负载均衡器都会终止连接。  
+ HAProxy — 空闲超时值没有上限。
+ Elastic Load Balancing -空闲超时默认值为 60 秒，最高可达 3600 秒（60 分钟）。
Elastic Load Balancing 空闲时间限制对大多数目的来说是充足的。 HAProxy 如果您需要更长的空闲超时时间，我们建议您使用。例如：  
+ 长期运行的 HTTP 连接，可用于推送通知。
+ 管理界面，可用于执行可能需要 60 分钟以上时间的任务。

**基于 URL 的映射**  <a name="best-server-load-balancing-url"></a>
您可能想要让负载均衡器基于输入请求的 URL 将该请求传递到特定的服务器。例如，假定您有十台应用服务器，这些服务器支持电子商务应用。其中八台服务器处理目录事项，剩余两台处理支付事项。您希望根据请求 URL 将所有与支付相关的 HTTP 请求定向到支付服务器。在这种情况下，您可以将所有 URLs 包括 “付款” 或 “结账” 的内容定向到其中一个支付服务器。  
使用 HAProxy，您可以使用基于 URL 的映射将 URLs 包含指定字符串的指向特定服务器。要在 OpsWorks Stacks 中使用基于 URL 的映射，必须通过覆盖内置食谱中的`haproxy-default.erb`模板来创建自定义 HAProxy 配置文件。`haproxy`有关更多信息，请参阅[HAProxy 配置手册](http://cbonte.github.io/haproxy-dconv/configuration-1.5.html)和[使用自定义模板](workingcookbook-template-override.md)。您不可以对 HTTPS 请求使用基于 URL 的映射。HTTPS 请求 HAProxy已加密，因此无法检查请求网址。  
Elastic Load Balancing 对 URL 映射的支持有限。有关更多信息，请参阅 [Elastic Load Balancing 的侦听器配置](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html)。

**建议：**我们建议使用 Elastic Load Balancing 进行负载平衡，除非您的要求只能由来处理 HAProxy。在这种情况下，最好的方法可能是将 Elastic Load Balancing 用作前端负载均衡器，将传入流量分配到一组服务器，从而将两者 HAProxy 结合起来。要实现此目的，应按照以下步骤进行：
+ 在堆栈的每个可用区中设置一个 HAProxy 实例，将请求分发到该区域的应用程序服务器。
+ 将 HAProxy 实例分配给 Elastic Load Balancing 负载均衡器，然后由该负载均衡器将传入的请求分配给 HAProxy 负载均衡器。

这种方法允许您使用基于 URL HAProxy 的映射将不同类型的请求分发到相应的应用程序服务器。但是，如果其中一 HAProxy 台服务器离线，该站点将继续运行，因为 Elastic Load Balancing 负载均衡器会自动将传入流量分配到运行良好的 HAProxy 服务器。请注意，您必须使用 Elastic Load Balancing 作为前端负载均衡器； HAProxy 服务器无法将请求分发到其他 HAProxy 服务器。