freehck.script_psql_backup

freehck.script_psql_backup

Este rol crea un script que realiza copias de seguridad de psql.

Hace un volcado de la base de datos, opcionalmente comprime y cifra la copia de seguridad con aes256.

Puede enviar mensajes a Slack.

Puede almacenar tu copia de seguridad en S3 o copiarla a otro host usando scp.

Variables del Rol

Variables básicas

psql_backup_host: host de psql

psql_backup_port: puerto de psql (por defecto 3306)

psql_backup_user: usuario de psql

psql_backup_pass: contraseña de psql

psql_backup_db: base de datos psql para respaldar (si no se establece, se pasará la opción --all-databases a psqldump)

psql_backup_backend_use_s3: establece en verdadero si deseas almacenar tu copia de seguridad en S3

psql_backup_backend_use_scp: establece en verdadero si deseas enviar tu copia de seguridad a otro host usando scp

Variables del backend S3

psql_backup_s3cfg_template: plantilla de tu configuración s3fs (se proporciona un valor por defecto, no te preocupes)

psql_backup_s3: opciones de configuración de s3 en un formato como este

psql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "nombre-del-bucket"
Variables del backend SCP

psql_backup_scp_host: host de almacenamiento para copiar tu copia de seguridad

psql_backup_scp_user: usuario para iniciar sesión en el host de almacenamiento

psql_backup_scp_dst: ruta en el host de almacenamiento para guardar tu copia de seguridad

psql_backup_scp_identity_src: archivo de identidad para usar al iniciar sesión en el host de almacenamiento (sí, debe ser una clave privada)

Nomenclatura

psql_backup_archive_prefix: solo el nombre de la copia de seguridad o simplemente todo lo que esté antes de la marca de tiempo

psql_backup_archive_stamp: plantilla de marca de tiempo en formato de la herramienta date (el valor por defecto es %F-%Hh%Mm%Ss y resulta en marcas de tiempo que parecen 2019-09-23-12h22m07s)

psql_backup_script_name: si deseas renombrar el script base, eres bienvenido

psql_backup_custom_script_name: si deseas establecer un nombre específico para el script de trabajo que realiza la copia de seguridad. El valor por defecto es psql-backup-<nombre_base_de_datos>.sh, donde puede ser all si no se especificaron bases de datos para respaldar.

psql_backup_scp_identity_name: el valor por defecto es id_rsa, pero podría ser útil modificarlo si deseas tener múltiples backends SCP que usen diferentes claves

psql_backup_encrypt_aes_key_name: el valor por defecto es aes256.key, necesario si deseas tener diferentes claves de encriptación para diferentes tareas de copia de seguridad

Notificaciones

psql_backup_warn_size: en GiB, el valor por defecto es 0. Compara tu copia de seguridad con este tamaño. Si tu copia de seguridad es menor, te advertirá sobre esto.

psql_backup_hostname: nombre del host (que se imprimirá en los mensajes de Slack)

psql_backup_slack_webhook: como se indica, es un webhook de Slack; configúralo para recibir notificaciones de Slack.

Cómo obtener un webhook de Slack: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Variables de Compresión y Encriptación

psql_backup_gzip: comprimir archivo de copia de seguridad

psql_backup_encrypt_aes: encriptar archivo de copia de seguridad (si gzip está habilitado esta acción se realizará específicamente DESPUÉS de gzip)

psql_backup_encrypt_aes_key_src: clave aes256 para encriptar tu copia de seguridad

La clave Aes256 es solo 32 bytes aleatorios.

Puedes usar el siguiente comando para crearla: dd if=/dev/urandom of=aes256.key count=1 bs=32.

Si prefieres contraseñas en cadena (es menos seguro) puedes usar esto: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Directorios

psql_backup_script_dir: directorio para almacenar el script base

psql_backup_custom_script_dir: directorio para almacenar scripts específicos de trabajos de copia de seguridad correspondientes

psql_backup_conf_dir: directorio para almacenar archivos de configuración del script de copia de seguridad

psql_backup_encrypt_aes_key_dir: directorio para almacenar la clave de encriptación aes256

psql_backup_tmpdir: directorio para mantener resultados temporales (no necesitas crear uno separado, es /tmp por defecto)

Pasar datos fuera del rol

psql_backup_save_facts_about_custom_script: si lo configuras en verdadero, entonces el rol guardará la ruta completa del script de trabajo generado, que debe ejecutarse para realizar la copia de seguridad, en la variable psql_backup_last_generated_custom_script. Puedes usar esta variable para agregar una tarea cron específica para este script.

Ejemplo de Playbook

# crear script de trabajo de copia de seguridad psql
- rol: freehck.script_psql_backup
  # parámetros de conexión psql
  psql_backup_host: "{{ db_host }}"
  psql_backup_user: "{{ db_user }}"
  psql_backup_pass: "{{ db_pass }}"
  psql_backup_db: "{{ db_name }}"
  # parámetros de almacenamiento en backend
  psql_backup_backend_use_s3: no
  psql_backup_backend_use_scp:psql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  psql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  psql_backup_scp_user: 'file'
  psql_backup_scp_dst: '/var/www/file/public/psql-db-prod-backup'
  # gzip y encriptar
  psql_backup_gzip:psql_backup_encrypt_aes:psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # otros
  psql_backup_save_facts_about_custom_script:psql_backup_logfile: "/var/log/psql-backup.log"
  tags: [ backup, psql ]

# es sensato crear la tarea cron para este script de trabajo
- rol: freehck.crontask
  crontask_file: "backups"
  crontask_name: "respaldar base de datos"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ psql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, psql ]

Información importante

Después de desplegar el script de copia de seguridad de psql en tu host, es sensato ir al host que realiza las tareas de copia de seguridad y ejecutar el script de trabajo desde /opt/scripts sin parámetros. Si se ejecuta sin errores y ves el archivo de copia de seguridad en el almacenamiento, entonces todo está bien. Si no, descubrirás cuál fue el problema. Por ejemplo, podrías olvidarte de agregar el host de almacenamiento a known_hosts al configurar usuarios. O tu plantilla s3cfg podría contener un error. No olvides verificar todo dos veces: respaldar cosas es una tarea muy importante.

Después de verificar que la copia de seguridad fue creada y almacenada en el lugar correcto, revísala cuidadosamente. Debes estar seguro de que puedes restaurarla.

Licencia

MIT

Información del Autor

Dmitrii Kashin, freehck@freehck.ru

Acerca del proyecto

install a script performing mysql backups

Instalar
ansible-galaxy install freehck.script_psql_backup
Licencia
mit
Descargas
115
Propietario