How to check the access of streaming_barman user?

Barman: Guía de Backup por Streaming para PostgreSQL

16/07/2021

Valoración: 4.74 (4883 votos)

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.

Does barman support Wal streaming?
Barman 2.0 introduces support for replication slots with PostgreSQL servers 9.4 or above, therefore allowing WAL streaming-only configurations. Moreover, you can now add Barman as a synchronous WAL receiver in your PostgreSQL 9.5 (or higher) cluster, and achieve zero data loss (RPO=0).

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.

Índice de Contenido

¿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.conf de 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:

  1. 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.
  2. Usuario de Streaming (streaming_barman): Este usuario necesita específicamente privilegios de replicación para que las herramientas pg_basebackup y pg_receivewal puedan 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_barman

Es 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 md5

Para 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 = replica

Si 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.

What is Streaming-backup-server in barman?
Where: [streaming-backup-server] is a name of your choice for your backup server on Barman. description is a description text for your backup server. streaming_archiver = on tells Barman that WAL files of this backup server are transferred from Postgres to Barman using streaming replication.

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 = auto

Desglose 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: el dbname debe ser replication para 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

  1. Listar Servidores: Confirma que Barman reconoce tu nueva configuración.barman list-servers

    Deberías ver streaming-backup-server en la salida.

  2. Ejecutar la Verificación Inicial: El comando check es tu mejor amigo para diagnosticar problemas.barman check streaming-backup-server

    Es 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.

  3. Iniciar los Procesos de Mantenimiento: El comando cron de Barman realiza tareas periódicas, incluyendo la creación de slots y el inicio de los procesos de archivado.barman cron

    Este comando iniciará el proceso pg_receivewal en segundo plano y creará el slot de replicación en PostgreSQL.

  4. Verificación Final: Ejecuta el comando de verificación de nuevo.barman check streaming-backup-server

    Ahora, 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-server

    Este 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ísticaBackup por Streaming (pg_basebackup)Backup Tradicional (rsync/SSH)
Método de TransferenciaProtocolo de replicación nativo de PostgreSQLCopia de archivos a nivel de sistema operativo
Conexión RequeridaConexión de base de datos (puerto PostgreSQL)Conexión SSH
Simplicidad de ConfiguraciónAlta (sin gestión de claves SSH)Media (requiere intercambio de claves SSH)
Soporte IncrementalNo disponible actualmenteSí, mediante la opción reuse_backup
Compresión de RedNo disponibleSí, soportada por rsync
Ideal paraEntornos 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_barman tiene 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 check falla en el "WAL archive" al principio?
Este es un problema común en la configuración inicial. Primero, ejecuta barman cron para asegurarte de que los procesos de fondo se han iniciado. Luego, usa barman 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 = postgres no 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ón reuse_backup = link podrí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.

Subir