排查您的 Network Load Balancer 问题 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

排查您的 Network Load Balancer 问题

以下信息可帮助您排查与 Network Load Balancer 相关的问题。

已注册目标未处于可用状态

如果目标进入 InService 状态所花费的时间超过预期,则该目标可能无法通过运行状况检查。您的目标未处于可用状态,除非通过一次运行状况检查。有关更多信息,请参阅 网络负载均衡器目标组的运行状况检查

验证您的实例是否通过运行状况检查,然后检查以下各项:

安全组不允许流量

与实例关联的安全组必须允许来自负载均衡器的使用运行状况检查端口和运行状况检查协议的流量。有关更多信息,请参阅 目标安全组

网络访问控制列表 (ACL) 不允许流量

与您的实例的子网ACL关联的网络以及您的负载均衡器的子网必须允许来自负载均衡器的流量和运行状况检查。有关更多信息,请参阅 网络 ACLs

请求未路由至目标

检查以下各项:

安全组不允许流量

与实例相关联的安全组必须允许侦听器端口上来自客户端 IP 地址 (如果目标通过实例 ID 指定) 或负载均衡器节点 (如果目标通过 IP 地址指定) 的流量。有关更多信息,请参阅 目标安全组

网络访问控制列表 (ACL) 不允许流量

与您的子网ACLs关联的网络VPC必须允许负载均衡器和目标在侦听器端口上进行双向通信。有关更多信息,请参阅 网络 ACLs

目标处于未启用的可用区中

如果您在可用区中注册目标但未启用该可用区,这些已注册目标将无法从负载均衡器接收流量。

该实例处于对等状态 VPC

如果您在中有与负载均衡器对等的实例VPC,则必须通过 IP 地址而不是实例 ID 向负载均衡器注册这些实例。VPC

目标接收比预期更多的运行状况检查请求

Network Load Balancer 的运行状况检查是分布式的,使用共识机制来确定目标运行状况。因此,目标可以接收的运行状况检查数量可以超过通过 HealthCheckIntervalSeconds 设置配置的数量。

目标接收比预期更少的运行状况检查请求

检查是否启用了 net.ipv4.tcp_tw_recycle。已知此设置会导致负载均衡器出现问题。net.ipv4.tcp_tw_reuse 设置被认为是更安全的替代设置。

运行状况不佳的目标收到来自负载均衡器的请求

当所有注册的目标皆运行状况不佳时,就会发生这种情况。如果至少有一个运行正常的已注册目标,则网络负载均衡器仅将请求路由到运行正常的已注册目标。

如果只有运行状况不佳的已注册目标,则网络负载均衡器会将请求路由到所有已注册目标(即失效时开放模式)。Network Load Balancer 不会在所有目标都运行状况不佳且相应的可用区没有运行正常的目标可以向其发送请求DNS时删除所有 IP 地址。

由于主机标头不匹配而导致目标失败HTTP或运行HTTPS状况检查

运行状况检查请求中的HTTP主机标头包含负载均衡器节点的 IP 地址和侦听器端口,而不是目标的 IP 地址和运行状况检查端口。如果要按主机标头映射传入的请求,则必须确保运行状况检查与任何HTTP主机标头相匹配。另一种选择是在不同的端口上添加单独的HTTP服务,然后将目标组配置为改用该端口进行运行状况检查。或者,可以考虑使用运行TCP状况检查。

无法将安全组与网络负载均衡器关联

如果创建网络负载均衡器时没有关联安全组,则在创建后将无法关联安全组。您只能在创建时将安全组与负载均衡器相关联,或将安全组与最初使用安全组创建的现有负载均衡器相关联。

无法删除所有安全组

如果创建网络负载均衡器时关联了安全组,则必须始终至少有一个与之关联的安全组。您不能从负载均衡器中同时删除所有安全组。

__Reset TCP ELB _Count 指标的增加

