В настоящее время я ищу автоматическое масштабирование моей установки wordpress на Amazon EC2. Все работает, я могу связать свой экземпляр EBS, добавить политику, а затем, если необходимо, автоматически запустить экземпляры Amazon за моим балансировщиком нагрузки.
Но если бы у меня был плагин для wordpress, он не будет устанавливаться на каждом экземпляре. Я хочу, чтобы при установке плагина он также автоматически устанавливался на других серверах.
Что я могу сделать для этого? Есть идеи?
У вашего вопроса два аспекта:
Синхронизации:
Установка плагина Wordpress вносит изменения в файлы и базу данных. Следовательно, чтобы имитировать изменения на всех ваших серверах, вам нужно будет изменить как файлы, так и базы данных каждого экземпляра. Конкретная реализация будет зависеть от того, идентичны ли все ваши экземпляры (то есть все запускают и веб-сервер, и сервер базы данных), или вы запускаете свои веб-серверы и серверы баз данных в разных экземплярах.
Вероятно, есть хороший аргумент в пользу запуска одного экземпляра с вашим веб-сервером (с последующим автоматическим масштабированием этого экземпляра) и другого экземпляра с вашим сервером базы данных (например, http://www.mysqlperformanceblog.com/2006/10/16/should-mysql-and-web-server-share-the-same-box/ ). Конечно, как только вы автоматически масштабируете базы данных, вы сталкиваетесь с проблемой обеспечения единообразия данных во всех экземплярах.
Синхронизация файлов: Самым простым решением для синхронизации данных является использование rsync. Вы можете запускать его периодически (через cron) или запускать его с помощью incron, что позволит запускать его при изменении содержимого каталогов. Другой вариант - lsyncd, который использует inotify для отслеживания изменений в каталоге и запуска rsync.
Другой подход к синхронизации файлов - использование сетевых / распределенных / кластерных файловых систем. Например, вы можете использовать Gluster для репликации (нескольких копий) и / или распространения (распространения).
Вы также, вероятно, захотите поделиться своими сеансами PHP между вашими узлами.
Синхронизация баз данных: Возможно, синхронизация файлов - самая простая задача. Синхронизация баз данных является более сложной задачей. При использовании с различным количеством узлов сложность возрастает.
Я бы рекомендовал использовать отдельный экземпляр MySQL и один из сценариев на основе rsync (возможно, lsyncd) для синхронизации файлов. Автоматически масштабируйте свои веб-серверы, и, вероятно, пройдет некоторое время, прежде чем вам придется беспокоиться о сервере базы данных. Если вы автоматически масштабируете базу данных, держите главный узел вне группы и масштабируйте подчиненные.
Развертывание:
На этом фронте вам могут потребоваться небольшие различия в каждом узле (например, один главный, один подчиненный и т. Д.). Фреймворки (как упоминалось в ответе voretaq7) были бы подходящим вариантом. Во многих отношениях, чем лучше ваша реализация, тем меньше у вас необходимости в автоматическом масштабировании. Одна установка может включать Corosync и Pacemaker для мониторинга состояния каждого узла и служб, работающих на нем, - для выбора главного узла, а затем для запуска сценария для масштабирования кластера по мере необходимости.