pgbackrest/pgbackrest
(github.com/pgbackrest)- Herramienta de respaldo y recuperación para PostgreSQL, diseñada para escalar incluso a entornos grandes, pero actualmente está en estado de fin de mantenimiento
- Se detuvieron por completo los bug fixes, la revisión de PR, la atención de issues y el desarrollo de nuevas funciones; en vez de arrastrarlo de forma irregular, se optó por detenerlo con claridad
- Soporta respaldos full, differential e incremental, además de block-level backup, reanudación de trabajos interrumpidos y delta restore, para guardar y recuperar solo las partes modificadas
- Cuenta con una protocol layer que abarca entornos locales y remotos, además de multiple repositories, y amplía su alcance operativo mediante conexiones TLS y SSH y object stores compatibles con S3, Azure y GCS
- Era una herramienta con amplios mecanismos de garantía de integridad, como checksum, espera de WAL segment, fsync y verificación de page checksum, pero de ahora en adelante, incluso si aparece un fork, tendrá que construir su propia confianza por separado
Fin de mantenimiento y estado del proyecto
- pgBackRest es una herramienta de respaldo y recuperación para PostgreSQL, pero actualmente ya no recibe mantenimiento
- Se detuvo el trabajo del proyecto y se anunció que en adelante no se dedicará tiempo a bug fixes, revisión de PR, atención de issues ni desarrollo de nuevas funciones
- Incluso después de que terminaran los patrocinios y esquemas de empleo previos, se intentó continuar con el mantenimiento, pero no se consiguieron suficientes oportunidades laborales ni patrocinios para sostener el proyecto
- Se consideró mejor terminarlo de forma clara, en lugar de continuar con un mantenimiento irregular o incompleto
- En el futuro alguien podría hacer un fork, pero en ese caso se considerará un proyecto nuevo y el nuevo mantenedor tendrá que ganarse la confianza por su cuenta
Funciones clave del proyecto
- Apunta a respaldos y recuperación escalables hasta entornos PostgreSQL de gran escala, y la versión estable actual es v2.58.0
- Está diseñado para reducir el costo de compresión, que suele convertirse en cuello de botella durante los respaldos, mediante procesamiento en paralelo y métodos de compresión como lz4 y zstd
- Soporta respaldos full, differential e incremental, y no solo a nivel de archivo, sino también con block-level backup para copiar solo las partes modificadas y ahorrar espacio de almacenamiento
- Puede reanudar respaldos interrumpidos y vuelve a verificar la integridad de los archivos ya copiados comparándolos con los checksums del manifest
- En delta restore, primero elimina los archivos que no están en el respaldo y luego compara checksums de los archivos restantes, dejando intactos los que coinciden y restaurando solo los necesarios
Operación remota y diseño del repositorio
- Mediante su propia protocol layer, puede realizar tareas de respaldo, recuperación y archivado tanto en entornos locales como remotos, y usa TLS/SSH para conexiones remotas
- Esa misma protocol layer también ofrece una interfaz de consultas para PostgreSQL, lo que permite trabajar sin conectarse remotamente de forma directa a PostgreSQL y mejora la seguridad
- Soporta multiple repositories, por lo que se puede usar a la vez un repositorio local para recuperación rápida y uno remoto para retención a largo plazo y redundancia
- Los repositorios también pueden ubicarse en object stores compatibles con S3, Azure y GCS, lo que permite ampliar considerablemente la capacidad y el periodo de retención
- El repositorio en sí puede cifrarse, de modo que los datos de respaldo queden protegidos sin importar dónde se almacenen
Cómo garantiza integridad y consistencia
- Calcula checksum para todos los archivos del respaldo y los vuelve a revisar durante restore o verify
- Después de terminar la copia de archivos, espera a que lleguen al repositorio todos los WAL segment necesarios para dejar el respaldo en un estado consistente
- En todas las operaciones usa fsync a nivel de archivo y directorio para asegurar durabilidad
- Si page checksum está activado en PostgreSQL, en los respaldos full verifica los checksums de página de todos los archivos, y en los respaldos differential e incremental verifica solo los archivos modificados
- Aunque falle la verificación de page checksum, el respaldo no se detiene; en cambio, deja una advertencia sobre qué páginas fallaron para poder detectar temprano page-level corruption antes de que expire un respaldo válido
Procesamiento de WAL y optimización del rendimiento de recuperación
- Proporciona comandos dedicados para WAL push/get, y ambos soportan procesamiento en paralelo y ejecución asíncrona, diseñados para mantener el tiempo de respuesta de PostgreSQL lo más rápido posible
- WAL push elimina automáticamente duplicados si el mismo WAL segment entra varias veces, y si el contenido es distinto genera un error
- El WAL push asíncrono delega la transferencia a otro proceso que comprime WAL segment en paralelo, por lo que es especialmente importante en bases de datos con volúmenes de escritura muy altos
- El WAL get asíncrono mantiene localmente una cola de WAL descomprimido para poder suministrarlo de inmediato antes del replay, lo que resulta especialmente ventajoso en conexiones de alta latencia o repositorios como S3
- Tanto WAL push como get comparan la versión de PostgreSQL y el system identifier para verificar que la base de datos y el repositorio coincidan, reduciendo en gran medida la posibilidad de configurar mal la ubicación del WAL archive
Flexibilidad operativa y compatibilidad
- Las políticas de backup retention y archive expiration pueden configurarse por full, differential y WAL, lo que permite cubrir el rango de tiempo que se necesite
- Los respaldos pueden guardarse en el mismo formato del PostgreSQL cluster, y si se desactiva la compresión y se habilitan hard links, incluso se puede iniciar directamente un PostgreSQL cluster sobre un snapshot del repositorio
- Este enfoque es ventajoso en una terabyte-scale database donde la restauración tradicional tarda mucho tiempo
- Soporta completamente tablespace, y durante restore cada tablespace puede moverse a una ubicación diferente o remapearse en bloque a una sola ubicación
- También soporta enlaces de archivos y directorios, por lo que en restore se puede conservar la ubicación original, hacer remap parcial o total, o convertirlos y restaurarlos como archivos o directorios normales
- Soporta 10 versiones de PostgreSQL, incluidas las 5 versiones actualmente soportadas y las 5 más recientes ya EOL, de modo que haya tiempo suficiente para realizar actualizaciones
Recursos de referencia y estado del patrocinio
- User guides
- Command reference
- Configuration reference
- El patrocinador actual es Supabase
- Entre los patrocinadores anteriores estuvieron Crunchy Data y Resonate
1 comentarios
Comentarios de Hacker News
Aunque tuvo patrocinio empresarial, siguió metiéndole noches y fines de semana, y después de la venta de Crunchy Data intentó seguir manteniéndolo mientras buscaba un puesto para continuar con este trabajo, pero no le funcionó
Dice que necesita buscar oportunidades más amplias para ganarse la vida, y que eso significa que ya no podrá dedicar el tiempo necesario al mantenimiento, corrección de bugs, revisión de PRs y atención de issues, por lo que va a archivar el repositorio
La guía es https://github.com/freakynit/postgre-backup-and-restore-guide y de verdad agradezco todo el tiempo y esfuerzo que le dedicó
Además, mucha gente quemó dinero en tokens, así que en algunos casos también se redujeron tanto el tiempo como el dinero disponible
Si esto ya era una herramienta a nivel producto, más allá de un proyecto de hobby, y aportaba valor real en entornos comerciales, entonces claramente existe una oportunidad para que una empresa con fines de lucro cubra ese hueco
Pero los usuarios tienen que convertirse en clientes y pagar de verdad; no es sostenible seguir enviando reportes de bugs y quejas a un mantenedor gratuito
Hace falta una nueva solución para la sostenibilidad financiera del FOSS, porque las donaciones por sí solas no parecen suficientes
Da igual si es un negocio local o un proyecto open source
Aunque cada contribuidor podría tener derechos de autor sobre su parte, así que dependiendo de si existe un ACL y de la jurisdicción, habría que ordenar esos derechos y quizá acordar algo como reparto de ingresos
Con patrocinio corporativo esto funcionaba, pero en cuanto la empresa se vendió y el nuevo dueño cambió prioridades, una herramienta de infraestructura con 3.8k estrellas se volvió inestable de inmediato, y los usuarios ni siquiera sabían que el financiamiento de su herramienta de backups dependía de la estrategia de M&A de otra empresa
Por eso yo también me estoy moviendo poco a poco hacia archivos rastreados con SQLite y git
Porque incluso los stacks de Postgres administrado terminan apoyándose en varias herramientas mantenidas por personas cuya situación financiera no conocemos
Pero la idea general de que la estructura de financiamiento es frágil sigue siendo cierta
De paso, conviene revisar los proyectos de los que dependemos y que no queremos perder, y empezar a patrocinarlos desde ya
Todos dicen que les da tristeza, pero si de verdad les da tristeza, primero habría que preguntar si les da la suficiente tristeza como para donar
Sobre todo porque no solo se tomaba en serio el backup, sino también la recuperación y validación, y eso es raro; una vez sufrí bastante en el trabajo por haber descuidado justo esa parte
Los detalles están en https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/
Por eso esto se siente como una pérdida importante
Me pregunto cómo se compara con WAL-G o Barman
https://github.com/wal-g/wal-g
https://github.com/EnterpriseDB/barman
Todas las noches generamos una DB nightly restaurada con Barman y la usamos también para capacitación de usuarios y pruebas, verificando continuamente si los backups realmente están corruptos, y en años no hemos tenido problemas
Estuve inactivo unos años y luego volví al mundo del managed Postgres, y espero que además del delta backup que wal-g ofrece con su propia comparación de bloques, también soporte pg17 incremental backup
Y de verdad conviene usar el daemon mode
Es una pena que desaparezca una herramienta competidora, pero en esta área todavía hay mucho por mejorar, y cuando Postgres quiere correr en sistemas sin overcommit, C tiene ventajas sobre Golang
Cuando evaluamos opciones hace unos 9 años, este nos atrajo más que pgBackRest por sus características de PITR por streaming
Así que ahora me pregunto si la alternativa más cercana es wal-g, barman o databasus
Dije que solo estaba jugando a ser DBA, pero en realidad esta elección sí es bastante importante
Como referencia, soy DBRE
La documentación relacionada es https://docs.pgbarman.org/release/3.18.0/user_guide/hook_scripts.html#hook-scripts-using-barman-cloud-scripts-as-hooks-in-barman
https://github.com/aiven-open/pghoard también se ve bien, aunque todavía no lo he validado personalmente
Por eso da todavía más pena, y no parece fácil igualar la paridad de funcionalidades de esta gran herramienta
Ojalá sea una decisión reversible, y si no, también estaría bien que el proyecto PostgreSQL la absorbiera como contrib
Supongo que el autor preferiría que la gente siguiera usándolo mientras todavía funcione, en lugar de abandonarlo de inmediato
No sé si haría falta un fork o si alguien podría entrar como contribuidor al repositorio actual y hacerse cargo