Ответ
Репликация в базах данных — это процесс создания и синхронизации копий (реплик) базы данных на нескольких серверах. Это ключевой механизм для достижения высокой доступности, отказоустойчивости и распределения нагрузки.
Основные цели репликации:
- Отказоустойчивость: Если основной сервер выходит из строя, один из реплицированных серверов может взять на себя его роль.
- Балансировка нагрузки: Запросы на чтение можно распределить между несколькими репликами, снижая нагрузку на основной сервер.
- Географическое распределение: Размещение реплик ближе к пользователям уменьшает задержку доступа к данным.
Основные типы репликации
-
Master-Slave (Primary-Replica)
- Принцип: Все операции записи (
INSERT
,UPDATE
,DELETE
) выполняются на одном главном узле (master), а затем копируются на один или несколько ведомых узлов (slaves). Slaves обычно обрабатывают только запросы на чтение. - Преимущества: Простота настройки, отсутствие конфликтов записи.
- Недостатки: Master является единой точкой отказа.
- Принцип: Все операции записи (
-
Master-Master (Multi-Master)
- Принцип: Все узлы в кластере являются главными и могут принимать как запросы на чтение, так и на запись. Изменения, сделанные на одном узле, синхронизируются с остальными.
- Преимущества: Высокая доступность записи; нет единой точки отказа.
- Недостатки: Сложность разрешения конфликтов (когда одни и те же данные изменяются одновременно на разных узлах).
Пример: логическая репликация в PostgreSQL
-- 1. На MASTER-сервере создается публикация для таблицы 'users'
CREATE PUBLICATION user_publication FOR TABLE users;
-- 2. На SLAVE-сервере создается подписка на эту публикацию
CREATE SUBSCRIPTION user_subscription
CONNECTION 'host=master.db.example.com port=5432 user=replicator password=secret dbname=main_db'
PUBLICATION user_publication;
После этого все изменения в таблице users
на master-сервере будут автоматически копироваться на slave-сервер.