16/07/2021
En el mundo de la administración de bases de datos PostgreSQL, contar con una estrategia de respaldo y recuperación robusta es fundamental. Barman (Backup and Recovery Manager) se ha consolidado como una de las herramientas de código abierto más fiables y completas para esta tarea. Ofrece diversas arquitecturas para adaptarse a distintas necesidades, pero una de las más eficientes y modernas es la estrategia de backup por streaming. Este método utiliza el protocolo de replicación nativo de PostgreSQL tanto para las copias de seguridad como para el archivado de los registros de transacciones (WAL), eliminando la necesidad de conexiones SSH y simplificando enormemente la configuración, especialmente en entornos contenerizados o en la nube.

A lo largo de este artículo, desglosaremos paso a paso cómo configurar un servidor de respaldo en Barman, al que llamaremos streaming-backup-server, utilizando exclusivamente el protocolo de streaming. Abordaremos la preparación del servidor PostgreSQL, la configuración detallada en Barman y los comandos esenciales para verificar que todo funcione a la perfección. Si buscas una forma directa y nativa de proteger tus bases de datos, esta guía es para ti.
¿Por Qué Elegir Backups por Streaming?
Tradicionalmente, Barman ha dependido de rsync sobre SSH para realizar las copias de seguridad. Si bien este método es potente y ofrece características como backups incrementales y compresión de red, la configuración de claves SSH y permisos puede añadir una capa de complejidad. La estrategia de streaming, en cambio, se apoya en herramientas nativas de PostgreSQL como pg_basebackup para los backups completos y pg_receivewal para la transferencia continua de ficheros WAL.
Las ventajas clave de este enfoque son:
- Simplicidad: No se requieren conexiones SSH entre el servidor de Barman y el servidor de PostgreSQL. Toda la comunicación se realiza a través de conexiones de replicación estándar de PostgreSQL.
- Integración Nativa: Utiliza las herramientas y protocolos diseñados por el propio equipo de PostgreSQL, garantizando una alta compatibilidad y fiabilidad.
- Ideal para Entornos Modernos: Es perfecto para configuraciones en Docker, Kubernetes o para respaldar servidores PostgreSQL que se ejecutan en sistemas operativos Windows, donde la configuración de SSH puede ser problemática.
- Seguridad Centralizada: La gestión de accesos se centraliza en el archivo
pg_hba.confde PostgreSQL, simplificando la auditoría y el control de permisos.
Paso 1: Preparando el Servidor PostgreSQL
Antes de tocar la configuración de Barman, debemos asegurarnos de que nuestro servidor de base de datos (al que llamaremos pghost) esté listo para aceptar las conexiones necesarias. Esto implica crear usuarios específicos y ajustar la configuración de red y de WAL.
Creación de Usuarios Dedicados
Necesitamos dos usuarios en PostgreSQL con diferentes roles:
- Usuario de Mantenimiento (
barman): Este usuario será utilizado por Barman para realizar tareas administrativas y de supervisión. Generalmente, se le otorgan privilegios de superusuario para simplificar la gestión. - Usuario de Streaming (
streaming_barman): Este usuario necesita específicamente privilegios de replicación para que las herramientaspg_basebackupypg_receivewalpuedan conectarse y transferir los datos.
Ejecuta los siguientes comandos en tu servidor PostgreSQL para crearlos. Se te pedirá que asignes una contraseña a cada uno.
createuser -s -P barman createuser -P --replication streaming_barmanEs crucial guardar estas contraseñas de forma segura. En el servidor de Barman, las añadiremos más tarde al archivo .pgpass para permitir conexiones sin contraseña.
Configuración de Acceso (pg_hba.conf)
Ahora, debemos permitir que estos nuevos usuarios se conecten desde el servidor de Barman (barmanhost). Edita el archivo pg_hba.conf en tu servidor PostgreSQL y añade las siguientes líneas, reemplazando barmanhost/32 con la IP o rango de red correcto:
# Permite el acceso al usuario de mantenimiento 'barman' host all barman barmanhost/32 md5 # Permite el acceso de replicación al usuario 'streaming_barman' host replication streaming_barman barmanhost/32 md5Para que estos cambios surtan efecto, recarga la configuración de PostgreSQL:
psql -c "SELECT pg_reload_conf();"Ajustes de Configuración (postgresql.conf)
Para que el archivado de WAL funcione correctamente, el parámetro wal_level debe estar configurado como mínimo en replica. Abre tu archivo postgresql.conf y asegúrate de que la línea esté así:
wal_level = replicaSi realizas algún cambio en este parámetro, deberás reiniciar completamente el servicio de PostgreSQL para que se aplique.
Paso 2: Configurando Barman para el Backup por Streaming
Con el servidor de base de datos listo, es hora de configurar Barman. Crearemos un archivo de configuración específico para nuestro servidor.

