Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 47
Добрый день,

Подскажите, пожалуйста, через какие промежутки времени (или еще какие-то факторы) утилита "pg_archivecleanup" приступает к чистке ненужных для восстановления wal-архивов на стороне Реплики?

На данный момент имею следующий recovery.conf на реплике (версия PostgreSQL = 11.6):

standby_mode = 'on'
primary_conninfo = 'user=replicator password=*** host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any'
restore_command = 'rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/data/pg_wal'
archive_cleanup_command = 'pg_archivecleanup /data/11/data/pg_wal %r 2>> /home/postgres/arch_cleanup.log'


Хочу просто понять, на основе каких факторов происходит решение, что пора подчищать. На данный момент на реплике несколько Гигабайт архивов, которые уже не нужны для синхронизации с Мастером. В документации и интернетах не нашел быстро ответ (плохо искал?).
4 фев 21, 12:14    [22274595]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
Dr. Oracle,

после окончания checkpoint (restartpoint)
https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/access/transam/xlog.c#L9457
4 фев 21, 15:08    [22274776]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 47
Спасибо, но либо я Вас не правильно понял, либо Вы меня.

Мне нужно, чтобы на Реплике подчищались архивы, за счет команды из recovery.conf выше, потому что они уже не нужны постгресу для восстановления. Но этого не происходит.

На Мастере у меня уже выполнелось куча чекпоинтов, которые давно приехали на Реплику, но архивы еще лежат не тронутыми.
4 фев 21, 16:23    [22274891]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
Мда, невнимательно посмотрел в содержимое ваших команд.

Прочитайте описание restore_command и посмотрите, что вместо этого делаете вы. Затем исправьте его. Старые wal в pg_wal база уже удалила. Вы их обратно записали. База о них заботиться не будет.

А pg_archivecleanup предназначен чистить непосредственно архив wal. А не локальный pg_wal.
4 фев 21, 17:03    [22274927]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 47
Melkij,

Переделал следующим образом на Реплике:
standby_mode = 'on'
primary_conninfo = 'user=***password=***host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any'
restore_command = 'rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/wal_arch'
archive_cleanup_command = 'pg_archivecleanup /data/11/wal_arch %r 2>> /home/postgres/arch_cleanup.log'


Но все равно "pg_archivecleanup" ничего не чистит на на Реплике, в директории " /data/11/wal_arch" по прежнему много wal-архивов, но по сути они уже не нужны ...
4 фев 21, 19:06    [22275040]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
mefman
Member

Откуда:
Сообщений: 3305
Dr. Oracle
Melkij,

Переделал следующим образом на Реплике:
standby_mode = 'on'
primary_conninfo = 'user=***password=***host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any'
restore_command = 'rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/wal_arch'
archive_cleanup_command = 'pg_archivecleanup /data/11/wal_arch %r 2>> /home/postgres/arch_cleanup.log'


Но все равно "pg_archivecleanup" ничего не чистит на на Реплике, в директории " /data/11/wal_arch" по прежнему много wal-архивов, но по сути они уже не нужны ...

дока
При отдельном использовании этой программы из каталога расположение_архива будут удалены все файлы WAL, логически предшествующие файлу старейший_сохраняемый_файл. В этом режиме, если вы укажете имя файла с расширением .partial или .backup, старейший_сохраняемый_файл будет определяться по имени без расширения. Благодаря такой интерпретации расширения .backup будут корректно удалены все файлы WAL, заархивированные до определённой базовой копии.

Файлы вида .partial или .backup в директории есть?
4 фев 21, 19:22    [22275052]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Guzya
Member

Откуда:
Сообщений: 700
Ваша команда

rsync -az --delete postgres@srv-tst-node1.test.com:/data/11/wal_arch/ /data/11/wal_arch


тянет ВСЕ, а должна конкретный файл, который в данный момент нужен postgres-у.
Почитайте про параметры %p и %f для restore_command
5 фев 21, 11:03    [22275362]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 47
Guzya,

Да-да-да. Я это только сегодня утром понял - поправил. Все в порядке, всем спасибо.
5 фев 21, 12:16    [22275429]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 47
Итого так выглядит конечный вариант recovery.conf

standby_mode = 'on'
primary_conninfo = 'user=replicator password=*** host=*** port=5432 sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any'
restore_command = 'scp postgres@srv-tst-node1.test.com:/data/11/wal_arch/%f /data/11/data/pg_wal/'


Команду для "archive_cleanup_command" убрал вовсе, поскольку получается, что у меня архив лежит на Мастере, откуда мы тянем нужные wal'ы (в случае когда реплика например не работала некоторое время и Мастер удалил нужные для восстановления wal'лы из $PGDATA/pg_wal) напрямую в каталог с wal'ами на Реплике и на ней у меня ничего не архивируется, поэтому в "archive_cleanup_command" нет смысла. А Постгрес я так понимаю сам на стороне Релики позаботится о том, когда удалить/переиспользовать wal'ы из $PGDATA/pg_wal.

Я правильно все понял?
5 фев 21, 12:25    [22275441]     Ответить | Цитировать Сообщить модератору
 Re: Когда pg_archivecleanup начинает чистить на Реплике?  [new]
Guzya
Member

Откуда:
Сообщений: 700
Вместо
/data/11/data/pg_wal/


можно просто %p указать
5 фев 21, 12:41    [22275474]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить