Azure 負載平衡器新分發模式

Yves Pitsch Azure 網絡首席項目經理 git

Azure負載平衡器是一種第四層(TCPUDP)類型的負載平衡器,它能夠將傳入流量分發到雲服務中正常運行的服務實例上,或者分發到負載平衡器集內所定義的虛擬機上。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 PowerShell10月版)

爲虛擬機添加 Azure端點並設置負載平衡器分發模式

Get-AzureVM -ServiceName"mySvc" -Name"MyVM1" | Add-AzureEndpoint -Name"HttpIn" -Protocol"tcp" -PublicPort80 -LocalPort8080LoadBalancerDistribution 「sourceIP」|Update-AzureVM

要使用 2 元組(源 IP、目標 IP),LoadBalancerDistribution設置爲sourceIP要使用 3 元組(源 IP、目標 IP、協議),LoadBalancerDistribution設置爲sourceIPProtocol;若是您想要使用默認的 5 元組負載平衡行爲,LoadBalancerDistribution設置爲none

檢索端點負載平衡器分發模式配置

PS C:\> Get-AzureVMServiceNameMyService」 –NameMyVM」 | 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 -ProbePort8080LoadBalancerDistribution"sourceIP"

雲服務示例

您可使用 Azure SDK for .NET2.511月發佈)更新您的雲服務

雲服務的端點設置在 .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/


相關文章
相關標籤/搜索