Backups Online sin archivos en PGBackRest
Reduciendo costos de almacenamiento evitando el almacenamiento de archivos
Series: Postgres
Aunque no está documentado en la documentación oficial, es posible evitar almacenar archivos en configuraciones de PGBackRest. En ciertos escenarios, puedes querer ignorar el almacenamiento de archivos para reducir costos, especialmente si estás usando almacenamiento en la nube para tus backups.
Esas situaciones podrían ser:
- Entornos de pruebas, ya sea que ejecutes pruebas intensivas pero no necesitas o te importa PITR (Point in Time Recovery).
- Bases de datos Postgres altamente actualizadas, donde puedes recuperar cambios por otros medios, como scraping o restaurando desde fuentes externas.
- No almacenar archivos puede llevarte a
pérdida de datossi no tienes una estrategia adecuada para manejar los deltas. - Todavía necesitas almacenar archivos durante la ejecución del backup si quieres backups online. De lo contrario, no serán recuperables.
- Si no quieres almacenar archivos en absoluto, necesitas ejecutar el backup
offline. Es decir, deteniendo tu instancia y ejecutandopgbackrest backup.
Configuration
Configuración en tu postgresql.conf:
archive_mode=on
archive_command='test -f /tmp/pgbackrest/<STANZA>-backup.lock || exit 0 && pgbackrest --stanza=<STANZA> archive-push %p'
En tu comando pgbackrest, necesitas agregar la opción --archive-check=n:
OPTION="full" # or "incr"
pgbackrest --stanza=<STANZA> --type="${OPTION}" backup \
--archive-check=n \
--archive-timeout=1d --log-level-console=info \
--buffer-size '16MiB' \
--no-resume # optional
How this works?
La opción --archive-check=n evita la verificación previa del estado del archivo. Esto hace que el comando no falle si los archivos no se están almacenando.
El archive_command mostrado arriba, solo almacenará archivos si el backup está ejecutándose, verificando si existe el archivo de bloqueo de pgbackrest.
Ups, I wan’t archives now
Si quieres volver a habilitar los archivos, necesitas ejecutar un backup completo después de cambiar tu archive_command, de lo contrario, esos archivos almacenados serían inútiles para PITR.
References
Aquí, puedes explorar los hilos originales sobre este tema: