giner.barman

Ejecutar pruebas

Rol de Ansible: Barman

Instala y configura Barman en Linux con opciones:

  • copia de seguridad regular (ejecutándose por cron)
  • carga de wals y instantáneas a S3 (ejecutándose por cron)
  • recolección de métricas (por telegraf)

Este rol está diseñado para ser lo menos opinativo posible, es decir, todos los parámetros de configuración se pasan directamente a las configuraciones de Barman.

Requisitos

  • Ubuntu

Instalación

Instalar a través de Ansible Galaxy:

ansible-galaxy collection install giner.barman

O incluir este rol en tu archivo requirements.yml:

roles:
  - name: giner.barman

Variables del Rol

Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml):

Estado solicitado de Barman. Sobrescribir con absent para desinstalar Barman. Los datos no se eliminarán.

barman_state: started

Estado solicitado del paquete de Barman. Sobrescribir con latest para actualizar Barman.

barman_package_state: present

Sobrescrituras de configuración global de Barman (clave/valor).

barman_config: {}

Servidores de PostgreSQL a respaldar.

barman_pg_servers: []    # Las claves son: nombre, parámetros, pgpass y cron. Ver un ejemplo a continuación.

Configurar telegraf para recopilar métricas de Barman.

barman_telegraf_enabled: false

Intervalo de recolección de métricas.

barman_telegraf_interval: 1m

Dependencias

Ninguna.

Ejemplo de Playbook

# Configurar usuarios y sus privilegios en el servidor de base de datos PostgreSQL
# http://docs.pgbarman.org/release/2.12/#postgresql-connection
- hosts: postgresqls
  vars:
    barman_user: barman
    barman_pass: BARMANPASS_CAMBIAME
    barman_streaming_user: streaming_barman
    barman_streaming_pass: STREAMINGPASS_CAMBIAME
  tasks:
  - name: Agregar usuario de PostgreSQL barman_user
    community.postgresql.postgresql_user:
      user: "{{ barman_user }}"
      password: "{{ barman_pass }}"
      role_attr_flags: replication
      groups: [pg_read_all_settings, pg_read_all_stats]
  - name: Agregar usuario de PostgreSQL barman_streaming_user
    community.postgresql.postgresql_user:
      user: "{{ barman_streaming_user }}"
      password: "{{ barman_streaming_pass }}"
      role_attr_flags: replication
  - name: CONCEDER PRIVILEGIOS DE EJECUCIÓN EN LA FUNCIÓN pg_XXX A barman_user
    community.postgresql.postgresql_privs:
      db: postgres
      privs: EXECUTE
      type: function
      obj: pg_start_backup(text:boolean:boolean),pg_stop_backup(),pg_stop_backup(boolean:boolean),pg_switch_wal(),pg_create_restore_point(text)
      schema: pg_catalog
      roles: "{{ barman_user }}"

# Configurar y habilitar Barman
- hosts: barmans
  vars:
    barman_name: mypgserver
    barman_pg_hosts: 10.10.10.10
    barman_pg_ports: 5432
    barman_user: barman
    barman_pass: BARMANPASS_CAMBIAME
    barman_streaming_user: streaming_barman
    barman_streaming_pass: STREAMINGPASS_CAMBIAME
    barman_pg_servers:
    - name: "{{ barman_name }}"
      params:
      - description: "Base de Datos PostgreSQL (Solo Streaming)"
      - conninfo: 'host={{ barman_pg_hosts }} port={{ barman_pg_ports }} user={{ barman_user }} dbname=postgres'
      - streaming_conninfo: 'host={{ barman_pg_hosts }} port={{ barman_pg_ports }} user={{ barman_streaming_user }}'
      - backup_method: "postgres"
      - streaming_archiver: "on"
      - slot_name: "barman"
      - create_slot: "auto"
      - retention_policy: "ventana de recuperación de 31 días"
      pgpass:
      - "*:*:postgres:{{ barman_user }}:{{ barman_pass }}"
      - "*:*:replication:{{ barman_streaming_user }}:{{ barman_streaming_pass }}"
      backup_schedule:
        cron:
          hour: 21
          minute: 5
        s3_sync:
          src: "{{ barman_config['barman_home'] | default('/var/lib/barman') }}/{{ barman_name }}"
          dst: "s3://db-backup"
          base_cron:
            hour: 22
            minute: 5
          wals_cron:
            minute: 10
        custom:
          job: "barman delete '{{ barman_name }}' oldest"
          cron:
            hour: 23
            minute: 15
  roles:
  - giner.barman

Desarrollo

Instala las dependencias de prueba:

python3 -m pip install ansible -Ur requirements-molecule.txt

Ejecuta todas las pruebas (requiere que Docker esté instalado):

molecule test --all

Licencia

Apache 2.0

Autores

Este rol fue creado en 2021 por Stanislav German-Evtushenko

Acerca del proyecto

Install and configure Barman on Linux with optional: metrics collection (telegraf), regular snapshots (cron) and uploading to S3 (cron)

Instalar
ansible-galaxy install giner.barman
Licencia
apache-2.0
Descargas
14.6k