配置 Azure 负载均衡器的分配模式

Important

Azure 负载均衡器支持两种不同的类型:“基本”和“标准”。 本文介绍基本负载均衡器。 虽然基本负载均衡器已推出正式版,但标准负载均衡器目前在中国区域仍然无效。

基于哈希的分发模式

Azure 负载均衡器的默认分配模式是 5 元组哈希。 元组由源 IP、源端口、目标 IP、目标端口、和协议类型构成。 哈希用于将流量映射到可用的服务器,算法仅在传输会话内部提供粘性。 同一会话中的数据包会定向到经过负载均衡的终结点后面的同一数据中心 IP (DIP) 实例。 客户端从同一源 IP 发起新会话时,源端口会更改,并导致流量定向到其他 DIP 终结点。

基于 5 元组哈希的分配模式

源 IP 关联模式

还可以使用源 IP 关联分配模式配置负载均衡器。 此分配模式也称为为会话关联或客户端 IP 关联。 该模式使用 2 元组(源 IP 和目标 IP)或 3 元组(源 IP、目标 IP 和协议)哈希将流量映射到可用的服务器。 使用源 IP 关联,从同一客户端计算机发起的连接会进入同一个 DIP 终结点。

下图演示 2 元组配置。 请注意 2 元组如何从负载均衡器运行到虚拟机 1 (VM1)。 VM1 随后由 VM2 和 VM3 备份。

2 元组会话关联分配模式

源 IP 关联模式解决了 Azure 负载均衡器与远程桌面网关(RD 网关)之间的不兼容问题。 使用此模式可在单个云服务中生成 RD 网关场。

另一个用例方案是媒体上传。 数据上传通过 UDP 进行,但控制平面通过 TCP 实现:

  • 客户端与负载均衡的公共地址发起 TCP 会话,然后定向到特定 DIP。 通道将保持活动状态以监视连接运行状况。
  • 来自同一客户端计算机的新 UDP 会话在同一个负载均衡公共终结点中发起。 连接像前面的 TCP 连接一样定向到同一个 DIP 终结点。 能够以较高的吞吐量执行媒体上传,同时通过 TCP 维护控制通道。

Note

如果通过删除或添加虚拟机来更改负载均衡集,则会重新计算客户端请求的分配。 无法确保现有客户端的新连接最终都会抵达同一台服务器。 此外,使用源 IP 关联分配模式可能导致流量的不均衡分配。 在代理后面运行的客户端可被视为唯一的客户端应用程序。

配置源 IP 关联设置

对于虚拟机,可以使用 Azure PowerShell 来更改超时设置。 将 Azure 终结点添加到虚拟机并配置负载均衡器分配模式:

Get-AzureVM -ServiceName mySvc -Name MyVM1 | Add-AzureEndpoint -Name HttpIn -Protocol TCP -PublicPort 80 -LocalPort 8080 -LoadBalancerDistribution sourceIP | Update-AzureVM

设置 LoadBalancerDistribution 元素的值,实现所需的负载均衡量。 为 2 元组(源 IP 和目标 IP)负载均衡指定 sourceIP。 为 3 元组(源 IP、目标 IP 和协议类型)负载均衡指定 sourceIPProtocol。 为 5 元组负载均衡的默认行为指定 none。

使用以下设置检索终结点负载均衡器分配模式配置:

PS C:\> Get-AzureVM -ServiceName MyService -Name MyVM | Get-AzureEndpoint

VERBOSE: 6:43:50 PM - Completed Operation: Get Deployment
LBSetName : MyLoadBalancedSet
LocalPort : 80
Name : HTTP
Port : 80
Protocol : tcp
Vip : 65.52.xxx.xxx
ProbePath :
ProbePort : 80
ProbeProtocol : tcp
ProbeIntervalInSeconds : 15
ProbeTimeoutInSeconds : 31
EnableDirectServerReturn : False
Acl : {}
InternalLoadBalancerName :
IdleTimeoutInMinutes : 15
LoadBalancerDistribution : sourceIP

