Перейти к основному содержимому

Логическая репликация

примечание

Эта страница переведена при помощи нейросети GigaChat.

warning

Изменено поведение оригинального механизма. Изменения описаны в рамках подраздела «Доработки Pangolin».

Логическая репликация – это метод репликации объектов данных и их изменений, основанный на их идентичности репликации (обычно первичном ключе). Такую репликацию называют логический в отличие от физической репликации, которая использует точные адреса блоков и побайтовую репликацию. PostgreSQL поддерживает оба механизма одновременно, подробнее смотрите раздел «Высокая доступность, балансировка нагрузки и репликация». Логическая репликация позволяет детально контролировать как репликацию данных, так и безопасность.

Логическая репликация использует модель публикации и подписки с одним или несколькими подписчиками, подписанными на одну или несколько публикаций на узле издателя. Подписчики извлекают данные из публикаций, на которые они подписаны, и могут впоследствии повторно публиковать данные для каскадной репликации или более сложных конфигураций.

Логическая репликация таблицы обычно начинается со снимка данных в базе данных издателя и копирования этих данных подписчику. После этого изменения на стороне издателя отправляются подписчику по мере их возникновения в реальном времени. Подписчик применяет данные в том же порядке, что и издатель, чтобы гарантировать согласованность транзакций для публикаций в рамках одной подписки. Этот метод репликации данных иногда называют транзакционной репликацией.

Типичные варианты использования логической репликации включают:

  • Отправку инкрементальных изменений в одной базе данных или подмножестве базы данных подписчикам по мере их возникновения.
  • Запуск триггеров для отдельных изменений по мере их поступления на подписчика.
  • Консалидация нескольких баз данных в одну (например, для аналитических целей).
  • Репликацию между разными основными версиями PostgreSQL.
  • Репликацию между экземплярами PostgreSQL на разных платформах (например, с Linux на Windows).
  • Предоставление доступа к реплицированным данным разным группам пользователей.
  • Совместное использование подмножества базы данных несколькими базами данных.

База данных подписчиков ведет себя так же, как и любой другой экземпляр PostgreSQL, и может использоваться в качестве издателя для других баз данных путем определения собственных публикаций. Когда подписчик рассматривается приложением только для чтения, не будет конфликтов от одной подписки. С другой стороны, если выполняются другие записи либо приложением, либо другими подписчиками к одному и тому же набору таблиц, могут возникнуть конфликты.

Доработки Pangolin​

Параметры настройки логической репликации​

Реализованы дополнительные параметры настройки логической репликации для регулирования удаления неизвестных слотов репликации для оркестратора кластера (Pangolin Manager).

drop_repl_sync_slots_only_after_restart​

Параметр определяет, будут ли не описанные в конфигурационном файле DCS-слоты синхронизации логической репликации удаляться только после рестарта СУБД или они удалятся как любые другие не описанные слоты репликации:

  • тип данных: boolean;
  • по умолчанию: true.

Если этот параметр установлен на значение true, то не описанные в конфигурационном файле DCS-слоты синхронизации логической репликации будут удаляться только после перезапуска СУБД. Иначе, если параметр установлен на значение false, такие слоты будут удаляться при тех же условиях, что и любые другие не описанные в конфигурационном файле dcs-слоты.

Пример использования​

Данный параметр настраивается через команду edit-config утилиты pangolin-manager-ctl:

drop_repl_sync_slots_only_after_restart: false # Слоты синхронизации логической репликации не будут дропнуты без рестарта СУБД
forbid_create_pg_sync_slots_by_user​

Параметр определяет, может ли пользователь создавать слоты с именем, как у слотов синхронизации логической репликации, то есть по шаблону pg_N_sync_N_N:

  • тип данных: boolean;
  • по умолчанию: false.

Если этот параметр установлен на значение on/true, то при попытке создать слот логической репликации с именем по шаблону pg_N_sync_N_N (например, с именем pg_19732_sync_17854_7442686389907653644) будет выведена ошибка:

ERROR: pg_19732_sync_17854_7442686389907653644 matches forbidden pattern pg_%u_sync_%u_%llu that is used for logical replication synchronization slots

Иначе, если параметр установлен на значение off/false, можно будет создать слот с именем по шаблону pg_N_sync_N_N.

Пример использования​

В файле конфигурации параметр можно установить следующим образом:

forbid_create_pg_sync_slots_by_user = on # Будет запрещено создание слота с именем как у слота синхронизации логической репликации