En el servidor de Barman (barmanhost), crea un nuevo archivo en /etc/barman.d/streaming-backup-server.conf con el siguiente contenido:
[streaming-backup-server] description = "Postgres server usando replicación por streaming" # Activa el archivado de WAL a través del protocolo de streaming streaming_archiver = on # Define el método de backup para usar pg_basebackup backup_method = postgres # Información de conexión para streaming (pg_basebackup y pg_receivewal) streaming_conninfo = host=pghost user=streaming_barman dbname=replication # Información de conexión para mantenimiento conninfo = host=pghost user=barman dbname=postgres # Configuración del slot de replicación para un archivado seguro de WAL slot_name = barman create_slot = autoDesglose de la Configuración
[streaming-backup-server]: Es el nombre que le damos a esta configuración de servidor en Barman.streaming_archiver = on: Le indica a Barman que debe usar pg_receivewal para capturar los ficheros WAL en tiempo real.backup_method = postgres: Especifica que el método de respaldo serápg_basebackup, que opera sobre una conexión de streaming.streaming_conninfo: La cadena de conexión que usarán los procesos de streaming. Nota importante: eldbnamedebe serreplicationpara este tipo de conexión.conninfo: La cadena de conexión estándar para tareas de mantenimiento.slot_name: El nombre del replication slot físico que se creará en el servidor PostgreSQL. Este slot asegura que el servidor primario no elimine los ficheros WAL hasta que Barman haya confirmado su recepción, evitando así la pérdida de datos.create_slot = auto: Instruye a Barman para que cree automáticamente el slot de replicación si no existe.
Paso 3: Verificación y Puesta en Marcha
Una vez guardada la configuración, debemos verificar que todo está correctamente configurado. Primero, asegúrate de haber añadido las contraseñas de los usuarios barman y streaming_barman al archivo ~/.pgpass del usuario barman en el servidor de Barman.
Comandos de Verificación
- Listar Servidores: Confirma que Barman reconoce tu nueva configuración.
barman list-serversDeberías ver
streaming-backup-serveren la salida. - Ejecutar la Verificación Inicial: El comando
checkes tu mejor amigo para diagnosticar problemas.barman check streaming-backup-serverEs muy probable que la primera vez que lo ejecutes, veas algunos fallos relacionados con el slot de replicación o
pg_receivewal. Esto es normal, ya que los procesos de fondo aún no se han iniciado. - Iniciar los Procesos de Mantenimiento: El comando
cronde Barman realiza tareas periódicas, incluyendo la creación de slots y el inicio de los procesos de archivado.barman cronEste comando iniciará el proceso
pg_receivewalen segundo plano y creará el slot de replicación en PostgreSQL. - Verificación Final: Ejecuta el comando de verificación de nuevo.
barman check streaming-backup-serverAhora, todos los checks deberían pasar con éxito. Es posible que el check de `WAL archive` falle si no ha habido actividad en la base de datos. Para forzarlo, puedes usar:
barman switch-wal --force --archive streaming-backup-serverEste comando fuerza un cambio de fichero WAL en PostgreSQL y espera a que sea archivado por Barman. Una vez completado, el `barman check` final debería mostrar todo en verde.
¡Felicidades! Tu servidor está ahora completamente configurado para realizar backups y archivar WALs utilizando una estrategia de streaming pura, moderna y eficiente.
Tabla Comparativa: Streaming vs. Rsync/SSH
| Característica | Backup por Streaming (pg_basebackup) | Backup Tradicional (rsync/SSH) |
|---|---|---|
| Método de Transferencia | Protocolo de replicación nativo de PostgreSQL | Copia de archivos a nivel de sistema operativo |
| Conexión Requerida | Conexión de base de datos (puerto PostgreSQL) | Conexión SSH |
| Simplicidad de Configuración | Alta (sin gestión de claves SSH) | Media (requiere intercambio de claves SSH) |
| Soporte Incremental | No disponible actualmente | Sí, mediante la opción reuse_backup |
| Compresión de Red | No disponible | Sí, soportada por rsync |
| Ideal para | Entornos en contenedores, Windows, y donde se prefiera simplicidad. | Bases de datos muy grandes que se benefician de backups incrementales. |
Preguntas Frecuentes (FAQ)
- ¿Es necesario SSH para este método de backup?
- No, y esa es una de sus principales ventajas. Toda la comunicación se realiza a través del protocolo de replicación nativo de PostgreSQL, eliminando la necesidad de configurar y mantener accesos SSH.
- ¿Qué es un "replication slot" y por qué es importante?
- Un slot de replicación es un mecanismo en PostgreSQL que garantiza que los ficheros WAL no sean eliminados o reciclados por el servidor primario hasta que el cliente de replicación (en este caso, Barman) haya confirmado su recepción. Esto previene la pérdida de datos y es crucial para la integridad de la cadena de WALs.
- ¿Cómo puedo verificar rápidamente que el usuario
streaming_barmantiene acceso? - Puedes ejecutar el siguiente comando desde el servidor de Barman para simular una conexión de replicación. Si tiene éxito y devuelve información del sistema, la conexión es correcta:
psql -U streaming_barman -h pghost -c "IDENTIFY_SYSTEM" replication=1 - ¿Qué hago si
barman checkfalla en el "WAL archive" al principio? - Este es un problema común en la configuración inicial. Primero, ejecuta
barman cronpara asegurarte de que los procesos de fondo se han iniciado. Luego, usabarman switch-wal --force --archive <server_name>para forzar la generación y archivado de un fichero WAL. Esto debería resolver el check. - ¿Puedo usar este método para bases de datos muy grandes?
- Absolutamente. Sin embargo, ten en cuenta que el método
backup_method = postgresno soporta backups incrementales. Si tu base de datos es de varios terabytes y los backups completos consumen demasiado tiempo o espacio, la estrategia tradicional con rsync y la opciónreuse_backup = linkpodría ser más adecuada.
Si quieres conocer otros artículos parecidos a Barman: Guía de Backup por Streaming para PostgreSQL puedes visitar la categoría Juegos.