如果 LoadBalancerDistribution 元素不存在,Azure 负载均衡器会使用默认的 5 元组算法。

在负载均衡终结点集上配置分配模式

如果终结点是负载均衡终结点集的一部分,则必须在负载均衡终结点集上配置分配模式:

Set-AzureLoadBalancedEndpoint -ServiceName MyService -LBSetName LBSet1 -Protocol TCP -LocalPort 80 -ProbeProtocolTCP -ProbePort 8080 -LoadBalancerDistribution sourceIP

配置云服务终结点的分配模式

使用用于 .NET 的 Azure SDK 2.5 更新云服务。 在 .csdef 中指定云服务的终结点设置。 若要更新云服务部署的负载均衡器分配模式,需要进行部署升级。

下面是终结点设置的 .csdef 更改的示例:

<WorkerRole name="worker-role-name" vmsize="worker-role-size" enableNativeCodeExecution="[true|false]">
    <Endpoints>
    <InputEndpoint name="input-endpoint-name" protocol="[http|https|tcp|udp]" localPort="local-port-number" port="port-number" certificate="certificate-name" loadBalancerProbe="load-balancer-probe-name" loadBalancerDistribution="sourceIP" />
    </Endpoints>
</WorkerRole>
<NetworkConfiguration>
    <VirtualNetworkSite name="VNet"/>
    <AddressAssignments>
<InstanceAddress roleName="VMRolePersisted">
    <PublicIPs>
    <PublicIP name="public-ip-name" idleTimeoutInMinutes="timeout-in-minutes"/>
    </PublicIPs>
</InstanceAddress>
    </AddressAssignments>
</NetworkConfiguration>

API 示例

以下示例演示如何针对部署中的指定负载均衡集重新配置负载均衡器分配模式。

更改已部署的负载均衡集的分配模式

使用 Azure 经典部署模型更改现有的部署配置。 添加 x-ms-version 标头,并将值设置为版本 2014-09-01 或更高。

请求

POST https://management.core.chinacloudapi.cn/<subscription-id>/services/hostedservices/<cloudservice-name>/deployments/<deployment-name>?comp=UpdateLbSet   x-ms-version: 2014-09-01
Content-Type: application/xml

<LoadBalancedEndpointList xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <InputEndpoint>
    <LoadBalancedEndpointSetName> endpoint-set-name </LoadBalancedEndpointSetName>
    <LocalPort> local-port-number </LocalPort>
    <Port> external-port-number </Port>
    <LoadBalancerProbe>
      <Port> port-assigned-to-probe </Port>
      <Protocol> probe-protocol </Protocol>
      <IntervalInSeconds> interval-of-probe </IntervalInSeconds>
      <TimeoutInSeconds> timeout-for-probe </TimeoutInSeconds>
    </LoadBalancerProbe>
    <Protocol> endpoint-protocol </Protocol>
    <EnableDirectServerReturn> enable-direct-server-return </EnableDirectServerReturn>
    <IdleTimeoutInMinutes>idle-time-out</IdleTimeoutInMinutes>
    <LoadBalancerDistribution>sourceIP</LoadBalancerDistribution>
  </InputEndpoint>
</LoadBalancedEndpointList>

如前所述,针对 2 元组关联、3 元组关联或 5 元组关联,分别将 LoadBalancerDistribution 元素设置为 sourceIP、sourceIPProtocol 或 none(表示无关联)。

响应

HTTP/1.1 202 Accepted
Cache-Control: no-cache
Content-Length: 0
Server: 1.0.6198.146 (rd_rdfe_stable.141015-1306) Microsoft-HTTPAPI/2.0
x-ms-servedbyregion: ussouth2
x-ms-request-id: 9c7bda3e67c621a6b57096323069f7af
Date: Thu, 16 Oct 2014 22:49:21 GMT

后续步骤