Yves
Pitsch
 Azure 网络首席项目经理

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

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

我们引入了一种称为源 IP
关联(也称为会话关联或客户端 IP
关联)的新分发模式。Azure
负载平衡器可以配置为使用 2
元组(源
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端点并设置负载平衡器分发模式

Get-AzureVM -ServiceName"mySvc" -Name"MyVM1"
| Add-AzureEndpoint -Name"HttpIn" -Protocol"tcp"
- - –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::: PM -CompletedOperation:GetDeployment

LBSetName :MyLoadBalancedSet

Name :HTTP

Protocol : tcp

Vip :65.52.xxx.xxx

ProbePath :

ProbeProtocol : tcp

EnableDirectServerReturn :False

Acl :{}

InternalLoadBalancerName :

LoadBalancerDistribution : sourceIP

元组算法

在负载平衡端点集上设置分发模式

如果端点是负载平衡端点集的一部分,分发模式必须在负载平衡端点集上设置

Set-AzureLoadBalancedEndpoint -ServiceName"MyService" -LBSetName"LBSet1"
- -
–LoadBalancerDistribution"sourceIP"

云服务示例

月发布)更新您的云服务

云服务的端点设置在 .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:--

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/Accepted

Cache-Control:no-cache

-)Microsoft-HTTPAPI/2.0

x-ms-servedbyregion:ussouth2

x-ms-request-id:9c7bda3e67c621a6b57096323069f7af

:: GMT

如果你有任何疑问,欢迎访问MSDN社区,由专家来为您解答Windows
Azure各种技术问题,或者拨打世纪互联客户服务热线400-089-0365/010-84563652咨询各类服务信息。

本文翻译自:http://azure.microsoft.com/blog/2014/10/30/azure-load-balancer-new-distribution-mode/



最新文章

  1. C 格式输出
  2. Java学习笔记(二)&mdash;&mdash;变量与常量
  3. h5图片上传预览与拖拽上传
  4. PHP搜索MYSQL数据库加分页浏览小结
  5. frameset,frame应用,常用于后台
  6. POJ2104&amp;&amp;HDU2665(静态区间第K小)
  7. kvm 对虚拟机里面插u盘
  8. CreateEvent的使用方法
  9. MacOS上的包管理工具
  10. 京东区块排版负margin用法
  11. openstack之Nova
  12. .NET面向对象特性之多态
  13. 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘
  14. Tomcat安装和目录简介
  15. 安装PHP的mongodb驱动速记
  16. 练习使用 __attribute__ 属性(仿照内核)
  17. LeetCode - 768. Max Chunks To Make Sorted II
  18. IDEA查看类继承关系及生成类关系图
  19. Vim中YouCompleteMe插件安装
  20. display position 和float的作用和关系

热门文章

  1. MySQL 5.5主从同步设置教程
  2. CentOS 6.5 安装与配置LAMP
  3. 前端跨域之html5 XMLHttpRequest Level2
  4. Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础
  5. DXperience-12.1.5 官网下载+注册破解+帮助文档
  6. 1194: [HNOI2006]潘多拉的盒子 - BZOJ
  7. 5.2:缓存中获取单例bean
  8. uva 125
  9. C++智能指针(auto_ptr)详解
  10. Codeforces Round #242 (Div. 2) A~C