У меня есть 5 веб-серверов (Apache / mod_perl) за Amazon EC2 Elastic Load Balancing, когда я развертываю коды на веб-серверах, я делаю это ..
Я думаю, что когда мой сервер выключен, ELB не будет отправлять запрос на мой сервер, но как насчет того, что запрос все еще обслуживается?
Я думаю, что лучший подход -
Но как выполнить (1) и (2) с моего локального сервера? Нужно ли мне использовать AWS API? или другой простой способ сделать это?
Спасибо.
У меня есть другой способ добиться этого, если вам нужно обновить несколько вещей на каждом сервере. Обновление 5 серверов для тех же операций будет очень затратным занятием.
Создайте группу балансировки нагрузки и масштабирования. соединение слива включен.
Вот мой этап обновления.
Некоторые руководства:
Распределите нагрузку на вашу группу автоматического масштабирования
Слив соединения
Если ваше развертывание может быть изменено для поддержки вновь созданных экземпляров, подключающихся к сети с новым кодом, вы можете фактически удалить экземпляр из ELB, подождать 60 секунд (после чего Amazon ELB все равно закроет соединение с серверной частью и клиентом), а затем завершить работу экземпляра. - и положитесь на группу автоматического масштабирования Amazon, которая предоставит вам новый экземпляр. Я создал инструмент с открытым исходным кодом, который автоматизирует этот процесс - доступный на awsmissingtools.com - ищите инструмент под названием «AWS-HA-Release».
Я запускаю apache / mod_perl как экземпляры EC2 с балансировкой нагрузки и регулярно обновляю код, как вы говорите. Мой процесс:
В В документации AWS рассказывается, как добавить и удалить экземпляр из ротации. используя API или консоль, на ваш выбор. Вы заметите, что с моим подходом веб-серверы изящно выходят из ротации, поэтому я не беспокоюсь о том, будет ли убит конкретный пользовательский запрос. Как упоминалось в @ cyberx86, вы можете использовать команду apachectl -k graceful
для выключения вашего сервера apache после обработки каждого запроса.