Липкая сессия AWS Application Load Balancer не работает после изменения целей

У меня есть дистрибутив CloudFront, указывающий на Application Load Balancer, который балансирует нагрузку на контейнеры ECS, в которых запущено приложение Django. В целевой группе ALB включена функция stick sessions с использованием Application-based cookie, установленной на cookie Django sessionid, который является основным индикатором "вошедшего" пользователя Django.

После входа пользователя в систему все работает хорошо; Django устанавливает cookie sessionid, а ALB устанавливает cookie AWSALBAPP-0 в разные значения для каждого ответа, и сессия остается привязанной к одному контейнеру ECS.

Проблема возникает, когда я переразвертываю приложение, и контейнеры останавливаются. Когда ALB направляет трафик на новые цели, я вижу, что значение куки AWSALBAPP-0 устанавливается на _remove_. После этого значение cookie всегда остается равным _remove_, и сессия больше не является липкой - она балансирует нагрузку по кругу. Мне приходится выходить из системы и снова входить в нее, чтобы восстановить липкость.

Почему это происходит?

В документацииAWS говорится:

Если цель выходит из строя или становится нездоровой, балансировщик нагрузки прекращает маршрутизацию запросов к этой цели и выбирает новую здоровую цель на основе выбранного алгоритма балансировки нагрузки. Балансировщик нагрузки рассматривает сессию как "прилипшую" к новой здоровой цели и продолжает маршрутизировать запросы к новой здоровой цели, даже если отказавшая цель вернется.

Но это противоречит моему опыту...

Вернуться на верх