Кратко:
- Репликация необходима для сохранности и доступности БД.
- Выбор решения зависит от задачи и учитывает размер системы, требования к скорости работы и критичность потери данных.
- Различают асинхронную и синхронную репликации.
- В PostgreSQL используется синхронная репликация, а также метод логической репликации.
- Логическая репликация основана на публикациях и подписках, гарантирующих транзакционную целостность.
- С помощью репликации можно перенести данные из вашей базы в управляемую БД PostgreSQL.
- Логическая репликация поддерживается с версии PostgreSQL 10 и выше.
Репликация
Всё ломается не только в физическом мире — виртуальные машины тоже выходят из строя. Чтобы решить проблему сохранности и доступности БД, можно создать несколько хостов и поместить на каждый её копию. Это повысит отказоустойчивость системы и даже улучшит её производительность, поскольку запросы распределятся между хостами. Однако в этом случае возникает новая задача: синхронизировать данные.
Механизм синхронизации копий БД внутри кластера называют репликацией. В различных СУБД он реализуется по-разному (ниже мы кратко остановимся на основных его видах). Выбор решения зависит от задачи и должен учитывать размер системы, требования к скорости ее работы, критичность потери даже небольшого фрагмента данных.
Различают асинхронную и синхронную репликации. Асинхронный механизм допускает задержку между подтверждением транзакции (целостного выполнения связанных между собой операций) на одном хосте и её передачей на другие хосты. Это ускоряет работу, но данные при сбое могут быть потеряны. Такой подход реализован в БД ClickHouse.

В кластерах PostgreSQL используется синхронная репликация. В этой классической СУБД запись в БД происходит на хосте-мастере. Остальные хосты в кластере — реплики, для них доступны только операции чтения данных. Транзакция подтверждается лишь тогда, когда данные записаны на диск и на хосте-мастере, и на всех репликах. Это повышает надёжность системы, но может заметно (на 25−30%) снизить скорость ее работы по сравнению с асинхронным режимом.
Асинхронная и синхронная репликации — это виды физической репликации, при которой изменённые блоки данных побайтово копируются с диска одного хоста на диск другого.
В PostgreSQL также реализован метод логической репликации. Его основное отличие от физической заключается в том, что вместо последовательностей байтов копируются таблицы и строки.
При логической репликации используются публикации и подписки. Один экземпляр БД (подписчик) подписывается на изменения в другом экземпляре (публикующем узле) и получает от него данные. Изменения на стороне публикующего узла передаются подписчику в реальном времени, публикациям в рамках подписки гарантируется транзакционная целостность (т. е. результат транзакции записывается в БД только тогда, когда все операции транзакции успешно завершены).
Подписчик, в свою очередь, также может публиковать данные, что позволяет организовать каскадную репликацию. В этом случае хост-мастер синхронизируется только с одной репликой, которая затем используется для синхронизации с другими репликами группы. Такой подход позволяет заметно уменьшить транзакционную нагрузку на хост-мастер.

С помощью репликации можно перенести данные из вашей базы в управляемую БД PostgreSQL.
Механизм подписки, на котором построена логическая репликация, позволяет перенести данные на кластер с минимальным простоем.
Логическая репликация поддерживается начиная с версии PostgreSQL 10 и выше. Вы можете переносить данные и между одинаковыми версиями, и на более свежие версии. Для этого настройте репликацию с сервера-источника на сервер-приёмник с более свежей версией СУБД.
В кластере Managed Service for PostgreSQL подписки может применять пользователь, созданный одновременно с кластером, и пользователи с ролью
mdb.admin для этого кластера.