Ответ
Репликация — это механизм создания и синхронизации копий базы данных на нескольких серверах. Это ключевая технология для обеспечения высокой доступности, отказоустойчивости и масштабирования нагрузки.
В процессе репликации участвуют серверы с разными ролями:
- Master (Primary): Основной сервер. Он принимает все операции записи (
INSERT
,UPDATE
,DELETE
). Является единственным источником правды для данных. - Replica (Slave/Secondary): Вторичный сервер, который является копией мастера. Он получает изменения от мастера и применяет их к своему набору данных. Обычно реплики используются для обработки запросов на чтение (
SELECT
), что позволяет снизить нагрузку на основной сервер.
Основные цели репликации:
- Высокая доступность (High Availability): Если мастер-сервер выходит из строя, одна из реплик может быть "повышена" до нового мастера (процесс называется failover), и система продолжит работу с минимальным простоем.
- Масштабирование нагрузки на чтение (Read Scaling): Запросы на чтение можно распределить между несколькими репликами, что значительно увеличивает производительность системы, в которой преобладают операции чтения.
- Резервное копирование: Реплику можно временно остановить для создания бэкапа без остановки работы основного сервера.
- Географическое распределение: Размещение реплик в разных дата-центрах позволяет уменьшить задержку для пользователей из разных регионов.
Пример настройки потоковой репликации в PostgreSQL:
-- 1. На сервере-мастере (в postgresql.conf):
wal_level = replica
max_wal_senders = 3
-- 2. Создание пользователя для репликации:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'secure_password';
# 3. На сервере-реплике (перед запуском):
# Создаем базовую копию с мастера
pg_basebackup -h master_host -D /var/lib/postgresql/data -U replicator -P -v -R
После этого реплика будет подключаться к мастеру и получать все изменения.