对于客户端通过 Network Load Balancer 发出的每个TCP请求,都会跟踪该连接的状态。如果客户端或目标通过连接发送数据的间隔超过空闲超时期限,则连接将关闭。如果客户端或目标在空闲超时时间过后发送数据,则它会收到一个TCPRST数据包,表示连接已失效。此外,如果目标运行状况不佳,则负载均衡器会TCPRST针对在与该目标关联的客户端连接上收到的数据包发送,除非运行状况不佳的目标触发负载均衡器失效打开。

如果您在指标增加之前或刚好看到TCP_ELB_Reset_Count指标出现峰值,则发送TCPRST数据包可能是因为目标开始出现故障,但并未被标记为不健康。UnhealthyHostCount如果您在TCP_ELB_Reset_Count没有将目标标记为不健康的情况下看到持续增长,则可以查看VPC流日志中是否有客户端发送有关过期流的数据。

从目标到其负载均衡器的请求连接超时

检查目标组上是否启用了客户端 IP 保留。 NAT启用客户端 IP 保留后,不支持环回,也称为发夹功能。如果实例是它注册到的负载均衡器的客户端,且它启用了客户端 IP 保留,则连接仅在请求路由到不同的实例时才会成功。如果请求路由到发送请求的同一个实例,连接会超时,因为源地址和目的地 IP 地址相同。

如果实例必须将请求发送到它注册到的负载均衡器,请执行下列操作之一:

  • 禁用客户端 IP 保留。

  • 确保必须相互通信的容器位于不同的容器实例上。

当将目标移到 Network Load Balancer 时,性能会下降

Classic Load Balancer 和 Application Load Balancer 都使用多路复用连接,但 Network Load Balancer 不使用。因此,您的目标可以通过 Network Load Balancer 接收更多TCP连接。请确保您的目标准备好处理它们可能会收到的连接请求量。

如果您的 Network Load Balancer 与VPC终端节点服务关联,则它支持与每个唯一目标(IP 地址和端口)的 55,000 个同步连接或每分钟大约 55,000 个连接。如果连接数超过该值,则会增大出现端口分配错误的几率。可以使用 PortAllocationErrorCount 指标跟踪端口分配错误。要修复端口分配错误,请将更多目标添加到目标组。有关更多信息,请参阅 CloudWatch 您的 Network Load Balancer 的指标

间歇性TCP连接建立失败或TCP连接建立延迟

启用客户端 IP 地址保留后,客户端可以使用相同的源临时端口连接到不同的目标 IP 地址。启用跨区域负载平衡后,这些目标 IP 地址可以来自同一个负载均衡器(位于不同的可用区),也可以来自使用相同目标 IP 地址和注册端口的不同网络负载均衡器。在这种情况下,如果将这些连接路由到相同的目标 IP 地址和端口,则目标将看到重复的连接,因为它们来自相同的客户端 IP 地址和端口。在建立其中一个连接时,这会导致连接错误和延迟。当客户端前面有一台NAT设备,同时连接到多个 Network Load Balancer IP 地址时,分配了相同的源 IP 地址和源端口,则经常会发生这种情况。

您可以通过增加客户端或NAT设备分配的源临时端口数量或增加负载均衡器的目标数量来减少此类连接错误。我们建议客户端在这些连接失败后更改重新连接时使用的源端口。为了防止此类连接错误,如果您使用的是单个 Network Load Balancer,则可以考虑禁用跨区域负载均衡,或者如果使用多个网络负载均衡器,则可以考虑不使用在多个目标组中注册的相同目标 IP 地址和端口。或者,您可以考虑禁用客户端 IP 保留。如果你需要客户端 IP,你可以使用代理协议 v2 来检索它。要了解有关代理协议 v2 的更多信息,请参阅代理协议

预置负载均衡器时可能出现故障

Network Load Balancer 在配置时可能失败的原因之一是,如果您使用已在其他地方分配或分配的 IP 地址(例如,分配为EC2实例的辅助 IP 地址)。此 IP 地址阻止设置负载均衡器,其状态为 failed。您可以通过取消分配关联的 IP 地址并重试创建过程来解决此问题。

