Tareas #6035

Computación en la nube para el Interior - Tareas #5929: Nueva plataforma de servidores

Computación en la nube para el Interior - Tareas #5965: Instalación de servidores físicos

Computación en la nube para el Interior - Tareas #5982: Instalación del servidor Redota

Crear un virtual de respaldos

Added by Daniel Viñar Ulriksen 7 months ago. Updated 16 days ago.

Status:En cursoStart date:09/28/2018
Priority:NormalDue date:
Assignee:Victor Torterola% Done:

90%

Category:-Spent time:101.50 hours
Target version:-

Description

Crear un servidor de respaldos con BackupPC para atender la plataforma.

Se trata de diseñar un playbook de configuración en Redota de un virtual (container?) como D'Alembert, y de automatizar en la medida de lo posible también la configuración de respaldos de los virtuales en esta plataforma.

Conviene considerar los diferentes procedimientos documentados.

Quizás sea también oportuno mirar las posibilidades de respaldos y restauraciones en proxmox, que puedan ser pertinentes en vez de o al lado del backuppc.


Related issues

Related to Respaldos - Tareas #4390: Hacer respaldos con un usuario no root. En curso 05/08/2015
Related to Plataforma de servidores - Tareas #4083: Agregar Pacioli al sistema de Respaldos Comentarios 02/19/2015 02/19/2015

History

#1 Updated by Daniel Viñar Ulriksen 3 months ago

  • Description updated (diff)

#2 Updated by Victor Torterola about 2 months ago

  • Status changed from Nueva to En curso
  • Assignee changed from Cielito - cielo to Victor Torterola

Se realiza una búsqueda en ansible-galaxy de los roles existentes para la instalación y configuración automatizada de BackupPc.
Este role cumple con lo necesario según su documentación, por lo que se pone en practica la instalación y prueba de su funcionamiento.
Se encuentran varios problemas o inconvenientes a resolver:
1- crea un usuario backuppc pero no crea su contraseña para el acceso web
2- no copia a las maquinas que quiere respaldar la clave ssh por lo que finalizada la instalación y no queda completamente funcional
3- no instala el rsync en las maquinas a respaldar
Se consulta al equipo vía Telegram como vamos a manejar las claves SSH si ya del vamos tenemos un usuario backuppc y lo copiamos a todas las maquinas o si le asignamos esa tarea a este role, es decir que el mismo role cree la clave y la copie a las virtuales a respaldar
El proceso de esta tarea esta subida a github en la rama backuppc por ahora no se hizo el fork de este role hasta que no quede funcional.

El servidor de respaldos Che tiene como acceso la contraseña ubicada en secretos.yml quizá se deba cambiar a vault

#3 Updated by Victor Torterola about 2 months ago

  • Status changed from En curso to Resuelta
  • % Done changed from 0 to 90

Servidor de respaldo:

Se finaliza la instalación automatizada del servidor de respaldos che.interior.
Para poder agregar nuevos respaldos se debe agregar la url a groups_var/all/vars/60_backuppc.yml en el array de nombre backuppc_hosts, al correr el playbook para che.interior se agregan o se eliminan según la lista de hosts.
La comunicación entre las maquinas se realiza por un usuario backuppc y sus key de ssh son cargadas automáticamente, para cambiarlas se deben copiar un nuevo par de llaves a /files/backuppc/che.interior.edu.uy/
Queda pendiente migrar este servidor a Redota ya que no esta funcionando bien (Proxmox no lo reconoce)

Servidores a respaldar:

Al ejecutar el playbook le agrega a todos los servidores menos al che.interior el usuario backuppc con su clave ssh y el Rsync por lo que todas las maquinas tienen la posibilidad de ser respaldadas, aunque si no se encuentran en el listado de los hosts de Backuppc no se realiza el respaldo. También se pueden agregar por la web de BackupPc.

Documentación

#4 Updated by Victor Torterola about 1 month ago

  • % Done changed from 90 to 100

Se prueban los respaldos automatizados por 4 días y todo funciona correctamente. Como se estaba trabajando sobre el servidor madre guri.interior por mal funcionamiento de redota.interior se vuelve a crear el contenedor sobre redota y se modifica el tamaño de disco a 18T
Se prueban los respaldos en este nuevo contenedor y todo funciona correctamente y de forma automatizada. Esta versión de respaldos esta subida a git.interior en rama preproducción.

Documentacion

#5 Updated by Andrés Pías about 1 month ago

  • Related to Tareas #4390: Hacer respaldos con un usuario no root. added

#6 Updated by Andrés Pías about 1 month ago

  • Related to Tareas #4083: Agregar Pacioli al sistema de Respaldos added

#7 Updated by Daniel Viñar Ulriksen 30 days ago

  • Project changed from Computación en la nube para el Interior to Respaldos

#8 Updated by Victor Torterola 23 days ago

  • % Done changed from 100 to 70

Se comenta que en el role Common no deben agregarse tareas que no son referidas al común de los contenedores por este motivo se quita lo referente a backuppc para su role especifico de esa tarea.
Se forkea el role de la galaxia backuppc y se modifica lo necesario para que no sea solo un role de instalación de backuppc que también deje funcional los respaldos en las maquinas requeridas.
Por tal motivo en el archivo de hosts se crea el grupo seciu:backup donde se van a agregar las maquinas que queremos respaldar y en las variables del host a respaldar deberá aparecer backup_dump: yes/no de acuerdo a si queremos o no respaldar las bases de datos.
También en el caso de querer respaldar las bases de datos se deberá agregar a host_vars/host eleguido/files los archivos bash respaldo.sh que llevara como contenido lo requerido para hacer el respaldo, también debemos agregar delete_respaldo.sh que es quien elimina archivos innecesarios luego de respaldado todo el container.

