Объясните, что такое репликация master-slave (или primary-replica) в базах данных и для чего она используется.

Ответ

Это архитектурный паттерн, при котором один сервер базы данных, называемый мастером (master или primary), обрабатывает все операции записи (INSERT, UPDATE, DELETE), а один или несколько других серверов, называемых репликами (slaves или replicas), копируют эти данные с мастера.

Основные цели репликации:

  • Масштабирование нагрузки на чтение (Read Scaling): Клиентские приложения могут направлять запросы на чтение (SELECT) к репликам, разгружая мастер. Это значительно повышает общую производительность системы.
  • Высокая доступность (High Availability): Если мастер-сервер выходит из строя, одна из реплик может быть "повышена" до нового мастера (процесс называется failover), что минимизирует время простоя.
  • Резервное копирование: Реплику можно временно остановить для создания резервной копии без влияния на работу мастер-сервера.

Принцип работы:

  1. Мастер записывает все изменения в специальный лог транзакций (например, binary log в MySQL, WAL в PostgreSQL).
  2. Реплика подключается к мастеру и считывает этот лог.
  3. Реплика применяет полученные изменения к своей копии данных.

Репликация может быть синхронной (мастер ждет подтверждения от реплики) или асинхронной (мастер не ждет). Асинхронная репликация быстрее, но создает риск потери данных при сбое мастера (возникает лаг репликации).

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

-- На мастере (postgresql.conf)
wal_level = replica      -- Уровень логирования, достаточный для репликации
max_wal_senders = 3    -- Макс. число одновременных подключений от реплик

-- На реплике (команда в терминале)
-- Создает базовую копию данных с мастера и настраивает репликацию
pg_basebackup -h master-host -D /var/lib/postgresql/data -U replicator -P -v -R