对 Azure 负载均衡器进行故障排除

已完成

Azure 负载均衡器在网络堆栈的传输层运行。 负载均衡器播发所有客户端连接到的单个公共 IP 地址。 然后,负载均衡器使用自己的路由和地址转换规则将传入的 TCP 请求定向到一组出站地址中的一个地址。 通常,每个出站地址都与不同的虚拟机 (VM) 相关联,每个虚拟机运行应用程序的实例。

负载均衡器使用运行状况探测来确定后端池中每个 VM 的可用性。 负载均衡器只向指示其处于正常状态的 VM 发送请求。

在示例方案中,你收到了指示负载均衡器无法将请求定向到后端池中的 VM 的警报。 你怀疑最近的网络配置更改可能导致了此问题。 但需要了解网络更改如何影响了负载均衡器的运行。

完成本单元的学习后,你将能够:

  • 描述负载均衡器的典型配置,以及将请求路由到 VM 所涉及的组件。
  • 说明可能导致负载均衡器无法将请求分发到 VM 的常见问题。

负载均衡器的工作原理是什么?

Azure 负载均衡器包括许多组件:

  • 前端 IP 地址
  • VM 地址的后端池
  • 一个或多个路由规则
  • 运行状况探测
  • VM 的集合,通常位于虚拟网络中

下图显示了负载均衡器使用的各种元素如何一起运行。

显示 Azure 负载均衡器组件的图。

前端 IP 地址和后端池

负载均衡器提供从客户端到运行在 VM 集合上的应用程序的透明端到端连接。 负载均衡器将这些 VM 的 IP 地址存储在通常称为“后端池”的存储库中。 负载均衡器向客户端公开自己的前端 IP 地址。 当客户端向该地址发送请求时,负载均衡器将从后端池中选择 VM 的 IP 地址。 然后,负载均衡器通过此后端 IP 地址将请求路由到 VM。

客户端不知道负载均衡器。 客户端可看到 IP 地址或 DNS 名称,并将请求发送到此目标。 此过程和客户端与 VM 直接通信时相同。 请求到达 VM 时,会保留原始客户端的地址。

此外,从客户端发送到 VM 的消息的负载对于负载均衡器来说是不透明的。 负载均衡器不会检查任何消息的内容,也不会对其进行操作。 它将改写消息的地址,以便将其发送到选定的 VM。

负载均衡器使用旨在用于均匀分发请求的算法从后端池中选择 VM 的 IP 地址。 负载均衡器使用以下信息生成哈希:

  • 客户端的源 IP 和端口地址
  • 目标 IP 地址和端口
  • 网络协议

哈希值用作后端池中保存 IP 地址的表的键。

可伸缩性

可以随时启动更多 VM 实例并将其 IP 地址添加到后端池。 负载均衡器在分发用户请求时包含这些新实例。

负载均衡器可以公开多个公共前端 IP 地址,并且可能有多个后端池。 此方案允许重用相同负载均衡器实例来处理针对不同系统的请求。

路由规则

你可以定义负载均衡规则,以指定指向每个前端 IP 地址的请求如何映射到后端池。 负载均衡规则还指定要与之匹配的协议,(可选)以及源(客户端)和目标端口。 负载均衡器放弃到达与协议和端口要求不匹配的前端 IP 地址的传入请求。 负载均衡规则还可以配置会话持久性,使得给定的客户端可将其请求路由到同一 VM,从而允许在 VM 上运行的应用程序利用缓存来保存特定于会话的信息。

运行状况探测

负载均衡器需要确定后端池引用的每个 VM 是否可用于处理请求。 可用性是通过添加运行状况探测来确定的。 运行状况探测将常规 ping 消息发送到为后端池中的 VM 指定的端口。 在 VM 上提供响应这些 ping 消息的服务,其中包含 HTTP 200 (OK) 消息。

当 VM 在指定次数的尝试后无法响应时,负载均衡器会假设它运行不正常,并将其从可接受用户请求的 VM 列表中删除。 然后,将在剩余的正常 VM 之间分发工作负载。 负载均衡器会继续对无响应的 VM 执行 ping 操作。 如果 VM 开始应答,则它会添加回正常的 VM 列表中,并再次开始接收用户请求。

如果不提供运行状况探测,负载均衡器将不知道 VM 是否正常。 相反,它假定所有 VM 都有响应。

虚拟网络

后端池引用的 VM 托管在 Azure 虚拟网络子网中。 可以通过配置网络安全组 (NSG) 来保护此网络中的 VM。 NSG 实现入站和出站安全规则,这些规则可以将进入和输出虚拟网络的流量限制为一组定义明确的终结点。

例如,负载均衡器后端池中的 VM 通常允许从虚拟网络外部到达端口 80 (HTTP) 和端口 443 (HTTPS) 上的入站流量。 但 VM 可能会阻止其他端口上出现的流量。

负载均衡器出现故障的表现和原因

当负载均衡器与后端池中的一个或多个 VM 失去连接时,会出现问题。 典型的表现包括:

  • 无法访问应用程序。
  • 无法访问运行该应用程序的 VM。
  • 响应时间缓慢。
  • 用户请求超时。

这些故障的原因可能有很多。 它们最常与探测问题和数据路径问题相关。

探测问题

当后端池中的一个或多个 VM 无法响应运行状况探测请求时,将导致探测问题。 这些问题可能由以下原因引起:

  • 探测配置不正确,例如 URL 或端口错误。
  • VM 无法响应探测,因为所需的端口未打开。

数据路径问题

当负载均衡器无法将客户端请求路由到在后端池中的 VM 上运行的应用程序时,会出现数据路径问题。 可能的原因包括:

  • NSG 规则或防火墙阻止应用程序使用的端口或 IP 地址。
  • VM 已关闭或未响应。 VM 可能已关闭或失败,或者服务器上存在安全问题,如证书过期。
  • 应用程序未响应。 VM 可能重载,应用程序侦听了错误的端口,或者应用程序崩溃。