AWS: ALB отвечает сразу или через 130 секунд - PullRequest
0 голосов
/ 05 декабря 2018

Я использую ALB и пытаюсь использовать концепцию маршрутизации на основе хостов для размещения нескольких хостов (с отображением 1-1 с целевыми группами) за ним.

Таким образом, у меня есть 5 URL-адресов каждый изони перенаправляются в другую TG (и, следовательно, в моем случае), например,

https://path1.mydomain.com
https://path2.mydomain.com

(... и т. д.) ...

Что я заметил, так эточто я получаю двоичное поведение, т. е. ALB будет реагировать либо почти сразу (т. е. <1.сек), либо примерно через 130 секунд. </p>

$ for X in `seq 60`; do curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" https://path1.mydomain.com -so /dev/null; done
HTTPCode=200 TotalTime=130.157
HTTPCode=200 TotalTime=131.053
HTTPCode=200 TotalTime=131.050
HTTPCode=200 TotalTime=0.485
HTTPCode=200 TotalTime=130.533
HTTPCode=200 TotalTime=0.467
HTTPCode=200 TotalTime=130.586
HTTPCode=200 TotalTime=0.477
HTTPCode=200 TotalTime=130.567

Это относится ко всем путям.

Любая идея, откуда это поведение может исходить?

Вот заголовки ответа (I всегда получить 200, независимо от задержки)

$ curl -kI  https://path1.mydomain.com
HTTP/1.1 200 OK
Date: Wed, 05 Dec 2018 17:03:14 GMT
Content-Type: text/html
Content-Length: 1617
Connection: keep-alive
Server: nginx
Last-Modified: Thu, 19 Jul 2018 09:52:09 GMT
ETag: "5b505f49-651"
Cache-Control: no-cache
Accept-Ranges: bytes

edit_1 : хотя я регистрирую 2 подсети / AZ для ALB, все мои экземпляры находятся в одной AZ / подсети, для чего это важно;

edit_2 :при прямом обращении к одному из публичных IP-адресов:

$ for X in `seq 60`; do curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" http://18.9.48.141 -so /dev/null; done
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.007
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.007
HTTPCode=200 TotalTime=0.007
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.010
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.005
HTTPCode=200 TotalTime=0.008

edit_3 : это также не днспроблема с разрешением, поскольку итерация команды dig в 100 раз возвращается немедленно без ошибок.

edit_4 : Здесь strace команды curl висит:

connect(4, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("51.53.132.130")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 199)  = 0 (Timeout)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 0)    = 0 (Timeout)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 1000) = 0 (Timeout)
poll([{fd=4, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 1000) = 0 (Timeout)

edit_5 : некоторые tcptraceroute итерации для общедоступного IP-адреса, где висит команда curl

$ for i in `seq 10`; do sudo tcptraceroute 51.53.132.130; done
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.109 ms  2.097 ms  2.230 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  1.964 ms  1.954 ms  1.942 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.148 ms  2.220 ms  2.208 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.227 ms  2.214 ms  2.200 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.181 ms  2.170 ms  2.159 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.157 ms  2.221 ms  2.207 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.228 ms  2.216 ms  2.203 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  1.810 ms  1.962 ms  1.961 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  1.695 ms  1.757 ms  1.852 ms
traceroute to 51.53.132.130 (51.53.132.130), 30 hops max, 60 byte packets
 1  * * *
 2  51.53.132.130 (51.53.132.130) <syn,ack>  2.202 ms  2.187 ms  2.173 ms

Очевидно, что приложение вносит огромный лагБалансировщик нагрузки.

1 Ответ

0 голосов
/ 06 декабря 2018

Проблема заключалась в следующем:

Я назначил 2 AZ для моего ALB, и подсеть, соответствующая одному из них, не имела 0.0.0.0/0 --> IG маршрута.

...