Я обнаружил, что archive_command запускается только postgresql на мастере.
Если я запускаю каскадную репликацию, например:
Master -> Slave1 -> Slave2 и хотите заархивировать сегменты WAL на Slave1, команда никогда не запускается.
Это верно?
Если да, что, если я просто скопирую (rsync или аналогичный) сегменты WAL из каталога pg_xlog в свой архивный каталог? Могу ли я затем использовать этот архивный каталог в качестве источника для команды restore_command на новом ведомом устройстве?
Если да, что, если я просто скопирую (rsync или аналогичный) сегменты WAL из каталога pg_xlog в свой архивный каталог? Могу ли я затем использовать этот архивный каталог в качестве источника для команды restore_command на новом ведомом устройстве?
Да, ты можешь. Однако вы несете ответственность за то, чтобы при этом не сбрасывать файлы журнала.
Для достижения наилучших результатов вы, вероятно, захотите сделать каскадное копирование / rsync / что угодно как часть вашего restore_command
на Slave1.
Обратите внимание: если вы используете Postgres 9.5 или 9.6, вы можете это сделать.
В режиме ожидания нужно установить archive_mode = always
. Когда Постгрес видит archive_mode = on
он будет архивировать только WAL как мастер, но always
сообщает ему архивировать WAL даже в режиме ожидания. Последний раздел эти документы описывает это поведение.
Конечно, резервному серверу нужна другая подходящая конфигурация, например:
archive_mode = always
hot_standby = on
wal_level = replica
max_wal_senders = 3
archive_command = whatever-you-like
archive_timeout = 300
Обычно, если вы говорите резервному always
архивируйте WAL, тогда он будет подчиняться archive_command
как обычно, поэтому настройте все соответствующим образом.