Мне было поручено провести две проверки концепции Postgres на Amazon RDS, одну с postgres_fdw
и еще один с BDR (двунаправленная репликация расширение). После многих поисков в Интернете кажется, что невозможно сделать либо replication
или настройка postgres_fdw
на RDS.
Однако кто-то в Интернете (я не могу найти ссылку) упомянул EC2 как возможный способ создания Postgres Foreign DataWrapper или даже создание репликации из БД Postgres, назовем это Frankfurt
, чтобы подключиться ко второму экземпляру Postgres, который мы назовем Seoul
.
Может ли кто-нибудь подтвердить, что обе настройки postgres_fdw
а также BDR
можно установить в EC2?
Спасибо.
EC2 предоставляет автономную виртуальную машину. Если BDR не требует привилегированного доступа к оборудованию (а это не так), вы настроены.
Напротив, RDS предоставляет управляемую службу базы данных, которая предлагает подмножество функций Postgres. Как вы обнаружили, если вам нужно что-то, чего не предлагает RDS, следующим шагом обычно является запуск ваших собственных баз данных поверх EC2. Будьте предупреждены, что теперь вы можете обрабатывать резервные копии, репликацию, планирование обслуживания, применять обновления к базовой ОС, управлять экземплярами, на которых работает база данных, и так далее.
Мы используем postgres_fdw
в AWS RDS. Есть некоторые проблемы, связанные с производительностью, но это работает. Вам просто нужно использовать PostgreSQL 9.3 или выше и проверить, что postgres_fdw
в rds.extensions
группы параметров.
Следуя вашему определению, у нас есть БД Frankfurt
у которого есть чужой сервер Seoul
. И пока подключен к Frankfurt
вы можете получить доступ к данным на Seoul
как если бы они были местными столами.
Вам нужно запустить что-то подобное на Frankfurt
БД (и, конечно же, убедитесь, что обе БД могут обращаться друг к другу через VPC, вам не нужно открывать их для всех):
CREATE EXTENSION postgres_fdw;
CREATE SERVER FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'seoul_host_address', port '5432', dbname 'seoul_db_name');
-- maybe you need this (if you want to map users)
CREATE USER MAPPING FOR public SERVER
seoul OPTIONS (user 'seoul-writer', password 'XXXXXXX');
-- then just create foreign table
CREATE FOREIGN TABLE table_name (
id integer DEFAULT NOT NULL,
name character varying(64)
) SERVER seoul OPTIONS (tablename 'seoul_table_name');
Это не идеальное решение для репликации. Если вам просто нужна реплика только для чтения - используйте репликацию AWS RDS, и у вас не будет проблем.
Надеюсь, эта информация будет полезной.