Windows Azure的负载均衡器默认是5元组的hash:源地址,源端口,目的地址,目的端口,协议。即:只有上述五个元组完全一致的会话数据包才会被转发到同一个后端服务器。显然,对于绝大多数通过NAT上网的用户来说,5元组基本上就不具备会话保持功能了。IPv4越来越少,IPv6还在飘着。

从应用角度来看,特别是一些早期的web应用,不具备集中管理状态的功能,Session都是保存在web服务器内存中的。为了迁移到Windows Azure而去修改代码,用户总是会感觉不爽的,虽然我们有千万个理由说服客户这样做是多么多么的有意义。

Windows Azure的负载均衡器已经支持2元组hash和3元组hash模式的负载均,说白了就是从原来的5元组中去掉了源端口和目标端口。这样,即便是通过NAT上网,会话数据包中的源地址、目标地址和协议也是不会发生变化的。只不过2、3元组hash模式的负载均衡器目前还只能通过PowerShell来创建和使用。

对于一个已经存在负载均衡器,可以通过以下PowerShell脚本将其设置为2元组hash模式,从而实现基于四层负载均衡的会话保持:

Set-AzureLoadBalancedEndpoint -LoadBalancerDistribution "sourceIP" -ServiceName [云服务名称] -LBSetName [负载均衡集名称]

如果要设置为3元组hash模式,则将上述脚本中的[sourceIP]改为[sourceIPProtocol]即可。

05-07 15:12