Назад | Перейти на главную страницу

Использование Amazon EC2 для репликации postgres_fdw или BDR

Мне было поручено провести две проверки концепции 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, и у вас не будет проблем.

Надеюсь, эта информация будет полезной.