У меня есть ситуация, когда я запускаю свое приложение и базу данных Postgresql на одном экземпляре Ec2. Данные Postgresql сохраняются на другом томе EBS, отличном от корневого тома экземпляра.
Если я хочу сбалансировать эту настройку, создав еще один экземпляр, тогда:
Какие методы помогут мне синхронизировать базу данных на обоих экземплярах?
Каковы плюсы и минусы этих методов?
Лучше ли использовать отдельный сервер базы данных, чем преодолевать вышеупомянутые хлопоты? (Сейчас основная причина, по которой я избегаю использования отдельного экземпляра базы данных, заключается в том, чтобы оставаться в пределах бесплатного уровня)
Чтобы синхронизировать базы данных PostgreSQL, вам понадобится одна главная база данных, в которую вы пишете, и одна или несколько подчиненных баз данных только для чтения, которые следуют за ней с использованием встроенной репликации PostgreSQL. См. Руководство пользователя. PostgreSQL не поддерживает репликацию с несколькими мастерами (где все реплики доступны для записи) изначально.
Однако в этом случае я не могу представить, что вам понадобится вторая база данных по причинам загрузки. Если вы находитесь на уровне бесплатного пользования EC2, то вы используете микроэкземпляр с жестким регулированием и ужасной производительностью дискового ввода-вывода на EBS. Вы получите тысяча (или более) раз больше производительности с оптимизированным для EBS большим инстансом с чередующимся массивом raid10 из четырех томов IOPS, подготовленных EBS. Даже обычный средний экземпляр, вероятно, будет работать намного лучше. Я немного писал об этом недавно.
Попытки масштабирования на данном этапе совершенно не нужны для повышения производительности. Однако это хорошая идея для защиты и резервирования данных. Рассмотрите возможность использования barman
со сценариями ловушек для хранения ваших базовых резервных копий и архивов WAL в S3 или добавлением второго сервера PostgreSQL в другую зону доступности, на котором выполняется потоковая реплика главного сервера. Не забудьте также хранить хорошие резервные копии на AWS, например, ночные дампы базы данных.
Если вы собираетесь балансировать нагрузку, вы должны предположить, что в какой-то момент у вас будет запущено более двух экземпляров. Это означает, что если у вас есть сервер Postgresql на каждом из них, вам придется выполнять репликацию «многие ко многим», что, вероятно, является большой проблемой для настройки (если он даже поддерживает такую вещь).
Лучшее решение - переместить базу данных с сервера приложений, чтобы каждый экземпляр имел доступ к общему серверу базы данных.