Есть кластер PostgreSQL 15. ОС хоста Rocky 8. Конфигурация кластера: master + реплика. Репликацию настраивал через repmgr. В кластере настроены бекапы с помощью PgBackRest на внешнее S3 хранилище. WAL льется с мастера, файлы данных — с реплики. Все как здесь написано: https://habr.com/ru/articles/518232/.
Если грохнуть базу и восстановить последнее состояние с помощью sudo -u postgres pgbackrest --stanza=cluster restore
, то всё отрабатывает как положено.
Хочу протестировать кейс с Point in Time Recovery.
- Создаю базу данных.
- Наполняю её тестовыми данными.
- Делаю полный бекап
sudo -u postgres pgbackrest --stanza=cluster --log-level-console=info --type=full backup
. Запоминаю время окончания бекапа. - Дропаю таблицу. PostgreSQL делает чекпоинт и отправляет WAL в S3. Хочу восстановиться на момент, когда таблица не была удалена (т.е. WAL, который после бекапа из п.3 восстанавливать не надо).
- Останавливаю master и replica
systemctl stop postgresql-15
. - Удаляю все файлы с master и replica
sudo -u postgres find /var/lib/pgsql/15/data -mindepth 1 -delete
. - Смотрю в какое время завершился бекап с помощью
sudo -u postgres pgbackrest --stanza=cluster info
. - Запускаю команду вида
sudo -u postgres pgbackrest --stanza=cluster --type=time --target="время-завершения-бекапа" restore
. - Запускаю master.
- Вижу, что master находится в recovery, поэтому выполняю на
select pg_wal_replay_resume();
. - С помощью
repmgr standby clone
наливаю реплику. - Запускаю реплику и повторно регистрирую ее в master:
repmgr standby register -F
.
Вижу предупреждение вида
WARNING: following issues were detected
- WAL replay is paused on node "192.168.1.126" (ID: 2) with WAL replay pending; this node cannot be manually promoted until WAL replay is resumed
Вопросы:
- Что я делаю не так?
- Как поднять реплику после восстановления из бекапа?