Replication

Replication — копирование данных между узлами БД. Цели: HA (отказоустойчивость), read scale, geo-distribution, backup, disaster recovery.

Виды по механизму

ТипЧто копируется
Physical / Streamingбайт-в-байт WAL/redo log
Logicalдекодированные события (INSERT/UPDATE/DELETE)
Statement-basedсам SQL — legacy, проблемы с non-deterministic
Trigger-basedSQL-триггеры пишут в отдельную таблицу

Виды по топологии

Sync vs Async

SyncAsync
COMMIT возвращаетсяпосле подтверждения репликипосле записи на мастере
Latency+ сетевой RTTбыстро
Потеря данных при падении мастеранетвозможна (RPO > 0)
Availabilityпадение реплики блочитне блочит

Компромисс: quorum — жди N из M реплик. PG synchronous_commit=remote_apply.

PostgreSQL

Streaming replication

Мастер → WAL sender → сеть → WAL receiver → реплика
                                    ↓
                              apply WAL

Реплика read-only (hot standby) — можно SELECT.

Logical replication

# на мастере
CREATE PUBLICATION mypub FOR TABLE users;

# на подписчике
CREATE SUBSCRIPTION mysub 
  CONNECTION 'host=master.example.com dbname=shop' 
  PUBLICATION mypub;

Плюсы: разные версии PG, разные схемы, только выбранные таблицы, ×→× репликация.

MySQL

Split-brain

При потере связи мастер+реплика оба могут думать что они primary. Оба принимают запись → расхождение данных.

Защита: quorum (нужно >N/2 узлов), fencing (STONITH — shoot the other node in the head), witness node.

Read replicas

Read-only slaves — распределение read-нагрузки. Но: replication lag. Записал → сразу читаешь с реплики → можешь не увидеть свою запись.

Решения: read-your-writes (клиент помнит LSN, ждёт), sticky routing, чтение с мастера для критических.

Consensus для multi-master

Настоящий multi-master без conflicts требует consensus. Алгоритмы: Paxos, Raft, Zab. Используют: etcd, Consul, CockroachDB, Spanner, MongoDB replica set (Raft-подобный).

См. также

← на главную