Назад | Перейти на главную страницу

Amazon EC2 Elastic Load Balancing - стратегия перезапуска сервера без простоев

У меня есть 5 веб-серверов (Apache / mod_perl) за Amazon EC2 Elastic Load Balancing, когда я развертываю коды на веб-серверах, я делаю это ..

  1. Для каждой машины выключите Apache
  2. Обновите код
  3. Начните с сервера и перейдите к следующему серверу

Я думаю, что когда мой сервер выключен, ELB не будет отправлять запрос на мой сервер, но как насчет того, что запрос все еще обслуживается?

Я думаю, что лучший подход -

  1. Прекратить принимать новый запрос от ELB
  2. Спать иногда, выключать веб-сервер, только если все запросы получены.
  3. Обновите коды
  4. Снова запустить сервер

Но как выполнить (1) и (2) с моего локального сервера? Нужно ли мне использовать AWS API? или другой простой способ сделать это?

Спасибо.

У меня есть другой способ добиться этого, если вам нужно обновить несколько вещей на каждом сервере. Обновление 5 серверов для тех же операций будет очень затратным занятием.

Создайте группу балансировки нагрузки и масштабирования. соединение слива включен.

Вот мой этап обновления.

  1. Удалите 1 экземпляр из балансировщика нагрузки. Обновите все необходимое. И создайте AMI из вашего производственного экземпляра. Это приведет к перезапуску вашего экземпляра.
  2. Настройте группу масштабирования с новым AMI.
  3. Удалите экземпляр из балансировщика нагрузки и остановите его. Новый экземпляр запустится автоматически
  4. Продолжайте выключать другой экземпляр и после того, как все экземпляры будут созданы заново. Обновление завершено.

Некоторые руководства:
Распределите нагрузку на вашу группу автоматического масштабирования
Слив соединения

Если ваше развертывание может быть изменено для поддержки вновь созданных экземпляров, подключающихся к сети с новым кодом, вы можете фактически удалить экземпляр из ELB, подождать 60 секунд (после чего Amazon ELB все равно закроет соединение с серверной частью и клиентом), а затем завершить работу экземпляра. - и положитесь на группу автоматического масштабирования Amazon, которая предоставит вам новый экземпляр. Я создал инструмент с открытым исходным кодом, который автоматизирует этот процесс - доступный на awsmissingtools.com - ищите инструмент под названием «AWS-HA-Release».

Я запускаю apache / mod_perl как экземпляры EC2 с балансировкой нагрузки и регулярно обновляю код, как вы говорите. Мой процесс:

  1. взять один или два экземпляра из ротации
  2. выключите apache на этом экземпляре
  3. обновить экземпляр (ы)
  4. вернуться в режим вращения и удалить остальные

В В документации AWS рассказывается, как добавить и удалить экземпляр из ротации. используя API или консоль, на ваш выбор. Вы заметите, что с моим подходом веб-серверы изящно выходят из ротации, поэтому я не беспокоюсь о том, будет ли убит конкретный пользовательский запрос. Как упоминалось в @ cyberx86, вы можете использовать команду apachectl -k graceful для выключения вашего сервера apache после обработки каждого запроса.