Перезапуск БД Master Postgres с использованием неизрасходованных файлов Wal - PullRequest
0 голосов
/ 28 апреля 2010

У нас есть ситуация, когда walmanager используется для отправки файлов wal между главной и подчиненной базами данных Postgres. Рабская машина вышла из строя и должна была быть восстановлена. Это привело к тому, что на главном компьютере скопилось много неиспользованных файлов wal.

Если для мастера Postgres выдается перезагрузка, и в течение 24 часов висят неиспользованные файлы wal, мастер будет работать вообще или он начнет очищаться?

1 Ответ

0 голосов
/ 28 апреля 2010

Итог

Если доставка WAL работает правильно, мастер начнет очистку.

Обоснование

Похоже на обычную WAL-доставку до 9.0. Вспомните примерно, как это работает. Мастер работает, пока WAL не достигнет определенного (настраиваемого) порога размера. Когда порог размера WAL достигнут, мастер начинает контрольную точку WAL. Как часть контрольной точки, мастер полностью синхронизирует все записи WAL вплоть до контрольной точки в постоянном хранилище. Другими словами, все до установленной контрольной точки WAL гарантированно будет на диске. После фиксации контрольной точки предыдущий WAL может быть безопасно отброшен.

Postgres не удаляет или перезаписывает файлы WAL после каждой контрольной точки. Но с горячим резервированием он сначала отправляет сегмент WAL с контрольной точкой, вызывая archive_command, с которым вы его настроили. Похоже, вы используете скрипт SkyTools в качестве archive_command. archive_command копирует сегмент WAL из личного хранилища ведущего устройства, $PGDATA/data/pg_xlog, в какое-либо нейтральное хранилище, где его впоследствии может использовать подчиненное устройство. Вы используете какой-то нейтральный каталог для хранения сегментов WAL, пока ведомый не использует их, верно? В любом случае, когда archive_command возвращает ноль мастеру, мастер предполагает, что сегмент WAL был успешно отправлен, и удаляет или повторно использует файл сегмента, оставленный в $PGDATA/data/pg_xlog. Мастер никогда не знает и не заботится о том, что произойдет после этого. Сегментная копия, сделанная archive_command, может быть использована подчиненным или нет; мастер не участвует.

Другими словами, управление мастера заканчивается при отправке сегмента WAL. Поэтому мастер не может вмешиваться в поставленные, но неизрасходованные сегменты WAL. Это включает в себя перезагрузку мастера.

Протест

НО : Если доставка WAL прервана, все ставки отменены. Убедитесь, что ваши archive_command работали правильно и , что неизрасходованные WAL находятся в нейтральном каталоге вне обеих установок Postgres. В предыдущем обсуждении также предполагается, что вы выполняете рекомендованную конфигурацию с теплым резервированием, например, подробности команды PG в руководстве.

Это также мое любимое время для проверки резервных копий. Дает мне тепло и размытость, чтобы увидеть, что я все еще могу восстановить, если случится что-то неожиданное ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...