Распределённые данные · проверено по источникам

Синхронная репликация

Синхронная репликация — режим, в котором фиксация ждёт от требуемых реплик подтверждения заранее выбранного этапа: записи, устойчивого сброса или применения изменений.

Также ищут: Synchronous replication · synchronous commit replica

Практический смысл

Почему это важно

Нужно решить, какой отказ должен пережить подтверждённый заказ и когда он должен стать виден на реплике. От этого зависят точка ожидания, выбор реплик и допустимая остановка новых подтверждений.

Доказательная часть

Что подтверждено

  1. В PostgreSQL удалённое ожидание включается совместно настройками synchronous_standby_names и synchronous_commit. Само подключение резервного сервера или слово «синхронный» в его имени не задаёт гарантию фиксации.

    Граница применимости: PostgreSQL 18; непустой выбор синхронных реплик и режим synchronous_commit, требующий удалённого подтверждения.

  2. Ожидание удалённого подтверждения добавляет к фиксации передачу данных и выполнение выбранного этапа на реплике. Защиту от отказа общей площадки можно заявлять только при размещении нужной устойчивой копии вне этого отказа.

    Граница применимости: Сопоставление синхронного ожидания PostgreSQL и модели размещения копий; число реплик само не доказывает независимость.

  3. synchronous_commit=remote_write ждёт, пока требуемая реплика запишет WAL средствами своей ОС. Это защищает от сбоя процесса PostgreSQL на реплике, но не гарантирует сохранность этой удалённой записи при сбое её ОС.

    Граница применимости: PostgreSQL 18; локальный WAL при remote_write также ожидает устойчивого сброса.

  4. При synchronous_commit=on и заданных синхронных репликах подтверждение ждёт устойчивого сброса WAL на требуемых репликах. Ждать применения изменений для чтения этот режим не обязан.

    Граница применимости: PostgreSQL 18; исправный тракт устойчивого хранения и выполнение выбранного числа подтверждений.

  5. remote_apply ждёт, пока требуемая реплика воспроизведёт транзакцию, сделав её доступной новым подходящим снимкам чтения. Уже открытый старый снимок Repeatable Read от этого не становится новым.

    Граница применимости: Сопоставление synchronous_commit=remote_apply и снимков чтения PostgreSQL 18; касается подтвердивших реплик.

  6. synchronous_standby_names задаёт число подтверждений и множество допустимых реплик. FIRST выбирает требуемые реплики по приоритету; ANY допускает подтверждение от любого требуемого числа реплик из списка.

    Граница применимости: PostgreSQL 18, режимы FIRST и ANY; подтверждение не означает ожидание всех существующих реплик.

  7. Если достаточное число требуемых синхронных реплик не может подтвердить нужный этап, фиксация продолжает ждать. Отмена ожидания или потеря ответа не доказывает откат уже локально зафиксированной транзакции.

    Граница применимости: Синхронное ожидание PostgreSQL 18; исход проверяют отдельно перед повтором деловой операции.

  8. synchronous_commit можно менять для отдельных транзакций. Значение local сохраняет ожидание локального устойчивого WAL, но убирает удалённое; off убирает и ожидание локального сброса.

    Граница применимости: PostgreSQL 18; наличие настроенных синхронных реплик не переопределяет ослабленный режим конкретной транзакции.

Граница терминов

Не путать

Асинхронная репликация

Синхронный режим включает выбранное удалённое подтверждение в путь фиксации. Асинхронный подтверждает без него, поэтому наличие нужной истории на стороне переключения проверяют отдельно.

Долговечность транзакции

Долговечность описывает сохранность подтверждённого результата при заданном отказе. Синхронная репликация помогает её обеспечить лишь в пределах точки ожидания и размещения требуемых копий.

Перед спецификацией

Что проверить

  1. Выберите отказ, который должен пережить подтверждённый заказ.
  2. Проверьте synchronous_commit именно у транзакций приложения.
  3. Назовите удалённый этап: запись ОС, устойчивый сброс или применение.
  4. Зафиксируйте список реплик, число подтверждений и режим FIRST либо ANY.
  5. Проверьте независимость хранения и питания требуемых копий.
  6. Измерьте задержку подтверждения при обычной работе и деградации связи.
  7. Испытайте нехватку подтверждений и проверку исхода после отмены ожидания.
  8. Для чтения после записи выберите подтвердившую реплику и подходящий снимок.
Открытые основания

Первоисточники

  • Официальная документация

    PostgreSQL 18 Documentation: WAL Configuration

    PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить fsync, synchronous_commit=off/on/remote_write/remote_apply и условия ожидания синхронных реплик.

    Открыть первоисточник
  • Официальная документация

    PostgreSQL 18 Documentation: Replication

    PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Сверить synchronous_standby_names, FIRST/ANY и удержание WAL слотами.

    Открыть первоисточник
  • Официальная документация

    PostgreSQL 18 Documentation: Log-Shipping Standby Servers

    PostgreSQL Global Development Group · PostgreSQL 18, Chapter 26.2

    Фиксирует async default, synchronous commit wait points и связь replication delay с data loss.

    Открыть первоисточник
  • Официальная документация

    Security Guidelines for Storage Infrastructure

    National Institute of Standards and Technology · NIST SP 800-209, October 2020

    Разделяет backup, replication, immutability, continuous data protection и point-in-time copies; описывает synchronous и asynchronous replication.

    Открыть первоисточник
  • Официальная документация

    PostgreSQL 18 Documentation: Transaction Isolation

    PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.2

    Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие