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) передаётся на слейв Слейв доступен для чтения, но не принимает запись данных…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как устроена репликация в 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.