zoukankan      html  css  js  c++  java
  • Azure 负载平衡器新分发模式

    Yves Pitsch Azure 网络首席项目经理 

    Azure负载平衡器是一种第四层(TCPUDP)类型的负载平衡器,它可以将传入流量分发到云服务中正常运行的服务实例上,或者分发到负载平衡器集内所定义的虚拟机上。

    使用的分发算法是一种将流量映射到可用服务器的 5元组(源 IP、源端口、目标 IP、目标端口、协议类型)哈希。这种算法只能在传输会话中提供亲和性。同一个 TCP UDP 会话中的数据包将被导向到负载平衡端点后的同一个数据中心 IP (DIP)实例上。当客户端关闭并重新打开连接或者从同一个源 IP开始新的会话时,源端口就会发生变化并会导致流量传输到不同的 DIP端点。

    我们引入了一种称为源 IP 关联(也称为会话关联或客户端 IP 关联)的新分发模式。Azure 负载平衡器可以配置为使用 2 元组(源 IP、目标 IP)或 3元组(源 IP、目标 IP、协议)将流量映射到可用服务器上。使用源 IP关联,同一客户端计算机上发起的连接都会转到同一个 DIP端点。

    IP 关联解决了Azure 负载平衡器和 RD 网关不兼容的问题。现在您可以在单个云服务中构建 RD 网关场。

    另一个使用场景是媒体上传,在这种场景下,实际的数据上传通过 UDP实现,而控制层则通过 TCP实现:

    ·        客户端先向负载平衡公共地址发起 TCP会话,然后被导向至特定 DIP,这个通道将保持活动状态,用于监控连接状况。

    ·        同一个客户端计算机向同一个负载平衡公共端点发起新的 UDP会话,这里我们想要看到的是,这个连接也被导向至与前面 TCP连接相同的 DIP 端点,使媒体上传能够以高吞吐量执行的同时也能够维持 TCP控制通道。

    请注意,如果负载平衡集发生了变化(删除或添加虚拟机),客户端请求的分发会重新计算。如果现有客户端会话有新的连接,您不能确保这些新的连接会发送至同一个服务器上。此外,使用源 IP关联分发模式可能会导致流量分布不均。使用代理的多个客户端可能会被视为一个唯一的客户端应用程序。

    场景

    ·        使用 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/

    
  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/new0801/p/6176152.html
Copyright © 2011-2022 走看看