Yves Pitsch Azure 網絡首席項目經理 git
Azure負載平衡器是一種第四層(TCP、UDP)類型的負載平衡器,它能夠將傳入流量分發到雲服務中正常運行的服務實例上,或者分發到負載平衡器集內所定義的虛擬機上。github
使用的分發算法是一種將流量映射到可用服務器的 5元組(源 IP、源端口、目標 IP、目標端口、協議類型)哈希。這種算法只能在傳輸會話中提供親和性。同一個 TCP 或 UDP 會話中的數據包將被導向到負載平衡端點後的同一個數據中心 IP (DIP)實例上。當客戶端關閉並從新打開鏈接或者從同一個源 IP開始新的會話時,源端口就會發生變化並會致使流量傳輸到不一樣的 DIP端點。算法
咱們引入了一種稱爲源 IP 關聯(也稱爲會話關聯或客戶端 IP 關聯)的新分發模式。Azure 負載平衡器能夠配置爲使用 2 元組(源 IP、目標 IP)或 3元組(源 IP、目標 IP、協議)將流量映射到可用服務器上。使用源 IP關聯,同一客戶端計算機上發起的鏈接都會轉到同一個 DIP端點。windows
源 IP 關聯解決了Azure 負載平衡器和 RD 網關不兼容的問題。如今您能夠在單個雲服務中構建 RD 網關場。服務器
另外一個使用場景是媒體上傳,在這種場景下,實際的數據上傳經過 UDP實現,而控制層則經過 TCP實現:網絡
· 客戶端先向負載平衡公共地址發起 TCP會話,而後被導向至特定 DIP,這個通道將保持活動狀態,用於監控鏈接情況。app
· 同一個客戶端計算機向同一個負載平衡公共端點發起新的 UDP會話,這裏咱們想要看到的是,這個鏈接也被導向至與前面 TCP鏈接相同的 DIP 端點,使媒體上傳可以以高吞吐量執行的同時也可以維持 TCP控制通道。tcp
請注意,若是負載平衡集發生了變化(刪除或添加虛擬機),客戶端請求的分發會從新計算。若是現有客戶端會話有新的鏈接,您不能確保這些新的鏈接會發送至同一個服務器上。此外,使用源 IP關聯分發模式可能會致使流量分佈不均。使用代理的多個客戶端可能會被視爲一個惟一的客戶端應用程序。spa
場景.net
· 使用 PowerShell或服務管理 API爲虛擬機上的端點配置負載平衡器分發
· 使用 PowerShell或服務管理 API爲負載平衡端點集配置負載平衡器分發。
· 經過服務模型爲 Web/Worker Role配置負載平衡器分發。
PowerShell 示例
確保下載並安裝最新的 Azure PowerShell(10月版)
爲虛擬機添加 Azure端點並設置負載平衡器分發模式
Get-AzureVM -ServiceName"mySvc" -Name"MyVM1" | Add-AzureEndpoint -Name"HttpIn" -Protocol"tcp" -PublicPort80 -LocalPort8080 –LoadBalancerDistribution 「sourceIP」|Update-AzureVM |
要使用 2 元組(源 IP、目標 IP),LoadBalancerDistribution應設置爲sourceIP;要使用 3 元組(源 IP、目標 IP、協議),LoadBalancerDistribution應設置爲sourceIPProtocol;若是您想要使用默認的 5 元組負載平衡行爲,LoadBalancerDistribution應設置爲none。
檢索端點負載平衡器分發模式配置
PS C:\> Get-AzureVM –ServiceName 「MyService」 –Name 「MyVM」 | Get-AzureEndpoint
VERBOSE:6:43:50 PM -CompletedOperation:GetDeployment
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 -LocalPort80 -ProbeProtocolTCP -ProbePort8080 –LoadBalancerDistribution"sourceIP"
雲服務示例
您可使用 Azure SDK for .NET2.5(11月發佈)更新您的雲服務
雲服務的端點設置在 .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 示例
要進行負載平衡器分發配置,可使用服務管理 API
確保將添加的 x-ms-version頭設置爲 2014-09-01或更高版本。
更新部署中指定負載平衡集的配置
請求示例
POSThttps://management.core.windows.net/<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 元組關聯,LoadBalancerDistribution的值應是sourceIP;要使用 3 元組關聯,LoadBalancerDistribution的值應是sourceIPProtocol;要無關聯(即 5 元組),LoadBalancerDistribution的值應是none
響應
HTTP/1.1 202Accepted
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,16Oct2014 22:49:21 GMT
若是你有任何疑問,歡迎訪問MSDN社區,由專家來爲您解答Windows Azure各類技術問題,或者撥打世紀互聯客戶服務熱線400-089-0365/010-84563652諮詢各種服務信息。
本文翻譯自:http://azure.microsoft.com/blog/2014/10/30/azure-load-balancer-new-distribution-mode/。