udelarinterior.backuppc_client
Rol de Ansible para BackupPC-Client
Este rol, backuppc_client, instala y configura ambos lados para los hosts clientes de un servidor BackupPC. Funciona con un rol de backuppc_server que configura el servidor (sin embargo, mientras la configuración sea estándar y Ansible tenga acceso, puede manejar cualquier instalación de servidor BackupPC).
Funciona en Debian Buster (10) y Stretch (9) para configuraciones avanzadas (respaldo de bases de datos), pero para la configuración básica de dumps de backupPC, puede manejar Ubuntu o cualquier otro sistema basado en Debian (se aceptan PR).
Este rol y su par backuppc_server se basan en el rol de hanxhx/backuppc.
Descripción
Este rol configura los backups de los hosts en un servidor BackupPC. Puede realizar las siguientes acciones:
- Configurar un usuario de linux en el cliente y una configuración de respaldo en el servidor BackupPC, que accede al cliente con este usuario.
- Opcionalmente, subir al cliente scripts de pre_dump y post_dump con eventuales derechos de sudo, que se ejecutan respectivamente antes y después de que BackupPC haga los dumps de archivos. Estos scripts ejecutan comandos necesarios para tener backups coherentes, como dumps de bases de datos, snapshots, etc.
- Opcionalmente, configurar un usuario de mysql con derechos de SELECT en todas las bases para realizar un dump antes del backup.
- Opcionalmente, configurar un script que realizará el dump de una base de datos postgresql identificada.
Requisitos
Necesitarás tener un servidor BackupPC en funcionamiento gestionado en tu inventario de Ansible, cuyo nombre se definirá en la variable backuppc_server_name
.
En este momento, este rol solo gestiona backups a través del método rsync (+ ssh).
Compatibilidad hacia atrás
Para asegurar una adopción suave y progresiva de esta versión del rol en todos los hosts que la utilizan en un entorno en la nube, el rol es compatible hacia atrás con la API de variables del rol v1.X.0, incluyendo sus valores predeterminados. Consulta los archivos defaults/main.yml y tasks/compatibility.yml, especialmente los comentarios, para tener en cuenta las variables heredadas.
La compatibilidad hacia atrás del rol se eliminará en la próxima versión mayor, ¡así que adapta las variables de tus hosts lo antes posible!
Variables del Rol
Cada configuración de cliente anula la configuración global en el servidor. Consulta defaults/main.yml para los valores o definiciones predeterminadas de las variables. A continuación se enumeran las variables que se pueden definir.
Acceso del cliente
backuppc_client_user
: usuario unix para que el servidor se conecte al cliente (predeterminadobackuppc
)backuppc_client_group
: grupo unix del usuario unix definido en la línea anterior (predeterminadobackuppc
)backuppc_client_home
: directorio home del usuariobackuppc_client_user
que realiza backups en el cliente
Configuración del servidor
backuppc_server_name
: nombre de dominio del servidor BackupPC que realiza el backup y desde donde se obtiene la clave ssh para configurarla en el clientebackuppc_server_user
: usuario unix que ejecuta BackupPC en el servidor. Predeterminado abackuppc
.backuppc_server_group
: grupo unix que ejecuta BackupPC en el servidor. Predeterminado awww-data
.backuppc_server_home
: directorio home del usuario unix de BackupPC en el servidor. Predeterminado a/var/lib/backuppc
.backuppc_server_config_dir
: directorio de archivos de configuración del paquete BackupPC. Predeterminado a/etc/backuppc
.
Configuración del backup del cliente en el servidor
A continuación se describen brevemente las variables del rol que definen la configuración de BackupPC del cliente en el servidor. Para una documentación completa, consulta la documentación de BackupPC.
Las siguientes banderas definen si el cliente y el servidor son configurados por el rol:
backuppc_backup_state
: ausente o presente (predeterminado: presente). Si está presente, configura los backups del cliente en el servidor; de lo contrario, elimina la configuración.backuppc_client
: si se establece enfalse
(valor predeterminadotrue
), no hay acceso ssh ni otra configuración en el host cliente, solo se configura el servidor para hacer backup del host.
El archivo de configuración del cliente en el servidor BackupPC se construye con las siguientes variables:
backuppc_rsync_share_names
: lista de puntos de árbol de carpetas en el cliente a respaldar. Por ejemplo:
backuppc_rsync_share_names:
- /etc
- /root
- /var
- /usr/local
Con el método rsync, BackupPC realizará un comando rsync para cada elemento de esta lista.
backuppc_include_files:
: lista de carpetas para incluir en el backup del cliente (la opción --include de rsync se construirá con esta variable)backuppc_exclude_files:
: lista de carpetas para excluir del backup del cliente (la opción --exclude de rsync se construirá con esta variable)backuppc_xfermethod
: Método de transferencia opcional (rsync como predeterminado)backuppc_more
: Hash opcional con clave/valor específicos (útil para directivas personalizadas, como la programación de backups y conservación). Consulta el ejemplo en el archivo defaults/main.yml.
Las siguientes variables permiten definir la ejecución de los scripts de dumps de archivos pre y post por BackupPC:
backuppc_pre_dump_script
: ruta del archivo del script de pre dump, que BackupPC ejecutará antes de hacer el dump de archivos durante un backup. Su valor predeterminado es'{{ backuppc_client_home }}/scripts/pre_dump.sh'
backuppc_post_dump_script
: ruta del archivo del script de post dump, que BackupPC ejecutará después de hacer el dump de archivos durante un backup. Su valor predeterminado es'{{ backuppc_client_home }}/scripts/post_dump.sh'
backuppc_scripts_local_dir
: ruta en el controlador local de Ansible donde el playbook encontrará los dos scripts anteriores para instalarlos en el cliente. Su valor predeterminado es'{{ playbook_dir }}/host_vars/{{ inventory_hostname }}/files/backuppc/'
. Por lo tanto, en la estructura de directorios de tu playbook, deberás colocar los scripts de pre y post dump, en archivos con los mismos nombres base que sus respectivas rutas aquí mencionadas, en una carpeta llamadafiles/backuppc
, junto a la carpetavars
del host que estás configurando:
host_vars
└── <tu_host>
├── files
│ └── backuppc
│ ├── post_dump.sh
│ └── pre_dump.sh
└── vars
├── 10_kvm_virtual.yml
└── 20_backuppc.yml
backuppc_scripts
: bandera de scripts verdadero/falso. Si es verdadera, instala los scripts de pre y post dump descritos anteriormente. Esta bandera está en desuso. Se conserva por compatibilidad hacia atrás, pero en la próxima versión mayor, se eliminará y los scripts se instalarán cuando su ruta esté definida.backuppc_scripts_sudo
: bandera verdadera/falsa para otorgar derechos de acceso sudo a los scripts de pre y post dump.backuppc_DumpPreUserCmd
ybackuppc_DumpPostUserCmd
: comandos ssh para que backuppc ejecute los scripts de pre_dump y post_dump. Estas variables están predefinidas de acuerdo con las banderas anteriores, pero pueden ser sobrescritas.backuppc_sudoer
: comandos autorizados con sudo para el usuariobackuppc_client_user
. Es una cadena que puede ser sobrescrita, siempre que comience conCmnd_Alias BACKUPS =
, seguida de la lista de comandos de shell que el usuario necesita ejecutar para realizar un backup. Como se ha predefinido, esta variable incluye rsync, y eventualmente los scripts de pre y post dump, de acuerdo con las banderas anteriores.
Las siguientes variables proporcionan herramientas para definir, utilizando los scripts descritos anteriormente, el dump de bases de datos para la coherencia de los backups:
backuppc_db_server_type
: variable de tres estados que define un eventual dump de mysql o pgsql antes de los backups. Los tres posibles valores son: pgsql, mysql o null. El comportamiento de los scripts y los backups de db son diferentes para mysql y pgsql. Particularmente, para MySQL debes agregar tú mismo los scriptspre_dump.sh
ypost_dump.sh
que hacen el trabajo de dumping de bases de datos, mientras que para PostgreSQL estos scripts se construyen a partir de plantillas (y solo realizan el dump de una base de datos). Para PostgreSQL, los derechos sobre la base de datos deben definirse previamente, mientras que, por el contrario, la tarea de MySQL asigna derechos de acceso a la base de datos a un usuario dado.- Para PostgreSQL, las variables son:
backuppc_db_to_dump_name
define la base de datos pgsql a respaldar,backuppc_db_dump_user
define el usuario pgsql para acceder a la base de datos,backuppc_db_dump_user_pass
es la contraseña de los usuarios anteriores. La configuración de contraseñas y privilegios de este usuario en la base de datos debe hacerse en otra parte del playbook.
- Para Mysql, las variables son:
backuppc_db_server_root_pass
debe establecerse en el valor apropiado si el usuarioroot
de mysql tiene una contraseña definida. Por defecto, la variable está indefinida. Cabe mencionar que, en instalaciones recientes de mysql/mariadb, al menos en Debian, la instalación de mysql no pregunta y no genera aleatoriamente una contraseña para el root. El mantenimiento en Debian ya no se realiza con un usuario y contraseña específicos, sino con el usuario root a través de un socket unix y no un socket autenticado por tcp. Si la variable permanece indefinida, las tareas de mysql se realizarán utilizando la configuración de mantenimiento de Debian.backuppc_db_dump_user
ybackuppc_db_dump_user_pass
son el nombre del usuario mysql y la contraseña correspondiente, que se le dará acceso de SELECT a todas las bases y se configurará como predeterminado en el archivo.my.cnf
en el directorio home del usuario unixbackuppc_client_user
. Por lo tanto, los scriptspre_dump.sh
opost_dump.sh
podrán realizar cualquier dump de base de datos llamando a un simple comando mysql.
Las siguientes variables configuran el acceso web para los backups del host cliente en la interfaz web de BackupPC:
backuppc_server_web_main_user
: usuario principal con acceso a los backups del host cliente a través de la interfaz web de BackupPC. Predeterminado abackuppc
.backuppc_server_web_other_users
: Otros usuarios con acceso a los backups del host cliente a través de la interfaz web de BackupPC debían definirse como una cadena que enumera los usuarios separados por comas: "usuario1,usuario2". El acceso de los usuarios debe configurarse en el servidor BackupPC.
Ejemplos de script de Mysql
Para un backup de Mysql, para hacer un dump de todas las bases de datos antes del dump de archivos, puedes usar los siguientes scripts, que aprovecharán el usuario de backuppc configurado por el rol:
pre_dump.sh
#!/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
post_dump.sh
#!/bin/bash
rm dump.sql.tar.gz
Ejemplo de Playbook
Consideramos que tenemos una instancia estándar de BackupPC ejecutándose en bck-server.domain.org
gestionada a través del inventario de Ansible. El siguiente playbook configura en este servidor el backup de las carpetas especificadas del host client.domain.org
, con el acceso ssh necesario.
- name: Backup del host client.domain.org
hosts: client.domain.org
become: true
vars:
- backuppc_server_name: bck-server.domain.org
- backuppc_rsync_share_names:
- /etc
- /var
- /opt
roles:
- role: udelarinterior.backuppc_client
Licencia
GPLv3
Información del Autor
Rol original Emilien M mejorado por Víctor Torterola y Daniel Viñar
Install and manage BackupPC Client
ansible-galaxy install udelarinterior.backuppc_client