Как устроена репликация в PostgreSQL: master-slave и master-master?

PostgreSQL — реляционная БД с поддержкой репликации В режиме master-slave репликация бывает асинхронной или синхронной WAL (Write-Ahead Log) передаётся на слейв Слейв доступен для чтения, но не принимает запись данных…

Короткий ответ

Что ответить на собеседовании

PostgreSQL — реляционная БД с поддержкой репликации В режиме master-slave репликация бывает асинхронной или синхронной WAL (Write-Ahead Log) передаётся на слейв Слейв доступен для чтения, но не принимает запись данных Master-master реализуют с помощью внешних инструментов (Bucardo, BDR) --master-master сложнее из-за разрешения конфликтов и двухсторонней синхронизации Репликация используется для повышения отказоустойчивости и масштабирования чтения

Подробный разбор

Ответ с пояснениями

Как устроена репликация в PostgreSQL: master-slave и master-master?

  • PostgreSQL — реляционная БД с поддержкой репликации
  • В режиме master-slave репликация бывает асинхронной или синхронной
  • WAL (Write-Ahead Log) передаётся на слейв
  • Слейв доступен для чтения, но не принимает запись данных
  • Master-master реализуют с помощью внешних инструментов (Bucardo, BDR) --master-master сложнее из-за разрешения конфликтов и двухсторонней синхронизации
  • Репликация используется для повышения отказоустойчивости и масштабирования чтения

Подробный ответ

Основной ответ

В PostgreSQL выделяют два базовых варианта репликации: master-slave (первичный-реплика) и master-master (много мастеров). В классической схеме master-slave один сервер выступает мастером и принимает записи, а один или несколько слейвов получают реплицированные данные для чтения либо резервирования. Реализация master-master в PostgreSQL сложнее и обычно требует дополнительных решений, например BDR или logical replication с механизмом разрешения конфликтов: полноценный режим master-master не поддерживается СУБД нативно «из коробки».

Ключевые моменты

  • Streaming replication (master-slave): мастер передаёт слейву журнал транзакций на уровне WAL (Write-Ahead Log) в режиме реального времени. Слейв воспроизводит полученные транзакции, поддерживая синхронность данных. Начиная с PostgreSQL 12+ это стандартный и наиболее распространённый способ.
  • Logical replication (master-slave и частично master-master): вместо бинарных WAL-записей передаются логические изменения — INSERT, UPDATE и DELETE. Такой подход позволяет выбирать конкретные таблицы для репликации и при наличии дополнительной логики организовать двунаправленную репликацию.
  • Master-master репликация: симметричная запись на несколько узлов невозможна без сторонних расширений. Обычно применяют BDR (Bi-Directional Replication) или PgLogical. Они обеспечивают асинхронный обмен изменениями между мастерами и помогают разрешать конфликты записи.
  • В master-slave режиме репликация может быть asynchronous — с задержкой между записью и применением данных, либо synchronous — когда коммит подтверждается только после записи на реплике. Синхронный вариант повышает консистентность, но уменьшает производительность.

Практический контекст

В промышленной эксплуатации чаще выбирают streaming replication master-slave для HA и масштабирования чтения: этот вариант надёжен и относительно прост. Master-master применяют в геораспределённых системах, где запись выполняется в нескольких дата-центрах, однако он требует сложного разрешения конфликтов и специализированной настройки. Например, крупные финансовые сервисы используют logical replication для передачи отдельных таблиц между зонами, а геораспределённые сервисы — BDR.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку