AWS Load Balancer 502

У меня есть микросервисы (на разных языках программирования), работающие на экземпляре EC2. На производстве я замечаю несколько ошибок 502 Bad Gateway Errors, когда эти службы пытаются взаимодействовать друг с другом. Также в журналах запрошенной службы не отображается какой-либо вызов api.

пример службы A вызывает службу B, но в журналах службы B нет ничего, что указывало бы на то, что вызов пришел из службы A.

Может быть проблема с балансировщиком нагрузки AWS? Любая помощь будет оценена по достоинству. Заранее спасибо.

Пробное решение: мы пытались создать агенты подключения http / https в каждой службе, но проблема все еще возникает.

Обновление: в журналах lb регистрируется api, но целевой код ответа показывает «-», тогда как код ответа lb показывает 502 или 504. Означает ли это, что lb не может обрабатывать трафик или мое приложение?

И какое может быть возможное решение?


comment
Вы можете включить журналы lb, если трафик проходит через них правильным образом, вы сможете увидеть вывод или публиковать журналы здесь   -  person Kush Vyas    schedule 02.11.2017
comment
В журналах lb регистрируется api, но отображается целевой код ответа, тогда как код ответа lb показывает 502 или 504. Означает ли это, что lb не может обрабатывать трафик или мое приложение? @KushVyas   -  person rajat12a    schedule 09.01.2018
comment
@Root У нас точно такая же проблема. У вас все еще есть, или вы нашли решение?   -  person Jan Dörrenhaus    schedule 24.04.2018
comment
@JanDoerrenhaus Да, мы нашли решение   -  person rajat12a    schedule 07.05.2018
comment
У нас точно такая же проблема   -  person Cade Embery    schedule 28.09.2018
comment
@CadeEmbery Вы пробовали сливать инстансы?   -  person rajat12a    schedule 09.10.2018


Ответы (1)


У нас была такая же проблема.

В нашей настройке приложение AWS Application ELB имеет целевую группу из 4 экземпляров EC2. На каждом из экземпляров EC2 есть Apache2, который перенаправляет на Tomcat.

ELB имеет соединение по умолчанию KeepAlive на 60 секунд. Apache2 имеет соединение по умолчанию KeepAlive 5 секунд. По истечении 5 секунд Apache2 закрывает свое соединение и сбрасывает соединение с ELB. Однако, если запрос поступает точно в нужное время, ELB примет его, решит, на какой хост его переадресовать, и в этот момент Apache закрывает соединение. Это приведет к появлению указанного кода ошибки 502.

Решение: если у вас есть каскадные прокси / LB, либо выровняйте их тайм-ауты KeepAlive, либо, что желательно, даже сделайте их немного длиннее по мере продвижения по очереди.

Мы установили тайм-аут ELB на 60 секунд и тайм-аут Apache2 на 120 секунд. Проблема ушла.

person Jan Dörrenhaus    schedule 04.05.2018
comment
Мы выяснили, что проблема в нашей системе. Это произошло из-за немедленного отключения экземпляров ec2 вместо ожидания периода слива. У нас уже было установлено значение elb на 60 секунд и apache на 120 секунд. - person rajat12a; 07.05.2018
comment
В настоящее время у нас такая же проблема, когда это произойдет, можем ли мы увидеть какой-либо журнал на стороне Apache? - person Naga; 26.11.2018
comment
@Naga Мы этого не сделали, нет. Потому что Apache ничего не замечает. Журналы доступа ELB показывают запрос с кодом состояния 502, а журналы доступа Apache ничего не показывают. - person Jan Dörrenhaus; 26.11.2018
comment
@Jan спасибо за информацию! на самом деле это тоже то же самое. Я проверил журнал доступа к apache и журнал ошибок, но ничего не нашел ... мы попробуем те же настройки, что и вы, и посмотрим, как это сделать. - person Naga; 26.11.2018
comment
Это было так сложно понять - спасибо за этот вопрос / ответ. Это решило мою проблему, как только я увеличил KeepAliveTimeout - person aknosis; 29.12.2018
comment
По-видимому, если вы выполняете захват пакетов на принимающей стороне (сервере приложений), вы можете в большинстве случаев получить ответные FIN,ACK пакеты и новые пакеты SYN запроса, но это трудно поймать. - person rogerdpack; 05.03.2019
comment
У меня такие же проблемы. И я изменяю тайм-аут поддержки активности - это решение. Но лучше, если вы измените keepalive, это более чем немного лучше, чем изменить 2 раза время ожидания ALB, чтобы предотвратить слишком долгое ожидание на целевом веб-сервере, если соединение ALB и Target отключено из-за сетевых прерываний. - person Sơn Lâm; 21.10.2020