Назад | Перейти на главную страницу

Postgresql archive_command на каскадном резервном сервере

Я обнаружил, что 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 как обычно, поэтому настройте все соответствующим образом.