hostprofi.ru
Подобрать хостинг
Термин·буква M

Master-Slave

краткое определение

Master-Slave (Primary-Replica) репликация — архитектурный паттерн СУБД, при котором один сервер (Master/Primary) принимает все операции записи и синхронизирует изменения с одним или несколькими Slave/Replica-серверами. Slave используются для чтения, резервного копирования и отказоустойчивости.

Master-Slave репликация (с 2020 года всё чаще называют Primary-Replica) — механизм синхронизации данных между несколькими серверами СУБД, при котором один сервер (Master/Primary) является единственным авторитативным источником данных и принимает операции записи, а один или несколько Slave/Replica-серверов получают копии изменений и используются для чтения.

Как работает

В MySQL/MariaDB репликация работает через binary log (binlog): Master записывает все изменения в binlog в трёх форматах:

  • Statement-based — SQL-запросы целиком. Компактно, но может давать расхождения при недетерминированных функциях.
  • Row-based — изменённые строки. Надёжно, объёмнее.
  • Mixed — автовыбор оптимального формата.

Slave подключается к Master, запускает IO thread (читает binlog) и SQL thread (воспроизводит изменения). Задержка репликации (replication lag) — типично 0-100 мс при нормальной нагрузке.

В PostgreSQL — Streaming Replication через WAL (Write-Ahead Log): реплика непрерывно получает WAL-записи. Поддерживает синхронный режим (Master ждёт подтверждения от реплики — гарантия без потерь) и асинхронный (быстрее, но возможна потеря последних транзакций при отказе).

Использование в архитектуре

Master-Slave решает несколько задач:

  • Read scaling — запросы на чтение распределяются между репликами, снижая нагрузку на Master.
  • Отказоустойчивость — при отказе Master реплика может быть повышена (promote) до Primary.
  • Резервное копированиеmysqldump/pg_dump с реплики без нагрузки на Master.
  • Географически распределённые сервисы — реплика в другом регионе снижает задержку чтения для локальных пользователей.

История и терминология

Термины «Master» и «Slave» применялись в вычислительной технике с 1950-х годов. В 2020 году ряд крупных проектов перешёл на нейтральную терминологию: MySQL 8.0 начал называть master → source, slave → replica. PostgreSQL официально перешёл на primary/standby. GitHub, Django, Redis также обновили документацию. Функциональность при этом не изменилась.

На что обращать внимание

Replication lag — главная проблема асинхронной репликации. Мониторинг задержки: SHOW SLAVE STATUS\G (MySQL) или pg_stat_replication (PostgreSQL) через мониторинг сервера. Если приложение пишет в Master и сразу читает с реплики, возможно получение устаревших данных (eventual consistency). Для критичных операций (авторизация, финансовые транзакции) читайте с Master. Автоматический failover требует дополнительного инструмента: MHA (MySQL), Patroni (PostgreSQL), Orchestrator. При ручном promote реплики нужно изменить конфигурацию приложения или использовать Virtual IP. На VPS минимальная конфигурация репликации — Master + 1 Replica.

Master-Slave vs кластеризация

Master-Slave обеспечивает репликацию данных, но не горизонтальное масштабирование записи. Для масштабирования записи используют кластеризацию БД (MySQL Cluster, Galera Cluster, PostgreSQL Citus). Master-Slave — правильный выбор для 80% сайтов: один Master принимает все записи, несколько реплик обрабатывают READ-запросы. Транзакции в реплицируемых системах должны соответствовать ACID-требованиям на уровне каждого узла.

Другие термины