Оказалось, что мой скрипт не смог выполнить reload
postgresql из-за ошибки аутентификации. Так что все нижеследующее — этоложный вопросpostgresql. После того, как я исправил ошибку, postgresql позволил мне писать на основной сервер solo без всяких проблем. Спасибо Никите Киприянову за помощь, но вы можете пропустить слова ниже.
Моя цель — позволить главному серверу по-прежнему обрабатывать запросы на запись, пока резервный сервер находится в состоянии сбоя. Я заметил, synchronous_commit =
что можно вручную настроить off
и затем перезагрузить основной сервер.
Другие конфигурации включают repmgr.conf
в себя repmgr
:
use_replication_slots=yes
Поэтому резервный сервер создан repmgr
запросом к основному серверу, чтобы зарезервировать для него wal-logs, пока он находится в состоянии отказа. Все идет не совсем так, как ожидалось - я могу зафиксировать операцию записи на основном сервере, а резервный может клонировать ее с основного сервера, но с ошибкой - команда записи всегда застревает здесь:
postgres=# CREATE DATABASE ANYTHING;
Подсказка не появлялась снова, пока я не нажал Ctrl
+ D
, со следующими строками:
^CCancel request sent
WARNING: canceling wait for synchronous replication due to user request
DETAIL: The transaction has already committed locally, but might not have been replicated to the standby.
CREATE DATABASE
postgres=#
Таким образом, это всегда заканчивалось зависанием, когда я пытался записать данные на основной сервер, пока он synchronous_commit = off
. ( psql -c ...
это также приведет к зависанию оболочки). Это означает, что это временное изменение настроек репликации не достигает моей цели — предотвратить «забастовку» основного сервера, пока резервный сталкивается с проблемой!
Есть ли способ обойти это замораживание? Спасибо.