Skip to content

Всё о GUC по порядку: archive_cleanup_command

Автор: Christophe Pettus, All your GUCs in a Row: archive_cleanup_command


Алфавитный порядок выдал нам первую «жертву». archive_cleanup_command — это параметр резервного сервера (standby-server knob), который существует исключительно для того, чтобы прибираться после archive_command. Однако алфавит настаивает на том, чтобы отложить рассмотрение archive_command до следующей статьи. Поэтому мы опишем, как прибирать вечеринку, которую ещё не устраивали.



Кратчайшая предыстория: Первичный сервер PostgreSQL (primary) может архивировать свои сегменты WAL в некоторое место — каталог, корзину S3, общий ресурс NFS — выполняя команду оболочки для каждого заполненного сегмента. Резервные серверы (standbys) читают из этого места, чтобы догонять изменения, а инструменты резервного копирования читают из него для обеспечения восстановления на момент времени (point-in-time recovery, PITR). Файлы накапливаются. Кто-то должен их удалять.

archive_cleanup_command — это один из вариантов для этого «кого-то». Он выполняется на резервном сервере в каждой точке перезапуска (restartpoint, примерно эквивалент контрольной точки на первичном сервере) и удаляет сегменты WAL, которые резервному серверу больше не нужны для восстановления. GUC принимает команду оболочки, обычно вызывающую pg_archivecleanup:



archive_cleanup_command = 'pg_archivecleanup /mnt/archive %r'


Заполнитель %r раскрывается в имя самого старого файла WAL, который всё ещё нужен резервному серверу; pg_archivecleanup удаляет всё, что строго старше. Контекст параметра — sighup, значение по умолчанию — пустая строка.



Две вещи, которые стоит знать



Этот параметр опасен именно в той конфигурации, которая чаще всего встречается. Инструмент безопасен, только если архив, согласно документации, является «временной промежуточной областью для этого конкретного резервного сервера». Если ваш архив служит также источником для восстановления на момент времени (PITR) с помощью инструментов резервного копирования или если несколько резервных серверов читают из него, то запуск archive_cleanup_command на одном резервном сервере благополучно удалит файлы, которые всё ещё нужны другим. Вы узнаете об этом во время восстановления, а это самое неподходящее время.



Если вы используете настоящий инструмент резервного копирования, вам этот параметр не нужен вообще. pgBackRest, Barman и WAL-G самостоятельно управляют удержанием архивов на основе политик резервного копирования и состояния реплик, и они делают это корректно для нескольких потребителей. Установка archive_cleanup_command поверх этого в лучшем случае избыточна, а в худшем — активна вредна (способ удалить файлы, которые ваш инструмент резервного копирования планировал сохранить).



Историческое примечание: Этот параметр существовал в файле recovery.conf до версии PostgreSQL 12, когда этот файл был объединён с postgresql.conf. Если вы читаете древнюю операционную документацию, он будет спрятан именно там.



Рекомендация: Оставьте этот параметр пустым. Используйте инструмент резервного копирования, который управляет удержанием архива, и позвольте ему делать свою работу. Единственный случай, когда имеет смысл установить archive_cleanup_command, — это игрушечная настройка высокой доступности (HA) с одним резервным сервером и без значимых резервных копий. То есть не в производственной среде.






(Это #5 в серии о каждом GUC PostgreSQL по состоянию на версию 18, в алфавитном порядке.)


Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

No comments

The author does not allow comments to this entry

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Submitted comments will be subject to moderation before being displayed.