Можно ли настроить несколько реплик (Slave) для одного основного сервера (Master) в репликации баз данных?

«Можно ли настроить несколько реплик (Slave) для одного основного сервера (Master) в репликации баз данных?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, это стандартная и распространенная практика. Один мастер (Master) может иметь множество реплик (Slaves). Такая топология называется "один ко многим" (one-to-many) и решает несколько задач:

  • Масштабирование чтения: Нагрузка запросов SELECT распределяется между репликами.
  • Резервное копирование и восстановление: Реплика может использоваться для создания бэкапов без нагрузки на мастер.
  • Аналитика: На реплике можно выполнять тяжелые отчетные запросы.
  • Геораспределение: Реплики можно размещать в разных регионах.

Пример настройки дополнительной реплики в MySQL (повторить для каждого Slave):

-- На Master сервере
CREATE USER 'replica_user'@'slave_server_ip' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'slave_server_ip';

-- На новом Slave сервере
CHANGE MASTER TO
  MASTER_HOST='master_ip_address',
  MASTER_USER='replica_user',
  MASTER_PASSWORD='strong_password',
  MASTER_LOG_FILE='mysql-bin.000003', -- Текущий бинарный лог мастера
  MASTER_LOG_POS=154; -- Текущая позиция
START SLAVE;

Ключевые моменты для архитектуры:

  1. Нагрузка на мастер: Мастер должен иметь достаточные сетевые и дисковые ресурсы для отправки бинарных логов всем репликам.
  2. Задержка репликации (Replication Lag): Разные реплики могут отставать от мастера на разное время.
  3. Автоматизация: Для управления топологией (переключение мастера при сбое) используются инструменты вроде Orchestrator или MHA (Master High Availability).
  4. Альтернатива: В некоторых случаях используется каскадная репликация (Master -> Slave1 -> Slave2), чтобы снизить нагрузку на первичный мастер.