Допустим, у меня есть веб-приложение, работающее на одном экземпляре EC2 (PHP + PostgreSQL). Теперь я создаю балансировщик нагрузки и устанавливаю автоматическое масштабирование.
Возникает вопрос: как реплицировать базу данных на лету, когда AutoScaling запускает новый экземпляр EC2? Как мне реплицировать файлы и папки моего приложения? И, наконец, как мне синхронизировать изменения, сделанные в каждом экземпляре, с моим основным экземпляром?
Вы должны отделить экземпляр PostgreSQL от вашего экземпляра PHP / Apache. И настройте автомасштабирование для вашего экземпляра PHP / Apache.
Экземпляры PHP / Apache могут синхронизировать получение файлов через s3, git или svn. Или используйте общую файловую систему, например NFS.
Таким образом, у вас может быть 1-N экземпляров PHP / Apache только с 1 БД.
Когда вы запускаете только два экземпляра, я бы подождал с балансировщиком нагрузки и начал бы с разделения ролей сервера. Итак, вы запускаете приложение PHP на одном сервере, а PostgreSQL - на другом.
Вы получите большую эффективность, поскольку серверу всегда легче выполнять одну и ту же задачу, чем переключаться между базой данных и скриптами php. Специально для базы данных.
Когда придет время добавить третий сервер, вы можете добавить внешний сервер и установить балансировщик нагрузки между этими двумя, но оба они будут подключаться к одной базе данных.
Но есть еще одна проблема со схемой балансировщика нагрузки, о которой вы не упомянули, но с которой вы обязательно столкнетесь, и это поддержание сеансов. Но если у вас нет зарегистрированных пользователей, это, вероятно, не проблема для вас.
Я также предлагаю отделить веб-серверы от базы данных. Масштабирование веб-серверов (= запуск большего количества его экземпляров) обычно просто с использованием одной из параметров синхронизации или совместного использования файловой системы, описанных в других ответах.
Однако с базой данных это будет не так просто.
Если у вас есть возможность изменить свое приложение, вы также можете дать Amazon Служба реляционной базы данных как попробуй. Однако, поскольку это клон MySQL, он не идентичен с точки зрения функций PostgreSQL.
Если вы хотите попробовать совершенно другой вариант хранения, вы можете взглянуть на SimpleDB - что является одним из этих «современных» вариантов хранения NoSQL. Но не ожидайте, что сможете делать все, к чему вы привыкли, с реляционной базой данных.
Оба эти варианта хранения (RDS и SimpleDB) масштабируемы по своей конструкции, поэтому у вас не должно возникнуть проблем при их использовании с большим количеством веб-серверов с балансировкой нагрузки впереди.