0Pricing
SQL Academy · Урок

Потоковая репликация и 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 — локальная установка не требуется.

Все уроки этого курса

  1. Потоковая репликация и WAL
  2. Логическая репликация для шардинга
  3. Переключение при сбое и выбор лидера (Patroni, Stolon)
  4. Реплики для чтения и маршрутизация соединений
← Назад к SQL Academy