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 内或从本地资源访问。
负载均衡器规则
负载均衡器规则定义如何将流量分配给后端池。 规则将给定的前端 IP 和端口组合映射到一组后端 IP 地址和端口组合。
流量通过使用由以下元素组成的 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) 的高可用性和缩放。 必须对大量端口进行负载均衡时,此功能可提供帮助。
入站 NAT 规则
可以将负载均衡规则与网络地址转换 (NAT) 规则结合使用。 例如,可在特定 VM 上使用从负载均衡器的公共地址到 TCP 3389 的 NAT。 此规则组合支持从 Azure 外部进行远程桌面访问。
出站规则
出站规则为由后端池标识的所有 VM 或实例配置源网络地址转换 (SNAT)。 此规则使后端中的实例能够与 Internet 或其他公共终结点进行通信(出站)。