DNS名称解析包含的 IP 地址少于启用的可用区

理想情况下,可用区中至少有一台运行正常的主机时,网络负载均衡器会为每个已启用的可用区提供一个 IP 地址。当特定可用区中没有正常运行的主机并且跨区域负载平衡被禁用时,将从DNS该可用区中删除相应的 Network Load Balancer 的 IP 地址。

例如,假设您的网络负载均衡器启用了三个可用区,则所有可用区都至少有一个运行正常的已注册目标实例。

  • 如果可用区 A 中注册的目标实例运行状况不佳,则会从DNS中移除 Network Load Balancer 可用区 A 的相应 IP 地址。

  • 如果任何两个已启用的可用区没有运行良好的注册目标实例,则将从中删除 Network Load Balancer 的相应两个 IP 地址DNS。

  • 如果在所有已启用的可用区中都没有运行良好的注册目标实例,则会启用失效开放模式,DNS并将提供结果中启用的三个 IP 地址AZs中的所有 IP 地址。

使用资源地图对运行状况不佳的目标进行故障排除

如果您的网络负载均衡器目标未通过运行状况检查,则可以使用资源地图查找运行状况不佳的目标并根据失败原因代码采取措施。有关更多信息,请参阅 查看网络负载均衡器资源地图

资源地图提供了两个视图:概述不正常目标地图。默认情况下,概览处于选中状态,并显示您的负载均衡器的所有资源。选择运行状况不佳的目标地图视图将仅显示与网络负载均衡器关联的每个目标组中运行状况不佳的目标。

注意

必须启用显示资源详细信息才能查看资源地图内所有适用资源的运行状况检查摘要和错误消息。如果未启用,您必须选择每个资源才能查看其详细信息。

目标组列显示每个目标组的正常目标和不正常目标的摘要。这样可以帮助确定是所有目标都未通过运行状况检查,还是只有特定目标失败。如果目标组中的所有目标都未通过运行状况检查,则请检查目标组的运行状况检查设置。选择目标组的名称,以在新选项卡中打开详细信息页面。

目标列显示每个目标的 TargetID 和当前运行状况检查状态。当目标运行状况不佳时,将显示运行状况检查失败的原因代码。当单个目标未通过运行状况检查时,请验证该目标是否有足够的资源。选择目标的 ID,以在新选项卡中打开详细信息页面。

选择 “导出” 后,您可以选择将网络负载均衡器资源图的当前视图导出为PDF。

验证您的实例是否未通过运行状况检查,然后根据失败原因代码检查以下问题:

  • 运行状况不佳:请求超时

    • 验证与您的目标关联的安全组和网络访问控制列表 (ACL) 以及 Network Load Balancer 是否阻塞连接。

    • 验证目标具有足够的可用容量来接受来自网络负载均衡器的连接。

    • 在每个目标的应用程序日志中,可以查看网络负载均衡器的运行状况检查响应。有关更多信息,请参阅运行状况检查原因代码

  • 不健康: FailedHealthChecks

    • 验证目标正在侦听运行状况检查端口上的流量。

      使用TLS监听器时

      您选择用于前端连接的安全策略。用于后端连接的安全策略是根据正在使用的前端安全策略自动选择的。

      • 如果您的TLS监听器对前端连接使用 TLS 1.3 安全策略,则该ELBSecurityPolicy-TLS13-1-0-2021-06安全策略将用于后端连接。

      • 如果您的TLS监听器未对前端连接使用 TLS 1.3 安全策略,则该ELBSecurityPolicy-2016-08安全策略将用于后端连接。

      有关更多信息,请参阅安全策略

    • 验证目标是否以安全策略指定的正确格式提供了服务器证书和密钥。

    • 验证目标是否支持一个或多个匹配的密码,以及 Network Load Balancer 提供的用于建立TLS握手的协议。