情景:
我在Azure Load Balancer(LB)前面有一个云服务(超过1个实例)。我是OWIN自托管SignalR端点。据我所知,SignalR握手包含3个HTTP Get-Reponses(连接,协商,启动)。
我遇到的问题是LB将它们路由到不同的机器,因此握手失败。
我猜我不是第一个遇到这个问题的人,所以有一个简单的解决方案吗? (最好不引入第三方)。
我正在考虑强制HTTP客户端使用相同的元组(客户端IP,客户端端口)并祈祷LB正在做同样的事情(将5元组映射到单个机器直到会话结束)
答案 0 :(得分:0)
我对SignalR非常不熟悉,但是如果将Load Balancer哈希模式更改为3元组(源IP,目标IP,协议)或2元组(源IP,目标IP),那么,好吧,你可以做到这一点。
https://azure.microsoft.com/en-us/blog/azure-load-balancer-new-distribution-mode/
服务定义(.csdef):
<WorkerRole name="worker-role-name" vmsize="worker-role-size">
<Endpoints>
<InputEndpoint name="input-endpoint-name" ... loadBalancerDistribution="sourceIP" />
</Endpoints>
</WorkerRole>
对于 2元组亲和关系,
loadBalancerDistribution
的值可以是 sourceIP ,对于 3元组< sourceIPProtocol / strong>亲和力或无(没有亲和力。即 5元组)