Для чего нужна репликация в БД?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Репликация в БД
Репликация базы данных — это механизм создания и поддержания идентичных копий данных на нескольких серверах БД. Это критически важный компонент современной инфраструктуры для обеспечения надёжности, масштабируемости и производительности.
Основные цели репликации
Высокая доступность — если один сервер выходит из строя, другие могут продолжать работу.
Балансировка нагрузки — распределение запросов на чтение между серверами:
# Все 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% доступность
- Большие нагрузки — нужно распределение читающих запросов
Репликация — неотъемлемая часть производственных систем, обеспечивающая отказоустойчивость и масштабируемость.