AWS Elastic Load Balancing:看到极长的初始连接时间
AWS Elastic Load Balancing: Seeing extremely long initial connection time
几天来,当通过 ssl 发出任何请求时,我们经常看到我们的 ELB 的初始连接时间非常长(15 秒 - 1.3 分钟)。
奇怪的是,我只能在 Google Chrome(不是 Safari、Firefox 或 curl)中观察到这一点。
并不是每个请求都会出现,但大约 50% 的请求都会出现。它出现在第一个请求(OPTIONS 调用)中。
我们的设置如下:
连接到 node.js 后端的跨区域 ELB(目前在 eu-west-1 的 2 个 AZ 中)。所有实例都是健康的,一旦请求通过,就会正常处理。目前,系统基本没有负载。 Cloudwatch for ELB 不报告任何后端连接错误,无论是 SurgeQueue(值 0)还是溢出计数。 ELB 指标显示低延迟(< 100 毫秒)。
我们将 Route53 配置为路由到 ELB(我们没有看到任何 dns 问题,请参阅随附的屏幕截图)。
我们有不同的 REST-API,它们都具有此设置。它发生在所有 ELB 上(每个 ELB 都连接到一个独立的 node.js 后端)。所有这些 ELB 都是通过我们的 cloudformation 模板以相同的方式设置的。
ELB 也执行我们的 SSL 终止。
什么会导致这种行为?有没有可能是ELB没有配置好?为什么它只能出现在 Google Chrome?
我认为这可能是 ELB 配置错误。当我将私有子网放入 ELB 时,我遇到了同样的问题。通过将私有子网更改为 public 来修复它。参见 https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-manage-subnets.html
这可能是亚马逊elb的问题。 elb 将实例数量与请求数量进行缩放。
那时您应该会看到一些精选的请求。
亚马逊添加了一些实例以适应负载。
这些实例在启动过程中是可以访问的,因此您的客户会得到这些超时。这完全是随机的,所以你应该:
ping elb 以获得所有使用的 ip
对找到的所有 ip 使用 mtr
关注CloudWatch
找到一些线索
只是为了跟进@Nikita Ogurtsov 的出色回答;我遇到了同样的问题,只是 只是我的子网之一 恰好是私有的,其余的 public.
即使您认为自己的子网是 public,我还是建议您仔细检查路由表以确保它们 all 有一个网关。
如果可行,您可以使用一个路由 Table,为所有 LB 子网提供一个网关
VPC/Subnets/(select subnet)/Route Table/Edit
解决方案如果您的 DNS 配置为直接命中 ELB -> 您应该减少关联 (IP,DNS) 的 TTL。 IP 可以随 ELB 随时更改,因此您的流量可能会受到严重损害。
客户端在缓存中保留了一些来自 ELB 的 IP,这样你就可以解决这些问题。
Scaling Elastic Load Balancers
Once you create an elastic load balancer, you must configure it to accept incoming traffic and route requests to your EC2 instances. These configuration parameters are stored by the controller, and the controller ensures that all of the load balancers are operating with the correct configuration. The controller will also monitor the load balancers and manage the capacity that is used to handle the client requests. It increases capacity by utilizing either larger resources (resources with higher performance characteristics) or more individual resources. The Elastic Load Balancing service will update the Domain Name System (DNS) record of the load balancer when it scales so that the new resources have their respective IP addresses registered in DNS. The DNS record that is created includes a Time-to-Live (TTL) setting of 60 seconds, with the expectation that clients will re-lookup the DNS at least every 60 seconds. By default, Elastic Load Balancing will return multiple IP addresses when clients perform a DNS resolution, with the records being randomly ordered on each DNS resolution request. As the traffic profile changes, the controller service will scale the load balancers to handle more requests, scaling equally in all Availability Zones.
还要检查一个安全组。这对我来说是个问题。
对我来说,问题是我的 Classic Load Balancer 中有一个未使用的 "Availability Zone"。一旦我删除了不健康和未使用的可用区,"Initial Connection" 中一致的 20 或 21 秒延迟下降到 50 毫秒以下。
注意:您可能需要给它一些时间来更新。我将我的 DNS TTL 设置为 60 秒,因此我会在删除未使用的可用区后一分钟内看到修复。
对我来说,问题是 ALB 指向一个 Nginx 实例,该实例的 DNS 解析器配置错误。这意味着 Nginx 尝试使用解析器,超时,然后实际开始工作。
与 Load Balancer 本身并没有真正的超级联系,但也许可以帮助某人找出他们自己设置中的问题。
ALB 负载均衡器需要 2 个可用区。如果您使用 Privat/Public/Nat VPC 设置,则所有 public 个子网都必须连接到 Internet。
我在 Chrome 日志中发现了类似的问题(1.3 米滞后)。它发生在 OPTIONS 请求中,并且从 wireshark 中,我什至没有看到请求首先离开 PC。欢迎就 Chrome 可能正在做的事情提出任何建议。
几天来,当通过 ssl 发出任何请求时,我们经常看到我们的 ELB 的初始连接时间非常长(15 秒 - 1.3 分钟)。 奇怪的是,我只能在 Google Chrome(不是 Safari、Firefox 或 curl)中观察到这一点。
并不是每个请求都会出现,但大约 50% 的请求都会出现。它出现在第一个请求(OPTIONS 调用)中。
我们的设置如下: 连接到 node.js 后端的跨区域 ELB(目前在 eu-west-1 的 2 个 AZ 中)。所有实例都是健康的,一旦请求通过,就会正常处理。目前,系统基本没有负载。 Cloudwatch for ELB 不报告任何后端连接错误,无论是 SurgeQueue(值 0)还是溢出计数。 ELB 指标显示低延迟(< 100 毫秒)。 我们将 Route53 配置为路由到 ELB(我们没有看到任何 dns 问题,请参阅随附的屏幕截图)。
我们有不同的 REST-API,它们都具有此设置。它发生在所有 ELB 上(每个 ELB 都连接到一个独立的 node.js 后端)。所有这些 ELB 都是通过我们的 cloudformation 模板以相同的方式设置的。
ELB 也执行我们的 SSL 终止。
什么会导致这种行为?有没有可能是ELB没有配置好?为什么它只能出现在 Google Chrome?
我认为这可能是 ELB 配置错误。当我将私有子网放入 ELB 时,我遇到了同样的问题。通过将私有子网更改为 public 来修复它。参见 https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-manage-subnets.html
这可能是亚马逊elb的问题。 elb 将实例数量与请求数量进行缩放。 那时您应该会看到一些精选的请求。 亚马逊添加了一些实例以适应负载。 这些实例在启动过程中是可以访问的,因此您的客户会得到这些超时。这完全是随机的,所以你应该:
ping elb 以获得所有使用的 ip
对找到的所有 ip 使用 mtr
关注CloudWatch
找到一些线索
只是为了跟进@Nikita Ogurtsov 的出色回答;我遇到了同样的问题,只是 只是我的子网之一 恰好是私有的,其余的 public.
即使您认为自己的子网是 public,我还是建议您仔细检查路由表以确保它们 all 有一个网关。
如果可行,您可以使用一个路由 Table,为所有 LB 子网提供一个网关
VPC/Subnets/(select subnet)/Route Table/Edit
解决方案如果您的 DNS 配置为直接命中 ELB -> 您应该减少关联 (IP,DNS) 的 TTL。 IP 可以随 ELB 随时更改,因此您的流量可能会受到严重损害。
客户端在缓存中保留了一些来自 ELB 的 IP,这样你就可以解决这些问题。
Scaling Elastic Load Balancers Once you create an elastic load balancer, you must configure it to accept incoming traffic and route requests to your EC2 instances. These configuration parameters are stored by the controller, and the controller ensures that all of the load balancers are operating with the correct configuration. The controller will also monitor the load balancers and manage the capacity that is used to handle the client requests. It increases capacity by utilizing either larger resources (resources with higher performance characteristics) or more individual resources. The Elastic Load Balancing service will update the Domain Name System (DNS) record of the load balancer when it scales so that the new resources have their respective IP addresses registered in DNS. The DNS record that is created includes a Time-to-Live (TTL) setting of 60 seconds, with the expectation that clients will re-lookup the DNS at least every 60 seconds. By default, Elastic Load Balancing will return multiple IP addresses when clients perform a DNS resolution, with the records being randomly ordered on each DNS resolution request. As the traffic profile changes, the controller service will scale the load balancers to handle more requests, scaling equally in all Availability Zones.
还要检查一个安全组。这对我来说是个问题。
对我来说,问题是我的 Classic Load Balancer 中有一个未使用的 "Availability Zone"。一旦我删除了不健康和未使用的可用区,"Initial Connection" 中一致的 20 或 21 秒延迟下降到 50 毫秒以下。
注意:您可能需要给它一些时间来更新。我将我的 DNS TTL 设置为 60 秒,因此我会在删除未使用的可用区后一分钟内看到修复。
对我来说,问题是 ALB 指向一个 Nginx 实例,该实例的 DNS 解析器配置错误。这意味着 Nginx 尝试使用解析器,超时,然后实际开始工作。
与 Load Balancer 本身并没有真正的超级联系,但也许可以帮助某人找出他们自己设置中的问题。
ALB 负载均衡器需要 2 个可用区。如果您使用 Privat/Public/Nat VPC 设置,则所有 public 个子网都必须连接到 Internet。
我在 Chrome 日志中发现了类似的问题(1.3 米滞后)。它发生在 OPTIONS 请求中,并且从 wireshark 中,我什至没有看到请求首先离开 PC。欢迎就 Chrome 可能正在做的事情提出任何建议。