Липкая сессия 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 говорится:
Если цель выходит из строя или становится нездоровой, балансировщик нагрузки прекращает маршрутизацию запросов к этой цели и выбирает новую здоровую цель на основе выбранного алгоритма балансировки нагрузки. Балансировщик нагрузки рассматривает сессию как "прилипшую" к новой здоровой цели и продолжает маршрутизировать запросы к новой здоровой цели, даже если отказавшая цель вернется.
Но это противоречит моему опыту...