← Назад к вопросам

Для чего нужна репликация в БД?

2.0 Middle🔥 141 комментариев
#Архитектура и паттерны#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Репликация в БД

Репликация базы данных — это механизм создания и поддержания идентичных копий данных на нескольких серверах БД. Это критически важный компонент современной инфраструктуры для обеспечения надёжности, масштабируемости и производительности.

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

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

Балансировка нагрузки — распределение запросов на чтение между серверами:

# Все WRITE запросы → Master
# Все READ запросы → Replicas
write_db = psycopg2.connect("master.db.com")
read_db = psycopg2.connect("replica1.db.com")

Снижение нагрузки — master занят обработкой изменений, replicas обслуживают чтение.

Резервное копирование — replicas служат резервными копиями для восстановления.

Типы репликации

1. Master-Slave (Master-Replica)

Один главный сервер и один или больше второстепенных:

    MASTER
      ↓ (Write Ahead Log/Binlog)
    SLAVE 1
    SLAVE 2
    SLAVE 3

Как работает в PostgreSQL:

# На Master: postgresql.conf
wal_level = replica
max_wal_senders = 10

# На Replica: recovery.conf
primary_conninfo = 'host=master.com user=replication'

2. Master-Master (Multi-Master)

Несколько серверов могут принимать запросы на запись. Плюсы: нет единой точки отказа. Минусы: сложные конфликты при одновременных изменениях.

3. Cascading Replication

Репликация цепочкой для масштабирования: MASTER → REPLICA 1 → REPLICA 2.

Синхронизация данных

Синхронная репликация

Клиент → MASTER получает WRITE → WAIT на подтверждение REPLICA → COMMIT. Плюсы: консистентность. Минусы: медленнее.

Асинхронная репликация

Клиент → MASTER получает WRITE → COMMIT (не ждём REPLICA) → REPLICA получает позже. Плюсы: быстро. Минусы: риск потери данных.

Практический пример: PostgreSQL

-- На MASTER создать пользователя репликации
CREATE ROLE replication WITH REPLICATION ENCRYPTED PASSWORD 'password' LOGIN;

-- На MASTER: состояние replicas
SELECT client_addr, state, write_lag 
FROM pg_stat_replication;

-- На REPLICA: отставание от master
SELECT 
    EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp()) AS lag_seconds;

Когда репликация критична

  • E-commerce — нельзя потерять заказы
  • Финансы — требуется консистентность
  • SaaS с SLA — нужна 99.9% доступность
  • Большие нагрузки — нужно распределение читающих запросов

Репликация — неотъемлемая часть производственных систем, обеспечивающая отказоустойчивость и масштабируемость.

Для чего нужна репликация в БД? | PrepBro