Azure 负载均衡器的工作原理

已完成

Azure 负载均衡器在 OSI 模型的传输层运行。 此第 4 层功能允许基于流量的特定属性进行流量管理。 属性包括源地址和目标地址、TCP 或 UDP 协议类型和端口号。

负载均衡器使多个元素协同工作,确保应用程序可用性高且性能高:

  • 前端 IP
  • 负载均衡器规则
  • 后端池
  • 运行状况探测
  • 入站 NAT 规则
  • 高可用性端口
  • 出站规则

前端 IP

前端 IP 地址是连接到 Web 应用程序的客户端所使用的地址。 它可以是公共 IP 地址,也可以是专用 IP 地址。 Azure 负载均衡器可以有多个前端 IP。 选择公共还是专用 IP 地址会确定要创建的负载均衡器的类型:

  • 公共 IP 地址:公共负载均衡器:公共负载均衡器将传入流量的公共 IP 和端口映射到 VM 的专用 IP 地址和端口。 你可以通过应用负载均衡规则,在多个 VM 或服务之间分配特定类型的流量。 例如,可将 Web 请求流量负载分配到多个 Web 服务器。 负载均衡器可将来自 VM 的专用 IP 和端口的响应流量映射到负载均衡器的公共 IP 和端口。 然后,它会将响应传输回请求客户端。

  • 专用 IP 地址:内部负载均衡器:内部负载均衡器将流量分配到虚拟网络中的资源。 Azure 会限制对虚拟网络的负载均衡前端 IP 地址的访问。 前端 IP 地址和虚拟网络不会直接在 Internet 终结点上公开。 内部业务线应用程序在 Azure 中运行,可通过 VPN 或 ExpressRoute 连接从 Azure 内或从本地资源访问。

    Diagram that depicts how public and internal load balancers work in Azure Load Balancer.

负载均衡器规则

负载均衡器规则定义如何将流量分配给后端池。 规则将给定的前端 IP 和端口组合映射到一组后端 IP 地址和端口组合。

Diagram that depicts how load balancer rules work in Azure Load Balancer.

流量通过使用由以下元素组成的 5 元组哈希进行管理:

  • 源 IP:发出请求的客户端的 IP 地址。
  • 源端口:发出请求的客户端的端口。
  • 目标 IP:请求的目标 IP 地址。
  • 目标端口:请求的目标端口。
  • 协议类型:指定的协议类型(TCP 或 UDP)。
  • 会话亲和性:确保同一池节点始终处理客户端的流量。

使用负载均衡器可对多个端口和/或多个 IP 地址上的服务进行负载均衡。 你可以为每个前端 IP 配置不同的负载均衡规则。 只有 IaaS VM 支持多个前端配置。

负载均衡器不能根据内部流量内容应用不同的规则,因为它在 OSI 模型的第 4 层(传输层)上运行。 如果需要基于流量的第 7 层(应用程序层)属性来管理流量,你需要部署一个解决方案,例如 Azure 应用程序网关。

后端池

后端池是虚拟机规模集中响应传入请求的一组 VM 或实例。 为了经济高效地扩展以满足大量传入流量,计算准则通常建议向后端池添加更多实例。

负载均衡器实现自动重新配置,以便在你纵向扩展或缩减实例时,在更改数量后的实例之间重新分配负载。 例如,如果向后端池再添加了两个 VM 实例,负载均衡器会对自身进行重新配置,以根据已配置的负载均衡规则开始均衡传向这些实例的流量。

运行状况探测

运行状况探测用于确定后端池中实例的运行状况。 此运行状况探测确定实例是否正常并可以接收流量。 可以定义运行状况探测的不正常阈值。 当探测无法响应时,负载均衡器会停止向状况不良的实例发送新连接。 探测失败不会影响现有连接。 连接将一直持续到:

  • 应用程序结束流。
  • 出现空闲超时。
  • VM 关闭。

你可以通过负载均衡器为终结点配置不同的运行状况探测类型:TCP、HTTP 和 HTTPS。

  • TCP 自定义探测:此探测依赖于在定义的探测端口上成功建立 TCP 会话。 如果 VM 上存在指定的侦听器,则探测会成功。 如果连接被拒绝,此探测将会失败。 可指定“端口”、“间隔”和“运行不正常阈值”。
  • HTTP 或 HTTPS 自定义探测:负载均衡器定期探测终结点(默认为每隔 15 秒探测一次)。 如果实例在超时期限内(默认为 31 秒)使用 HTTP 200 做出响应,则该实例运行正常。 只要状态不是 HTTP 200,就会导致探测失败。 可指定端口(“端口”)、用于从后端请求运行状况的 URI(“URI”)、探测尝试之间的时间量(“间隔”),以及认为实例运行不正常前必须出现的失败次数(“运行不正常阈值”)。

会话暂留

默认情况下,负载均衡器在多个 VM 实例之间平均分发网络流量。 它仅在传输会话内部提供粘性。 会话持续性指定应如何处理来自客户端的流量。 默认行为(无)是任何正常的 VM 可以处理来自客户端的连续请求。

会话持久性也称为会话亲和性、源 IP 相关性或客户端 IP 相关性。 此分配模式使用二元组(源 IP 和目标 IP)或三元组(源 IP、目标 IP 和协议类型)哈希将流量路由到后端实例。 使用会话持久性时,来自同一个客户端的连接将去往后端池中的同一个后端实例。 你可以配置以下会话持久性选项之一:

  • 无(默认):指定任何正常运行的 VM 均可以处理请求。
  • 客户端 IP(2 元组):指定同一后端实例可以处理来自同一客户端 IP 地址的连续请求。
  • 客户端 IP 和协议(3 元组):指定同一后端实例可以处理来自同一客户端 IP 地址和协议组合的连续请求。

你可以通过配置以下部分所述的选项之一来更改此行为。

高可用性端口

使用 protocol - all and port - 0 配置的负载均衡器规则称为高可用性 (HA) 端口规则。 通过此规则,可以使用单条规则对到达内部标准负载均衡器的所有端口的所有 TCP 和 UDP 流进行负载均衡。

按流进行负载均衡决策。 此操作基于以下五个元组连接:

  • 源 IP 地址
  • Source Port
  • 目标 IP 地址
  • 目标端口
  • 协议

HA 端口负载均衡规则可帮助你实现关键方案,例如虚拟网络中网络虚拟设备 (NVA) 的高可用性和缩放。 必须对大量端口进行负载均衡时,此功能可提供帮助。

Diagram that shows how high availability ports work in Azure Load Balancer.

入站 NAT 规则

可以将负载均衡规则与网络地址转换 (NAT) 规则结合使用。 例如,可在特定 VM 上使用从负载均衡器的公共地址到 TCP 3389 的 NAT。 此规则组合支持从 Azure 外部进行远程桌面访问。

Diagram that shows how inbound NAT rules work in Azure Load Balancer.

出站规则

出站规则为由后端池标识的所有 VM 或实例配置源网络地址转换 (SNAT)。 此规则使后端中的实例能够与 Internet 或其他公共终结点进行通信(出站)。

Diagram that shows how outbound rules work in Azure Load Balancer.