Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: master, slave, replication, database, distributed systems, high availability

В чем разница между master и slave нодами?

Вопрос проверяет понимание архитектуры распределенных систем и баз данных, где используется модель master-slave для репликации и распределения нагрузки.

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

Master-нода (главная) обрабатывает все операции записи и обновления данных, а slave-ноды (подчиненные) реплицируют данные с master и обслуживают операции чтения. Это повышает производительность и отказоустойчивость: если master падает, один из slave может стать новым master. Такая архитектура часто используется в базах данных, таких как MySQL, PostgreSQL и Redis, для масштабирования и обеспечения высокой доступности.

Длинный ответ

В распределенных системах и базах данных модель master-slave — это архитектурный паттерн для управления данными и распределения нагрузки. Основная идея заключается в разделении ролей между узлами (нодами): один узел назначается мастером (master), а остальные — подчиненными (slave).

Роли нод

  • Master-нода: Это первичный узел, который обрабатывает все операции записи (INSERT, UPDATE, DELETE) и изменения схемы данных. Все изменения сначала применяются на master, а затем реплицируются на slave-ноды. Master также может обрабатывать запросы на чтение, но часто эта нагрузка делегируется slave для балансировки.
  • Slave-ноды: Эти узлы получают копию данных с master через механизм репликации (например, бинарные логи или WAL). Они предназначены в первую очередь для операций чтения (SELECT). Slave обеспечивают масштабирование чтения и могут использоваться для резервного копирования или аналитических запросов без нагрузки на master.

Как работает репликация

Репликация данных обычно происходит асинхронно или синхронно. При асинхронной репликации master подтверждает запись клиенту до того, как изменения переданы всем slave, что повышает производительность, но может привести к небольшой задержке (лаг) в данных на slave. Синхронная репликация гарантирует, что данные записаны на master и хотя бы на одном slave перед подтверждением клиенту, обеспечивая консистентность, но снижая скорость записи.

Пример настройки в MySQL

-- На master-сервере настраиваем бинарный лог и пользователя для репликации
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- На slave-сервере указываем master для подключения
CHANGE MASTER TO
  MASTER_HOST='master_host',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

START SLAVE;
-- Проверяем статус репликации
SHOW SLAVE STATUS\G

Применение и преимущества

Архитектура master-slave широко используется в базах данных (MySQL, PostgreSQL, MongoDB), системах кэширования (Redis) и распределенных файловых системах. Ключевые преимущества:

  • Масштабирование чтения: Добавление slave позволяет обслуживать больше запросов на чтение.
  • Высокая доступность: При сбое master один из slave может быть повышен до роли master (failover), минимизируя простой.
  • Резервное копирование: Slave можно использовать для создания бэкапов без остановки master.
  • Аналитика: Тяжелые отчетные запросы выполняются на slave, не мешая основной транзакционной нагрузке.

Вывод: Модель master-slave стоит применять в системах, где требуется масштабировать операции чтения, обеспечить отказоустойчивость и разделить нагрузку между узлами. Она особенно полезна для веб-приложений с высокой читаемой нагрузкой, таких как CMS, блоги или каталоги товаров.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • Postgres

    Postgres

  • Networks

Ключевые слова

#master

#slave

#replication

#database

#distributed systems

#high availability

Подпишись на Java Developer в телеграм