我正在使用 AWS 网络负载均衡器。当我发出nslookup dualstack.app.elb.us-east-2.amazonaws.com
时,输出是
Non-authoritative answer:
Name: dualstack.app.elb.us-east-2.amazonaws.com
Address: 3.xxx.xxx.176
Name: dualstack.app.elb.us-east-2.amazonaws.com
Address: 18.xxx.xxx.40
我注意到这些 IP 中的每一个都位于不同的可用区域中,并且一次只有一个 IP 有效。dualstack.app.elb.us-east-2.amazonaws.com/healthcheck
向via发出请求curl
只有一半的时间有效。但是,从我的浏览器发出相同的请求 100% 的时间都有效,因为 chrome 有自己的处理循环 DNS 的方法(相关:https ://serverfault.com/a/774411,https : //serverfault.com /a/852421 )
这是 NLB 的预期行为,即当存在多个 IP 时,一次只有一个 IP 可以工作?
上面的答案告诉你原因,但不告诉你如何解决。您说过您使用的是 ELB,它通常指的是经典的 ELB,而不是 ALB / NLB。使用 ELB,您可以启用跨区域负载平衡。默认情况下,它通过 ALB 启用,因此如果您使用其中之一,这对您来说不是正确的答案 - 请更新您的问题并让我知道是否是这种情况。
或者
使用控制台启用跨区域负载平衡
在https://console.aws.amazon.com/ec2/打开 Amazon EC2 控制台。
在导航窗格的负载均衡下,选择负载均衡器。
选择您的负载均衡器。
在描述选项卡上,选择更改跨区域负载平衡设置。
在配置跨区域负载平衡页面上,选择启用。
选择保存。
当您运行时,
nslookup dualstack.app.elb.us-east-2.amazonaws.com
您正在查询 DNS,它会返回每个已注册可用区中弹性负载均衡器节点的 IP 地址。然后,您的客户端应用程序决定将哪个 IP 用于其请求。如果您直接向弹性负载均衡器节点 IP 请求并且未收到响应,则意味着该可用区域中没有目标响应节点的请求
https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#request-routing
路由算法
使用Application Load Balancers,接收请求的负载均衡器节点使用以下过程:
使用Network Load Balancers,接收连接的负载均衡器节点使用以下过程:
使用Classic Load Balancers,接收请求的负载均衡器节点会选择一个已注册的实例,如下所示:
对 TCP 侦听器使用循环路由算法
对 HTTP 和 HTTPS 侦听器使用最少未完成请求路由算法
当您在其中一个可用区中没有任何健康的目标实例时,就会发生这种情况。请检查两个可用区中的目标实例。