(раскомментировал synchronous_standby_names ), и выставил
synchronous_standby_names = 'main'
, где main - имя кластера на стендбае. Сделал pg_con_reload() на мастере, и на стендбае.
Проблема - при создании тестовых объектов на мастере, и/или заполнении их тестовыми данными, выражение как будто не может отработать. Висит себе в бесконечном ожидании чего-то. При нажатии Ctrl+C кидает предупреждение:
отмена ожидания синхронной репликации по запросу пользователя
DETAIL: Транзакция уже была зафиксирована локально, но возможно не была реплицирована на резервный сервер
По характеру репликации, я понимаю что он не завершает выполнение команды на мастере, пока не убедится что команда на стендбае прошла. Вот только не пойму, почему стендбай не посылает ответ, что изменения закоммитились. Подскажите, пожалуйста, что нужно докрутить?
Настройки, касающиеся репликации.
Мастер:
archive_command pgbackrest --stanza=crm-banners archive-push %p
archive_mode on
cluster_name 12/main
listen_addresses *
synchronous_commit on
wal_keep_segments 16
wal_level hot_standby
synchronous_standby_names = 'main'
Стендбай:
archive_command pgbackrest --stanza=crm-banners archive-push %p
archive_mode on
cluster_name 12/main
listen_addresses *
max_wal_senders 10
primary_conninfo user=replica passfile='/var/lib/postgresql/.pgpass' host='мой хост' port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any
primary_slot_name replication_slot
synchronous_commit on
wal_keep_segments 16
wal_level hot_standby
Судя по конфигурации имя стендбая не main
вам нужно указывать не имя кластера, а конкретную реплику см. документацию. The name of a standby server for this purpose is the application_name setting of the standby, as set in the standby's connection information.
спасибо!
Обсуждают сегодня