Перейти к основному содержимому

pg_standby. Создание сервера «теплого» резерва

В исходном дистрибутиве установлено по умолчанию: да.

Связанные компоненты: отсутствуют.

Схема размещения: не используется.

Программа pg_standby поддерживает создание сервера и предназначена для:

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

pg_standby ожидает выполнения команды restore_command, которая нужна для перехода от стандартного восстановления архива к режиму так называемого «теплого» резерва.

Его настройка описана в разделе 27.2.4 документации оригинальной PostgreSQL.

Синтаксис:

pg_standby [параметр...] расположение_архива следующий_файл_wal каталог_wal [файл_перезапуска_wal]

Если указывается файл_перезапуска_wal, тогда все файлы журнала предзаписи (WAL), предшествующие указанному, будут удалены из каталога расположение_архива. Аргумент обычно указывается с помощью макроса %r.

Удаление предыдущих журналов позволяет сократить число сохраняемых файлов без потери возможности восстановления при перезапуске. Такой вариант использования уместен, когда расположение_архива указывает на область рабочих файлов конкретного резервного сервера, но не когда расположение_архива — это каталог с архивом WAL для долговременного хранения.

Логика работы приложения pg_standby предполагает, что каталог, заданный аргументом расположение_архива, доступен для чтения владельцу серверного процесса.

Кроме того, если указывается аргумент файл_перезапуска_wal (или ключ -k), то каталог расположение_архива должен быть доступен для записи.

При выходе из строя ведущего сервера переключение на сервер «теплого резерва» возможно двумя способами:

  1. Умное переключение (Smart Failover).

    При умном переключении сервер включается в работу, применив изменения из всех файлов WAL, имеющихся в архиве. В результате умного переключения данные не теряются, даже если данный резервный сервер отстал. Если применить нужно большое количество изменений WAL, подготовка к работе может быть длительной. Чтобы вызвать умное переключение, нужно создать файл-триггер, содержащий слово smart, либо просто пустой файл.

  2. Быстрое переключение (Fast Failover).

    При быстром переключении сервер включается в работу немедленно. Все не примененные файлы WAL в архиве будут игнорироваться, и все транзакции в этих файлах будут потеряны. Чтобы вызвать быстрое переключение, создайте файл-триггер и запишите в него слово fast. Программу pg_standby можно настроить так, чтобы быстрое переключение происходило автоматически, если за определенное время не появляется новый файл журнала WAL.

Параметры

Расширение pg_standby принимает следующие аргументы командной строки:

АргументОписание
-cПрименяет для восстановления файлов WAL из архива команду cp или copy; параметр бесполезен, поскольку в данный момент поддерживается только это поведение
-dВыводит подробные отладочные сообщения в stderr
-kЗадает количество файлов WAL, предшествующих текущему журналу; параметр оставляет не больше заданного числа файлов WAL в каталоге расположение_архива, предшествующие – удалить.
0, «ноль» (значение по умолчанию) означает, что не нужно удалять никакие файлы из каталога расположение_архива;
данный параметр будет игнорироваться, если указан файл_перезапуска_wal – такой способ более точно определяет правильную точку отсечения архива.
Слишком низкое значение параметра может привести к удалению файлов, которые могут потребоваться для перезапуска резервного сервера.
Слишком высокое значение параметра может быть причиной неэффективного использования дискового пространства архива
-r макс_повторовУстанавливает максимальное количество повторов команды copy в случае ошибки. После каждой ошибки программа приостанавливается на время_задержки * число_повторов; время ожидания постепенно увеличивается.
По умолчанию программа ожидает 5, 10, 15 секунд, а затем сообщает резервному серверу об ошибке – это событие будет воспринято как завершение восстановления, и в результате резервный сервер полностью включится в работу.
Значение по умолчанию: 3
-s время_задержкиЗадает количество секунд для выдержки паузы между проверками наличия файла WAL в архиве.
Допустимые значения: до 60.
Значение по умолчанию: 5
подробности в документации оригинального PostgreSQL: Раздел 26.2
-t файл_триггерУказывает файл-триггер, при появлении которого должна начаться отработка отказа. Имя этого файла рекомендуется выбирать по определенной схеме, позволяющей однозначно понять, для какого сервера вызывается отработка отказа, когда таких серверов в одной системе несколько. Например, /tmp/pgsql.trigger.5432
приложение поддерживает параметр recovery_end_command, в котором можно задать команду для удаления файла-триггера во избежание ошибок
-V
--version
Выводит версию pg_standby и завершает работу
-w макс_время_ожиданияЗадает максимальное время ожидания (в секундах) следующего файла WAL, по истечении которого будет произведено быстрое переключение.
0, «ноль» (значение по умолчанию) означает бесконечное ожидание.
Подробности в документации оригинального PostgreSQL: Раздел 26.2
-?
--help
Выводит справку об аргументах командной строки pg_standby и завершает работу

Доработка

Доработка не проводилась.

Ограничения

Программа pg_standby предназначена для работы с ядром СУБД PostgreSQL версии 8.2 или новее.

Установка

Установка не требуется.

Исполняемый файл pg_standby расположен в каталоге $PGHOME/bin/.

Настройка

Чтобы настроить резервный сервер на использование pg_standby, поместите в файл конфигурации резервного сервера $PGDATA/postgresql.conf строку:

restore_command = 'pg_standby каталог_архива %f %p %r'

где каталог_архива — каталог, из которого должны восстанавливаться сегменты журнала предзаписи (WAL).

Использование модуля

В операционных системах семейства Unix можно использовать команды:

archive_command = 'cp %p .../archive/%f'
restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5442 .../archive %f %p %r 2>>standby.log'
recovery_end_command = 'rm -f /tmp/pgsql.trigger.5442'

Предполагается, что каталог архива физически располагается на резервном сервере. Команда archive_command обращается к резервному серверу посредством сетевого доступа. По отношению к самому резервному серверу эти файлы будут являться локальными, для чего применяется создание ссылок (ln).

Приведенные выше команды будут выполнять действия:

  • выводить отладочную информацию в standby.log;
  • ждать 2 секунды между проверками появления следующего файла WAL;
  • прекращать ожидание, только когда появляется файл-триггер с именем /tmp/pgsql.trigger.5442, и выполнять переключение согласно его содержимому;
  • удалять файл-триггер после завершения восстановления;
  • удалять лишние файлы из каталога архива.

Ссылки на документацию разработчика

Дополнительно поставляемый модуль pg_standby: https://www.postgresql.org/docs/15/pgstandby.html.