Ejemplo de respaldo.sh (por supuesto que hay mil maneras de hacer este respaldo esta es simplemente una)
Este respaldo recorre las bases de datos existentes y las respalda una a una, luego comprime todo en un tar.gz y elimina los .sql creados

#!/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

Ejemplo de delete_respaldo.sh (también es discutible la forma de hacerlo)
Lo unico que hace es borrar en la maquina a respaldar el tar.gz que ya fue enviado al servidor de respaldos

#!/bin/bash

rm dump.sql.tar.gz

Lo importante de estos archivos es que para cada host se puede utilizar uno diferente de acuerdo a las necesidades del administrador

Cuando se corre el playbook sobre el contenedor che.interior se realiza la instalación de Backuppc, se crea una clave ssh la cual se copia a todos los host incluidos en el grupo seciu:backup.

Cuando el playbook se corre sobre contenedores que estén en seciu:backup lo que hace este role es instalar todo lo necesario para respaldar dichos contenedores, se instala Rsync y en el caso que la variable backup_dump sea true se creara un usuario mysql que es quien se encargara de realizar los respaldos de la base de datos cuando Backuppc se lo indique.

El role es idempotente lo que hace fácil su manejo por ejemplo si queremos quitar un container de los respaldos bastaría con quitarlo del host seciu:backup y correr el playbook para che.interior lo mismo para agregar. Esto no elimina ningún respaldo anterior.

Quedan como pendientes quitar la carpeta home/backuppc ya que no es un usuario real y crear el usuario backuppc con el role users que trajimos de la galaxia.

Los cambios fueron subidos a git.interior en la rama backuppc

#9 Updated by Victor Torterola 22 days ago

  • Status changed from Resuelta to En curso
  • % Done changed from 70 to 90

Se modifica la forma de respaldar las bases de datos.

Los pasos a seguir son los siguientes:
1- se deberá colocar en host_vars/nombre_del_host/files las script respaldo.sh y delete_respaldo.sh un ejemplo que se puede utilizadar esta en /config/files/backuppc
2- colocar en el grupo seciu_backup_dump el nombre del host a respaldar, el nombre deberá ir también en el grupo seciu_backup
3- crear el contenedor que se quiere respaldar

ansible-playbook --limit nombre_del_host site.yml
esto hace que el contenedor tenga lo necesario para poder respaldarse
4- correr el playbook para el servidor che.interior agregue el contenedor a los respaldos y sincronice sus claves ssh
ansible-playbook --limit che.interior.edu.uy site.yml

Es valido recordar que todo lo referente a backuppc es idempotente pero hay veces que otras instalaciones que puedan cargar en los contenedores no lo son como es el caso de AlterC. En el caso que el contenedor tenga instalado AlterC se deberá recrear nuevamente el contenedor.

Queda documentado el procedimiento la wiki

#10 Updated by Victor Torterola 21 days ago

Cuando creamos un container de cero no se conecta con las maquinas a respaldar y al ejecutar en backuppc un respaldo nos tira el error:

backup failed (Unable to read 4 bytes)

Veo que el error es provocado porque el primer acceso desde el servidor de backuppc a una maquina nos pide un yes y Backuppc no lo sabe resolver.
Por esto agrego al role
ssh-keyscan -H {{ item }} >> /var/lib/backuppc/.ssh/known_hosts
esto me agrega al archivo known_host cada uno de los host ṕara que backuppc los pueda acceder sin preguntar.
Tambien estuve modificando las variables para generalizarlas y hacer una peticion para subir los aportes al role original con los cambios implementados por mi.

#11 Updated by Victor Torterola 16 days ago

Se separa la instalación de BackupPc del resto de las tareas:

Creación del servidor de respaldos Backuppc

Instalar backuppc
Crear clave ssh publica-privada para che.interior
Crear usuario para la interface-web (http://che.interior.edu.uy/backuppc)

Para crear el servidor de respaldos debemos correr: ansible-playbook --limit che.interior.edu.uy site.yml

Agregar un contenedor a los respaldos

Instalar Rsync
Crear carpeta backuppc
Copiar clave ssh publica del servidor de respaldos (che.interior)
Copiar las script para respaldar las bases de datos 
     mysql_dump: true 
     backuppc_pre_dump: 'ssh $host ./respaldo.sh'
     backuppc_post_dump: 'ssh $host ./end_respaldo.sh'

Crear un usuario mysql para realizar los respaldos 
     mysql_dump: true
Se copia configuración a Backuppc y se agrega a la lista para respaldar
     backup_state == 'present' (si esta variable esta en 'absent' no se agrega a la lista)

Para cambiar las configuraciones de respaldo debemos: ejemplo

     * agregar al grupo seciu_backup el host a respaldar
     * en host_vars/nombre_del_host_a_respaldar/vars/ definir las siguientes variables
            backuppc_pre_dump: 'ssh $host ./respaldo.sh'
            backuppc_post_dump: 'ssh $host ./end_respaldo.sh'

            backup_state: present  #present/absent
            include_files:    #carpetas a respaldar
              - /var/lib
              - /etc

            mysql_dump: true     #requiere respaldar base de datos

Para agregar un host o quitar debemos correr: ansible-playbook --limit nombre_del_host site.yml

ATENCION!!! si tenemos un contenedor que esta funcionando y no es idempotente podemos agregarlo a los respaldos corriendo:

     ansible-playbook --limit nombre_del_host site.yml --tags backuppc

esto hace que corra a partir de la tarea backuppc que es el ultimo role llamado en crear_lxc.yml

Todo subido a la rama backuppc y al role

Also available in: Atom PDF