Agregar un host al servidor de respaldos

Un poco de contexto. Actualmente contamos con un servidor BackupPC en producción hosteado en el contenedor Che del nodo Redota, accesible aquí dentro de la RAU. El aprovisionamiento de dicho servidor se encuentra automatizado en config haciendo uso del role backuppc_server.

Para agregar un nuevo host a los respaldos programados de Che (y/o de otros eventualmente), hacemos uso del role backuppc_client (Este procedimiento fue redactado para la versión 1.0.0 del role).

Por tanto, el primer paso para respaldar el nuevo host es agregarlo al grupo seciu_backup del archivo de inventario (hosts_stage o hosts_prod segun corresponda):

seciu_backup:
  hosts:
    ---.interior.edu.uy:
    +++.interior.edu.uy:
    nuevo-host.interior.edu.uy:

Paso siguiente, setear en `hosts_vars` las variables y scripts necesarios para realizar el respaldo deseado:

host_vars/
    nuevo-host.interior.edu.uy/
        files/
            backuppc/
                pre_dump.sh
                post_dump.sh
        vars/
            10_XXXXXXXX.yml
            20_YYYYYYYY.yml
            30_backuppc.yml

Puede que no necesitemos de toda esta estructura, debemos contemplar tres casos principales y posibles combinaciones entre ellos:
  • respaldo de archivos y directorios concretos
  • dump y respaldo de base de datos MySQL/MariaDB
  • dump y respaldo de base de datos PostgreSQL

Ubicamos en el archivo 30_backuppc.yml, al menos las siguientes variables elementales (puedes ver mas opciones en las defaults vars del role):

backup_state: present

include_files:
  - /etc
  - /var/lib
  - /home
  - /root

backuppc_scripts: true
backuppc_scripts_sudo: true
backuppc_local_fetch_dir: /var/lib/backuppc

backuppc_db_server_type: mysql   # pgsql - mysql - null (opción por defecto)

  • backup_state: con present se configura el cliente en el servidor, con absent se quita.
  • include_files: listado de archivos y/o directorios que desean copiarse en el respaldo.
  • backuppc_scripts: true o false. Si como parte del proceso necesitamos realizar una acción previa o posterior al respaldo BackupPC, podremos desarrollar scripts Bash que la implementen. Con esta variable en true indicamos si los scripts files/backuppc/pre_dump.sh y files/backuppc/post_dump.sh deben ser copiados al nuevo host y ejecutados durante el respaldo. Notar que si se escoge 'false', no es necesario crear los archivos .sh en las host_vars del nuevo servidor.
  • backuppc_scripts_sudo: true o false. Si en los script se realizan acciones que necesitan de privilegios de superusuario, deberemos establecer esta variable en true.
  • backuppc_local_fetch_dir: directorio usado en el cliente para confeccionar el respaldo.
  • backuppc_db_server_type: null si no se desea realizar dump de una base de datos, mysql para dump de bases de datos MySQL/MariaDB o pgsql para bases de datos PostgreSQL.
    • Si se indicó pgsql en la variable anterior, es necesario también agregar las siguientes variables:
        backuppc_db_to_dump_name: 'nombre de la base de datos a respaldar'
        backuppc_db_dump_user: 'nombre del usuario de la base de datos'
        backuppc_db_dump_user_pass: 'nombre del usuario de la base de datos'
        
    • Si se indicó mysql, el role configurará el acceso con privilegios suficientes pero no el dump. Por tanto, se debe agregar el mismo en el script pre_dump.sh. Por ejemplo de la siguiente manera (los archivos .sql resultantes se almacenan en la ubicación indicada en backuppc_local_fetch_dir):
        #!/bin/bash
        for DataB in `mysql -e "show databases" | grep -v Database`; do mysqldump --single-transaction $DataB > "$DataB.sql"; done
        tar -czvf dump.sql.tar.gz *.sql
        rm *.sql
        

Una vez establecida toda la estructura de variables y scripts correspondientes para el caso, solo resta ejecutar los playbooks en el nuevo host con el tag correspondiente:

ansible-playbook --limit <fqdn-nuevo-host> --tags backuppc_client site.yml

Ver también:

https://proyectos.interior.edu.uy/projects/respaldos/wiki/Procedimiento_para_agregar_un_servidor_a_los_respaldos