Логическая репликация
Эта страница переведена при помощи нейросети GigaChat.
Изменено поведение оригинального механизма. Изменения описаны в рамках подраздела «Доработки Pangolin».
Логическая репликация – это метод репликации объектов данных и их изменений, основанный на их идентичности репликации (обычно первичном ключе). Такую репликацию называют логический в отличие от физической репликации, которая использует точные адреса блоков и побайтовую репликацию. PostgreSQL поддерживает оба механизма одновременно, смотрите раздел «Высокая доступность, балансировка нагрузки и репликация». Логическая репликация позволяет детально контролировать как репликацию данных, так и безопасность.
Логическая репликация использует модель публикации и подписки с одним или несколькими подписчиками, подписанными на одну или несколько публикаций на узле издателя. Подписчики извлекают данные из публикаций, на которые они подписаны, и могут впоследствии повторно публиковать данные для каскадной репликации или более сложных конфигураций.
Когда начинается логическая репликация таблицы, 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 # Будет запрещено создание слота с именем как у слота синхронизации логической репликации