Azure 负载均衡器的工作原理
Azure 负载均衡器在 OSI 模型的传输层上运行。 此第 4 层功能允许基于流量的特定属性进行流量管理。 属性包括源地址和目标地址、TCP 或 UDP 协议类型和端口号。
负载均衡器有多个元素协同工作,以确保应用程序的高可用性和性能:
- 前端 IP
- 负载均衡器规则
- 后端池
- 健康探测
- 入站 NAT 规则
- 高可用性端口
- 出站规则
前端 IP
前端 IP 地址是客户端用于连接到 Web 应用程序的地址。 前端 IP 地址可以是公共 IP 地址,也可以是专用 IP 地址。 Azure 负载均衡器可以有多个前端 IP。 选择公共或专用 IP 地址可确定要创建的负载均衡器类型:
公共 IP 地址:公共负载均衡器:公共负载均衡器将传入流量的公共 IP 和端口映射到 VM 的专用 IP 和端口。 你可以通过应用负载均衡规则,在多个 VM 或服务之间分配特定类型的流量。 例如,可将 Web 请求流量负载分配到多个 Web 服务器。 负载均衡器将来自 VM 的专用 IP 和端口的响应流量映射到负载均衡器的公共 IP 和端口。 然后,它将响应传输回请求客户端。
专用 IP 地址:内部负载均衡器:内部负载均衡器将流量分配到虚拟网络中的资源。 Azure 限制对负载均衡的虚拟网络的前端 IP 地址的访问。 前端 IP 地址和虚拟网络永远不会直接暴露给互联网终结点。 内部业务线应用程序在 Azure 中运行,可通过 VPN 或 ExpressRoute 连接从 Azure 内部或本地资源进行访问。
负载均衡器规则
负载均衡器规则定义如何将流量分发到后端池。 该规则将给定的前端 IP 和端口组合映射到一组后端 IP 地址和端口组合。
通过运用由以下元素组成的五元组哈希来管理流量:
- 源 IP:发出请求的客户端的 IP 地址。
- 源端口:发出请求的客户端的端口。
- 目标 IP:请求的目标 IP 地址。
- 目标端口:请求的目标端口。
- 协议类型:指定的协议类型、TCP 或 UDP。
- 会话相关性:确保同一池节点始终处理客户端的流量。
负载均衡器允许对多个端口、多个 IP 地址或两者中的服务进行负载均衡。 可以为每个前端 IP 配置不同的负载均衡规则。 只有 IaaS VM 支持多个前端配置。
负载均衡器不能根据内部流量内容应用不同的规则,因为它在 OSI 模型的第 4 层(传输层)上运行。 如果需要根据其第 7 层(应用程序层)属性管理流量,则需要部署 Azure 应用程序网关等解决方案。
后端池
后端池是虚拟机规模集中的一组 VM 或实例,用于响应传入请求。 为了经济高效地缩放以满足大量传入流量,计算指南通常建议将更多实例添加到后端池。
负载均衡器实现自动重新配置,以在纵向扩展或缩减实例时,在更改的实例数之间重新分配负载。 例如,如果将另外两个 VM 实例添加到后端池,负载均衡器会重新配置自身,以基于已配置的负载均衡规则开始均衡发往这些实例的流量。
健康探测
运行状况探测用于确定后端池中实例的运行状况。 此运行状况探测确定实例是否正常并可以接收流量。 可以定义运行状况探测的不正常阈值。 当探测无法响应时,负载均衡器会停止向状况不良的实例发送新连接。 探测失败不会影响现有连接。 连接一直持续到:
- 应用结束流程。
- 出现空闲超时。
- 虚拟机停止运行。
负载均衡器允许为终结点配置不同的运行状况探测类型:TCP、HTTP 和 HTTPS。
- TCP 自定义探测:此探测依赖于将成功的 TCP 会话建立到定义的探测端口。 如果 VM 上的指定侦听器存在,探测会成功。 如果连接被拒绝,此探测将会失败。 可指定“端口”、“间隔”和“运行不正常阈值”。
- HTTP 或 HTTPS 自定义探测:负载均衡器定期探测终结点(默认每隔 15 秒)。 如果实例在超时期限内使用 HTTP 200 进行响应(默认值为 31 秒),则实例正常。 HTTP 200 以外的任何状态都会导致探测失败。 可以指定端口(Port)、用于从后端请求运行状况的 URI(URI)、探测尝试之间的时间间隔(Interval),以及实例被视为异常所需失败次数的阈值(异常阈值)。
会话持久性
默认情况下,负载均衡器在多个 VM 实例之间平均分配网络流量。 它仅在传输会话内部提供粘性。 会话持久性指定应如何处理来自客户端的流量。 默认行为(无)是任何正常的 VM 都可以处理来自客户端的连续请求。
会话持久性也称为会话相关性、源 IP 相关性或客户端 IP 相关性。 此分发模式使用双元组(源 IP 和目标 IP)或三元组(源 IP、目标 IP 和协议类型)哈希路由到后端实例。 使用会话持久性时,来自同一客户端的连接将转到后端池中的同一后端实例。 可以配置以下会话持久性选项之一:
- 无(默认值):指定任何正常的 VM 都可以处理请求。
- 客户端 IP (2 元组):指定同一后端实例可以处理来自同一客户端 IP 地址的连续请求。
- 客户端 IP 和协议(3 元组):指定同一后端实例可以处理来自同一客户端 IP 地址和协议组合的连续请求。
可以通过配置以下部分中介绍的选项之一来更改此行为。
高可用性端口
配置的 protocol - all and port - 0
负载均衡器规则称为 高可用性(HA)端口规则。 此规则允许单个规则对到达内部标准负载均衡器的所有端口的所有 TCP 和 UDP 流进行负载均衡。
按流进行负载均衡决策。 此操作基于以下五个元组连接:
- 源 IP 地址
- 源端口
- 目标 IP 地址
- 目标端口
- 协议
HA 端口的高可用负载均衡规则可以帮助解决关键场景,例如提升虚拟网络中的网络虚拟设备(NVA)的高可用性和扩展性。 当必须对大量端口进行负载均衡时,此功能会有所帮助。
入站 NAT 规则
可以将负载均衡规则与网络地址转换(NAT)规则结合使用。 例如,可以在特定 VM 上使用从负载均衡器的公共地址到 TCP 3389 的 NAT。 此规则组合允许从 Azure 外部进行远程桌面访问。
出站规则
出站规则为由后端池标识的所有 VM 或实例配置源网络地址转换 (SNAT)。 此规则使后端中的实例能够与 Internet 或其他公共终结点进行通信(出站)。