У меня включен слив соединения для ELB. Согласно документации на http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#conn-drain, а снятие с учета или нездоровый instance будет держать существующие соединения открытыми:
Осушение соединения приводит к тому, что балансировщик нагрузки ELB прекращает отправку новых запросов на отменяющий регистрацию экземпляр или неработоспособный экземпляр, при этом существующие соединения остаются открытыми.
Я хотел бы провести некоторое обслуживание узлов EC2 в ELB. Хорошо бы их изящно вывести из поворота вручную. Я попытался не пройти проверки работоспособности и вручную удалить экземпляр EC2 из ELB. Оба эти действия уничтожают существующие подключения к экземпляру.
Как я могу вручную установить для экземпляра EC2 состояние отмены регистрации или неработоспособное состояние, чтобы он продолжал обслуживать существующие подключения, но не принимал новые?
Возможно, вы могли бы создать новую группу безопасности, которая отклоняет входящие соединения от ELB, но разрешает исходящие соединения обратно.
Когда вам нужно выполнить обслуживание, вы можете переключить затронутый экземпляр EC2 в эту новую группу безопасности и дождаться отключения оставшихся соединений.
Единственное, в чем я не уверен, это то, что изменение группы безопасности уничтожит существующие соединения. Не верю, но я не проверял, чтобы быть уверенным.
Осушение соединения применяется только на уровне сети, ELB не знает состояние вашего сеанса. Пожалуйста, посмотрите этот старый ответ. ELB сливает tcp на основе?
Если ваши экземпляры входят в группу автоматического масштабирования, у вас есть возможность поставить их на обслуживание с помощью aws autoscaling enter-standby
и чтобы вывести их из режима обслуживания, вы используете aws autoscaling exit-standby
. Это заставит балансировщик нагрузки дренировать соединения.
Если они не входят в группу автоматического масштабирования, вам придется отменить регистрацию и зарегистрировать их снова. Если вы хотите получить хороший пример того, как это сделать, вы можете взглянуть на пример CodeDeploy здесь: https://github.com/aws-samples/aws-codedeploy-samples . Этот код автоматически переведет экземпляр в режим обслуживания, если он находится в группе автоматического масштабирования, а если нет, он удалит экземпляр из ELB и в конце обновления снова добавит его во все целевые группы.