

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

# HAProxy OpsWorks 堆叠层
<a name="layers-haproxy"></a>

**注意**  
该层仅适用于 Chef 11 和更早的基于 Linux 的堆栈。

 OpsWorks Stacks HAProxy 层是一个 OpsWorks 堆栈层，它为托管[HAProxy](http://haproxy.1wt.eu/)服务器的实例提供了蓝图，即可靠的高性能 TCP/HTTP 负载平衡。一个小型实例通常足以处理全部应用程序服务器流量。

**注意**  
堆栈限于单个区域。要跨多个区域分发应用程序，必须为每个区域创建一个单独的堆栈。

**创建图 HAProxy 层**

1. 在导航窗格中，单击 **Layers (层)**。

1. 在 **Layers** 页面上，单击 **Add a Layer** 或 **\$1 Layer**。对于 “**图层类型**”，选择**HAProxy**。

该层具有以下配置设置，且全部为可选。

**HAProxy 统计数据**  
该层是否收集并显示统计信息。默认值是 **Yes**。

**Statistics URL**  
统计信息页面的 URL 路径。完整的 URL 是 http://*DNSName**StatisticsPath*，其中*DNSName*是关联实例的 DNS 名称。默认*StatisticsPath*值是 /haproxy？ 统计数据，对应于：http://ec2-54-245-151-7.us-west-2.compute.amazonaws.com/haproxy?stats。

**Statistics user name**  
统计信息页面的用户名，必须提供该用户名才能查看统计信息页面。默认值为 “Opsworks”。

**Statistics password**  
统计信息页面的密码，必须提供该密码才能查看统计信息页面。默认值是一个随机生成的字符串。

**Health check URL**  
运行状况检查 URL 后缀。 HAProxy 使用此 URL 定期在每个应用服务器实例上调用 HTTP 方法，以确定该实例是否正常运行。如果运行状况检查失败，则 HAProxy 停止将流量路由到实例，直到实例重新启动（手动或通过 a [uto healing）。](workinginstances-autohealing.md)URL 后缀的默认值为 “/”，它对应于服务器实例的主页：http://*DNSName*。

**Health check method**  
用于检查实例是否在正常运行的 HTTP 方法。默认值为 **OPTIONS**，您也可以指定 **GET** 或 **HEAD**。有关更多信息，请参阅 [httpchk](http://cbonte.github.io/haproxy-dconv/configuration-1.5.html)。

**自定义安全组**  
如果您选择不自动将内置 OpsWorks Stacks 安全组与您的图层关联，则会显示此设置。您必须指定要将哪一安全组与层关联起来。确保该组具有正确的设置以便允许层之间的流量。有关更多信息，请参阅 [创建新堆栈](workingstacks-creating.md)。

![\[HAProxy layer configuration form with options for statistics and health check settings.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/add_layer_haproxy.png)


**注意**  
记录密码以备后用； OpsWorks Stacks 不允许您在创建图层后查看密码。不过，您可以通过转到该层的 **Edit** 页面，然后单击 **General Settings** 选项卡上的 **Update password** 来更新密码。  

![\[HAProxy layer settings interface with options for statistics, health checks, and auto healing.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/haproxy_update_password.png)


## HAProxy 图层的工作原理
<a name="w2ab1c14c71b9c21c13c19"></a>

默认情况下，执行以下 HAProxy 操作：
+ 侦听 HTTP 和 HTTPS 端口上的请求。

  您可以通过覆盖 Chef 配置模板 HAProxy 来配置为仅监听 HTTP 或 HTTPS 端口。`haproxy.cfg.erb`
+ 将传入流量路由到属于任何应用程序服务器层成员的实例。

  默认情况下， OpsWorks Stacks 配置为将流量分发 HAProxy 到属于任何应用程序服务器层成员的实例。例如，你可以有一个同时包含 Rails App Server 和 PHP App Server 层的堆栈，而 HAProxy 主服务器则将流量分发到两层的实例。可以使用自定义配方来配置默认路由。
+ 跨多个可用区路由流量。

  如果一个可用区出现故障，负载均衡器则将传入流量路由到其他区域的实例，这样您的应用程序可以继续运行而不会中断。为此，我们建议您将您的应用程序服务器分散在多个可用区。
+ 定期在每个应用程序服务器实例上运行指定的运行状况检查方法以评估其状况。

  如果该方法未在指定的超时时间内返回，则假定该实例已失败并 HAProxy 停止将请求路由到该实例。 OpsWorks 堆栈还提供了一种自动替换失败实例的方法。有关更多信息，请参阅 [使用自动修复](workinginstances-autohealing.md)。您可以在创建层时更改运行状况检查方法。
+ 收集统计信息并在网页上显示 (可选)。

**重要**  
要让采用默认 OPTIONS 方法的运行状况检查正确工作，您的应用程序必须返回状态代码 2xx 或 3xx。

默认情况下，当您将实例添加到 HAProxy 层时， OpsWorks Stacks 会为其分配一个弹性 IP 地址来代表该应用程序，该地址向全世界公开。因为 HAProxy 实例的弹性 IP 地址是应用程序唯一公开的 URL，所以您不必为底层应用程序服务器实例创建和管理公有域名。您可以通过转至 **Instances** 页并检查实例的公有 IP 地址来获得该地址，如下图所示。地址后面跟 (EIP) 表明是弹性 IP 地址。有关弹性 IP 地址的更多信息，请参阅[弹性 IP 地址 (EIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)。

![\[HAProxy instance table showing hostname, status, size, type, AZ, and public IP address.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/load_balancer_elastic_ip.png)


当您停止 HAProxy 实例时， OpsWorks Stacks 会保留弹性 IP 地址，并在您重启实例时将其重新分配给该实例。如果您删除 HAProxy 实例，默认情况下， OpsWorks Stacks 会删除该实例的 IP 地址。要保留该地址，请清除 **Delete instance's Elastic IP** 选项，如下图所示。

![\[HAProxy instance deletion confirmation dialog with option to retain Elastic IP address.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/delete_lb.png)


该选项会影响当您在层中添加新实例以替换被删除的实例时发生的情况：
+ 如果您保留了已删除实例的弹性 IP 地址， OpsWorks Stacks 会将该地址分配给新实例。
+ 否则， OpsWorks Stacks 会为该实例分配一个新的弹性 IP 地址，您必须更新 DNS 注册商设置以映射到新地址。

当应用程序服务器实例上线或离线 (不论是手动还是作为[自动扩展](workinginstances-autoscaling.md)或[自动修复](workinginstances-autohealing.md)的结果)，负载均衡器配置都必须更新以将流量路由到当前的联机实例集。该任务由层的内置配方自动处理：
+ 当新实例上线时， OpsWorks Stacks 会触发配置[生命周期事件](workingcookbook-events.md)。该 HAProxy 层的内置 Configure 配方会更新负载均衡器配置，因此它还可以将请求分发到任何新的应用程序服务器实例。
+ 当实例脱机或实例未通过运行状况检查时， OpsWorks Stacks 还会触发配置生命周期事件。 HAProxy 配置配方更新负载均衡器配置，仅将流量路由到剩余的在线实例。

最后，您还可以在 HAProxy 图层中使用自定义域。有关更多信息，请参阅 [使用自定义域](workingapps-domains.md)。

## 统计信息页面
<a name="w2ab1c14c71b9c21c13c21"></a>

如果您启用了统计页面，则会在指定 URL 上 HAProxy 显示一个包含各种指标的页面。

**查看 HAProxy 统计数据**

1. 从 HAProxy 实例的**详细信息**页面获取实例的**公有 DNS** 名称并将其复制。

1. 在 **Layers (层)** 页面上，单击 **HAProxy** 以打开层的详细信息页面。

1. 从层的详细信息中获取统计信息 URL 并将其附加到公有 DNS 名称后。例如：**http://ec2-54-245-102-172.us-west-2.compute.amazonaws.com/haproxy?stats**。

1. 将来自上一步的 URL 粘贴到浏览器中，用您在创建层时指定的用户名和密码打开统计信息页面。  
![\[HAProxy statistics report showing process information and session data for frontend and backend servers.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/haproxy_stats.png)