1

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

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

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

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

ответ

5

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

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

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

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

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

Теперь, Auto-скейлер все готово:

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

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

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

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

И BTW, я использую экземпляр T1.micro. В этом вся идея использования автомасштабирования в первую очередь. Мы не хотим тратить на средний сервер все время, когда наше приложение находится в режиме ожидания.

+0

Не понял, что я оставил этот вопрос без ответа! Но ваш ответ кажется самым простым и легким для понимания, THX! Хотя @JaiGovindani также имел хороший смысл об использовании «аварийных сигналов Cloudwatch», чтобы вы могли указать, когда масштабироваться вверх и вниз. –

+1

Да, сигнализация облачного времени является частью конфигурации группы Auto-scaler. Вам нужно будет создать не менее 2 политик (масштабирование вверх и вниз), которые будут активироваться с помощью указанных вами предупреждений. Я сосредоточил свой ответ на подготовке вашего приложения LAMP, чтобы он мог быть автоматически масштабируемым. В любом случае вы можете прочитать о его стороне AWS из документации. –

+0

Год спустя, но вернулся из-за комментария - я должен не согласиться с утверждением, что использование автоматического масштабирования позволяет использовать микроустановки для производственных нагрузок. Если это оппортунистическая рабочая нагрузка, то хорошо, но если это какая-то рабочая нагрузка, требующая длительных циклов процессора, микро-это не путь. Для новичков или новых сервисов, которые пока не понимают ожидаемую рабочую нагрузку, микро-экземпляры могут быть проблематичными. –

1

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

+0

Спасибо, Майк. так что S3 за победу вы думаете? Мне нужно будет изучить это. Я думал, что мне, возможно, придется использовать Amazon RDS для базы данных, но, возможно, просто использовать S3, поскольку исправление будет работать. Простой теперь лучше b/c. Я нахожусь во времена хруста. P.S. микро-экземпляр до сих пор работал нормально, на сайте очень низкий трафик, как правило, –

+1

@ D.Tate Да, вам, вероятно, также потребуется использовать RDS, если каждый экземпляр должен взаимодействовать с общей БД. Действительно, вы должны использовать это уже, так как пытаетесь использовать относительно медленную память EBS для MySQL, замедляющую вашу базу данных. –

4

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

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

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

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

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

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

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

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

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

+0

Возможно ли, чтобы вы перечислили все шаги в основе. Это действительно полезно для всех нас. Узнал много из этого ответа – Suraj

+0

@Suraj Я рад слышать, что это помогло, но я бы подумал, что на этом веб-сайте есть много лучше написанных пошаговых инструкций? Рад превратить его в ресурс, если он полезен, хотя –

+0

Да, но когда вы смотрите на инфраструктуру AWS. Это слишком сложно изучать и применять лучшие практики. Приходить от кого-то опытного может помочь. Можете ли вы указать статью или ресурс, где вы найдете подробные инструкции по настройке автомасштабирования и вытягиванию последнего кода? – Suraj

Смежные вопросы