Потоковая репликация и WAL
Настраивайте физическую потоковую репликацию на основе WAL, отслеживайте отставание и настраивайте синхронные реплики для записи без потери данных
«Потоковая репликация и WAL» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Зачем нужна репликация?
Репликация одновременно решает несколько задач:
- HA — пережить отказ основного сервера
- Масштабирование чтения — перенести SELECT на реплики
- Резервное копирование / PITR — непрерывное архивирование
- Географическое распределение — разместить реплики ближе к пользователям
WAL: журнал предзаписи
Каждая операция записи сначала попадает в WAL. WAL гарантирует сохранность данных и служит основой репликации: WAL передаётся на реплику → реплика воспроизводит WAL → реплика обновлена.
Физическая потоковая репликация
Поток WAL, передаваемый от основного сервера к реплике байт в байт:
- Реплика — бинарная копия основного сервера
- Одинаковая версия PostgreSQL
- Реплицируется весь кластер: все базы данных и таблицы
- Только для чтения
Настройка: основной сервер
Настройте основной сервер в postgresql.conf:
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
-- pg_hba.conf: allow replication connections
host replication replicator 10.0.0.0/24 md5Настройка: реплика
Создайте базовую резервную копию и запустите реплику, указав сведения для подключения к основному серверу:
pg_basebackup -h primary -D /var/lib/postgresql/data -U replicator -W -X stream -P
-- postgresql.conf on replica:
primary_conninfo = 'host=primary port=5432 user=replicator password=...'
-- Touch standby.signal file and start:
touch /var/lib/postgresql/data/standby.signalСинхронная и асинхронная репликация
- Асинхронная (по умолчанию) — основной сервер подтверждает транзакцию, не дожидаясь реплики; реплика может отставать
- Синхронная — основной сервер ждёт подтверждения реплики перед COMMIT; потери данных исключены, но работа идёт медленнее
-- Synchronous configuration on primary:
synchronous_commit = on
synchronous_standby_names = 'replica1, replica2'Отставание репликации
Асинхронные реплики отстают от основного сервера. Контролируйте:
SELECT client_addr, state, sent_lsn, write_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes
FROM pg_stat_replication;Слоты репликации
Слоты гарантируют, что основной сервер сохраняет WAL, пока реплика не получит его:
SELECT pg_create_physical_replication_slot('replica1');
-- On replica:
primary_slot_name = 'replica1'Проблема со слотом
Если реплика отключится и больше не подключится, её слот не позволит очищать WAL — диск заполнится. Удаляйте неиспользуемые слоты:
SELECT pg_drop_replication_slot('replica1');Каскадные реплики
Реплика сама может передавать WAL другим репликам, снижая нагрузку на основной сервер.
Горячий резерв
По умолчанию реплики принимают запросы только для чтения (hot_standby = on). Длительные запросы на чтение на реплике могут задерживать воспроизведение WAL; настройте max_standby_streaming_delay.
Повышение роли
Чтобы сделать реплику новым основным сервером:
pg_ctl promote -D /var/lib/postgresql/data
-- Or in SQL:
SELECT pg_promote();Итоги
Потоковая репликация = передача WAL + воспроизведение.
- Физическая, идентичная на уровне бинарных данных
- По умолчанию асинхронная; синхронная исключает потерю данных
- Слоты сохраняют WAL, но требуют внимательного контроля
- Повышение роли превращает реплику в основной сервер
Быстрая проверка
Каков основной риск отказа от слота репликации для потоковой реплики?
Часто задаваемые вопросы
Урок «Потоковая репликация и WAL» бесплатный?
Да — полный текст урока «Потоковая репликация и WAL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Потоковая репликация и WAL»?
Настраивайте физическую потоковую репликацию на основе WAL, отслеживайте отставание и настраивайте синхронные реплики для записи без потери данных Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Потоковая репликация и WAL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Потоковая репликация и WAL
- Логическая репликация для шардинга
- Переключение при сбое и выбор лидера (Patroni, Stolon)
- Реплики для чтения и маршрутизация соединений