Как настроить базовое автоматическое масштабирование для веб-сайта Amazon EC2 с использованием PHP и MySQL

У меня есть базовый веб-сайт PHP/MySQL, полностью хранящийся на микроэкземпляре Amazon EC2. Трафик будет временно увеличиваться, и я хотел бы реализовать базовое автоматическое масштабирование, главным образом, чтобы увеличить мощность процессора, поскольку это кажется узким местом. Итак, основные ограничения, которые, как я знаю, у меня есть:

  • Сохранить данные базы данных MySQL
  • Сохраните файлы веб-сайта (которые находятся в /var/www/* )

Может ли кто-нибудь указать на лучший способ сделать это?

P.S. Поскольку настройка моего сервера не так уж сложна, я готов перестроить / повторно загрузить все это, если мне нужно. Мне просто нужно правильно настроить автоматическое масштабирование.


person D.Tate    schedule 10.01.2014    source источник


Ответы (3)


У меня была аналогичная проблема, и вот что я сделал.

Подготовьте сервер приложений к автоматическому масштабированию (возможность запуска нескольких экземпляров одновременно):

  • Я переместил свои базы данных SQL (MySQL и MSSQL) в RDS;
  • Я изменил свою программу, чтобы она не записывалась на локальные тома/диски, а вместо этого помещала все файлы в корзину S3;

Я протестировал этот экземпляр, чтобы убедиться, что мой сервер приложений полностью отделен от моей БД и другого хранилища для записи. Когда все готово:

  • отправил все мои изменения в репозиторий;
  • запланировал задачу, которая будет запускаться при запуске моего сервера (и каждые 2 часа после этого), которая будет выполнять git pull origin master из репозитория (чтобы убедиться, что код на новых экземплярах всегда будет последним);
  • создал пользовательский AMI этого экземпляра;
  • создал балансировщик нагрузки;
  • создал группу запуска конфигурации/автоматического масштабирования, которая использует созданный мной образ AMI;

Теперь, когда Auto-scaler настроен:

  • Я изменил запись DNS, указывающую на мой сайт, чтобы использовать DNS CNAME, указывающую на конечную точку Load-Balancer (DNS-имя), вместо гибкого IP-адреса, который я изначально связал с моим экземпляром EC2 (откуда мы создали AMI и провели тестирование). );

Обратите внимание: НЕ используйте статический IP-адрес, назначенный вашему балансировщику нагрузки, поскольку он будет меняться очень часто. Вам действительно нужно настроить CNAME, указывающий на конечную точку Load-Balancer.

Некоторое обслуживание, которое мне нужно было сделать:

  • Я клонировал копию репозитория в локальную копию, где я выполняю тестирование и обновления. Когда мне нужно что-то изменить на рабочем сервере, я просто отправляю свои изменения в репозиторий, и мой рабочий сервер забирает их каждые 2 часа.
  • Когда в моем коде уже слишком много обновлений с момента последнего создания AMI, я заново создаю AMI, чтобы сократить время, необходимое для извлечения из репозитория.

Кстати, я использую экземпляр T1.micro. В этом вся идея использования Auto-scaling. Мы не хотим тратить на Medium сервер все время, пока наше приложение находится в резерве.

person Rio Bautista    schedule 29.03.2016
comment
Не знал, что оставил этот вопрос без ответа! Но ваш ответ кажется мне самым простым и легко усваиваемым, спасибо! Хотя у @JaiGovindani также было хорошее мнение об использовании сигналов тревоги Cloudwatch, чтобы вы могли указать, когда увеличивать и уменьшать масштаб. - person D.Tate; 29.03.2016
comment
Да, будильник cloudwatch является частью конфигурации группы автоматического масштабирования. Вам потребуется создать как минимум 2 политики (увеличение и уменьшение масштаба), которые будут активироваться сигналами тревоги, которые вы укажете. Я сосредоточил свой ответ на подготовке вашего приложения LAMP, чтобы его можно было масштабировать автоматически. В любом случае вы можете прочитать о стороне AWS из документации. - person Rio Bautista; 19.04.2016
comment
С опозданием на год, но возвращаюсь из-за комментария — я должен не согласиться с утверждением, что использование автоматического масштабирования позволяет использовать микроэкземпляры для рабочих нагрузок. Если это оппортунистическая рабочая нагрузка, то все в порядке, но если это какая-либо производственная рабочая нагрузка, требующая устойчивых циклов ЦП, микро не подходит. Для новичков или новых сервисов, которые еще не понимают своей ожидаемой рабочей нагрузки, микроэкземпляры могут быть проблематичными. - person Jai Govindani; 09.10.2017

Предостережения:

Как упоминалось в предыдущем ответе, вам НЕ следует использовать экземпляры t1.micro для каких-либо производственных экземпляров.

  1. Как упоминалось в предыдущем ответе, вам НЕ следует использовать экземпляры t1.micro для любых производственных экземпляров.
  2. Вы не можете (легко) автоматически масштабировать экземпляры EC2, на которых работает MySQL. Если вы просто подумаете об этом, если у вас появится несколько БД, данные не будут синхронизированы, и это будет беспорядок. Самый простой способ сделать это — использовать RDS и добавлять реплики чтения по мере необходимости.

Теперь, чтобы создать экземпляр веб-автоматического масштабирования (при условии, что вы переместили свою БД в RDS), есть несколько шагов на стороне AWS и несколько шагов на вашей стороне в отношении управления кодом/развертыванием.

Автомасштабирование включает в себя:

  1. Создание AMI вашего текущего экземпляра EC2. В экземпляре с поддержкой EBS данные/тома будут упакованы в AMI и будут развернуты при развертывании этого AMI. Однако, если вы внесли изменения в свой код, то, очевидно, этот код не будет обновлен, мы рассмотрим это ниже.
  2. Создайте конфигурацию запуска с автоматическим масштабированием — теперь вы можете сделать это с помощью графического интерфейса на консоли AWS, хотя я по-прежнему являюсь поклонником интерфейса командной строки. Конфигурация запуска указывает используемый AMI, размеры экземпляров и т. д.
  3. Создайте группу автомасштабирования и примените к ней конфигурацию запуска. Когда вы создаете группу автоматического масштабирования, вам нужно указать ELB для добавления экземпляров, иначе они не будут доступны. Если вы используете собственный балансировщик нагрузки, убедитесь, что экземпляр регистрируется в нем при запуске (используя cloud-init или что-то в этом роде).
  4. Создайте оповещения Cloudwatch для действий по увеличению и уменьшению масштаба — это может быть связано с процессором, сетевым вводом-выводом и т. д. Вам потребуется как минимум 2 оповещения (один для увеличения, один для уменьшения).

Теперь, когда экземпляр запущен, у вас будет веб-сервер, но на нем будет работать старый код:

  1. Предполагая, что вы создаете версию своего кода на git, создайте ключ развертывания git и добавьте его на сервер.
  2. Используйте cloud-init для запуска git pull — код cloud-init запустится только один раз, чтобы убедиться, что ваш сервер запускается и работает с вашим последним кодом.

Готово! Инструкции выше довольно высокого уровня. Пошаговое описание повлечет за собой гораздо более длинный ответ, но я буду рад предоставить объяснения по шагам, где это необходимо, дайте мне знать!

person Jai Govindani    schedule 11.01.2014
comment
Можете ли вы перечислить все шаги вкратце. Это действительно полезно для всех нас. Многому научился из этого ответа - person Suraj; 09.10.2017
comment
@Suraj Я рад слышать, что это помогло, но я бы подумал, что в Интернете есть много лучше написанных пошаговых руководств по этому вопросу? Рад превратить его в ресурс, если он полезен - person Jai Govindani; 09.10.2017
comment
Да, но если посмотреть на инфраструктуру AWS. Это слишком сложно, чтобы учиться и применять лучшие практики. Приходить от кого-то опытного может помочь. Можете ли вы указать статью или ресурс, где вы можете получить подробные инструкции о том, как настроить автомасштабирование и получить последний код? - person Suraj; 10.10.2017

Прежде всего, если вы хотите запустить какой-либо сайт на EC2, вам не следует использовать микроэкземпляры. Вы, конечно, не должны использовать микроэкземпляр в сочетании с автомасштабированием. Хорошей новостью является то, что, поскольку ваш микроэкземпляр находится на томе, поддерживаемом EBS, вы можете просто сделать моментальный снимок этого тома на S3 и использовать его в качестве основы для любого количества инстансов, поддерживаемых EBS.

person Mike Brant    schedule 10.01.2014
comment
Спасибо, Майк. так что S3 для победы вы думаете? Я должен изучить это. Я думал, что мне, возможно, придется использовать Amazon RDS для базы данных, но, возможно, пока что будет работать просто использование S3 в качестве универсального решения. Теперь просто лучше, потому что у меня нехватка времени .. P.S. до сих пор микроэкземпляр работал нормально, сайт обычно имеет очень низкий трафик - person D.Tate; 10.01.2014
comment
@D.Tate Да, вам, вероятно, также понадобится использовать RDS, если каждый экземпляр должен взаимодействовать с общей БД. На самом деле вы уже должны использовать это, так как попытка использовать относительно медленное хранилище EBS для MySQL замедляет работу вашей базы данных. - person Mike Brant; 10.01.2014