Репликация

В кластерах Managed Service for PostgreSQL используется синхронная репликация: успешный ответ на запрос записи информации возвращается только тогда, когда данные записаны на диск и на хосте-мастере, и на приоритетной реплике. На остальных репликах кластера данные реплицируются асинхронно.

Из-за ограниченных ресурсов хосты классов b1.nano, b1.micro, b2.nano и b2.micro не реплицируются.

Подробнее о том, как организована репликация в PostgreSQL, читайте в документации СУБД.

Выбор мастера и синхронной реплики

Выбор хоста-мастера и синхронной реплики происходит согласно приоритету, который вы можете установить для конкретного хоста.

Вы также можете настроить каскадную репликацию, явно назначив источник репликации для каждого хоста. Хосты, для которых установлен источник репликации, не могут:

  • становиться синхронными репликами;
  • участвовать в выборе нового хоста-мастера;
  • автоматически переключаться на новый источник репликации.

Синхронность записи и консистентность чтения

По умолчанию синхронность реплики и мастера обеспечивается синхронностью записи WAL — журнала опережающей записи (выставлен параметр synchronous_commit = on). Но между моментом обновления WAL и моментом его применения на синхронной реплике проходит некоторое время, в течение которого синхронная реплика может отвечать устаревшими данными.

Если вы хотите гарантировать постоянную консистентность чтения данных между мастером и синхронной репликой, укажите в настройках кластера параметр synchronous_commit = remote_write. С этим значением параметра запись не считается успешной, пока синхронная реплика не готова читать обновленные данные. Недостаток этого решения — операции записи в кластер будут занимать больше времени.

Подробное описание параметра synchronous_commit смотрите в документации PostgreSQL.