Respaldo automatizado

De WikiSalud
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Configuración del Servidor)
(Revisado y aprobado como procedimiento oficial de respaldo.)

Revisión de 14:38 24 feb 2014

Aprobado Oficialmente Este artículo ha sido aprobado oficialmente.

Contenido

Descripción de la arquitectura de red

Suponga que se tiene una red como la que se muestra en la siguiente imagen.

Ejemplo de interconexión de red.

Donde,

respaldo.dominio.tld será el servidor donde se respaldarán los datos.

  • Dirección IP de ejemplo: 192.168.1.10

servidor1.dominio.tld es un servidor que tiene configurados los siguientes servicios:

  • Un wiki de Mediawiki. En el caso del Mediawiki la mayor parte del contenido se almacena en la base de datos, pero los archivos e imágenes se almacenan en /var/lib/mediawiki/images/, en el caso de Debian.
  • Una base de datos PostgreSQL.
  • Un repositorio de GIT. En el caso de Debian, se ubica en /var/cache/git/.
  • Dirección IP de ejemplo: 192.168.1.20

servidor2.dominio.tld es un servidor que tiene los siguientes servicios:

  • Una página web alojada en /var/www/.
  • Una base de datos PostgreSQL.
  • Una base de datos MySQL.
  • Dirección IP de ejemplo: 192.168.1.30
Para este caso, todos los servidores con Debian GNU/Linux instalado.
Sin embargo, es aplicable a cualquier sistema en el que se pueda
tener instalado en los servidores clientes rsync.

Configuración previa

Es importante tener configurados los repositorios y la configuración de red correcta de tal manera que permita la comunicación entre los clientes y el servidor de respaldo.

Los nombres de los equipos deben estar correctamente configurados en:

  • /etc/hosts
  • /etc/hostname
  • /etc/mailname

La configuración de los servidores de nombres (DNS) debe estar correctamente configurada en:

  • /etc/resolv.conf
N.B. Si es una red en la que no hay un servidor de nombres (DNS)
se puede configurar los nombres y las direcciones IP del servidor
de respaldo y los clientes en /etc/hosts.

Configuración del Servidor

El servidor de respaldo debe ser un equipo con suficiente almacenamiento y una buena conexión de red. Debe contar, idealmente, con una controladora RAID. Para este caso se recomienda el uso de RAID 5 con disco de espera o RAID 6 con disco de espera.

Instalar rsync y openssh-server

aptitude install rsync openssh-server

En el archivo /etc/ssh/sshd_config modificar la línea PermitRootLogin para que no se permita la autenticación a la cuenta de root por medio de ssh

  1. # Authentication:
  2. LoginGraceTime 120
  3. PermitRootLogin no
  4. StrictModes yes

Reiniciar el servicio de ssh

/etc/init.d/ssh restart

Activar el demonio de rsync en el archivo /etc/default/rsync

  1. # defaults file for rsync daemon mode
  2.  
  3. # start rsync in daemon mode from init.d script?
  4. #  only allowed values are "true", "false", and "inetd"
  5. #  Use "inetd" if you want to start the rsyncd from inetd,
  6. #  all this does is prevent the init.d script from printing a message
  7. #  about not starting rsyncd (you still need to modify inetd's config yourself).
  8. RSYNC_ENABLE=true

Crear el archivo de configuración en /etc/rsyncd.conf (de manera predeterminada no existe)

  1. uid = nobody
  2. gid = nogroup
  3. max connections = 25
  4. socket options = SO_KEEPALIVE


Iniciar el servicio de rsync

/etc/init.d/rsync start
La bitácora de rsync se escribe en /var/log/syslog

Para este caso, crear una cuenta de usuario que lleve por nombre administrador.

N.B. Puede ser cualquier identificador, lo importante es mantener la consistencia
entre todos los servidores para facilitar el trabajo.

Crear la estructura de directorios dónde se almacenarán los respaldos de los clientes:

mkdir -p /var/respaldo/

Dado que será el usuario administrador quién escribirá localmente en el servidor los archivos que sean enviados por los clientes, este directorio debe pertenecer a este usuario:

chown -R administrador:administrador /var/respaldo/

Cada vez que se agregue un cliente para el respaldo, se debe crear un directorio como usuario administrador en /var/respaldo/ con el nombre del servidor cliente. Para este caso, servidor1 y servidor2, tal como se muestra a continuación.

mkdir -p /var/respaldo/servidor1
mkdir -p /var/respaldo/servidor2

Configuración del Cliente

En el cliente también debe existir la cuenta del usuario administrador, por lo que si no se ha creado, debe hacerse. Como usuario root ejecutar.

adduser administrador

Luego, autenticarse con dicho usuario. Por ejemplo,

su administrador

Generar el par de claves para la autenticación automatizada:

ssh-keygen -t rsa
N.B. Es importante que estas claves se creen sin frase clave.
De lo contrario, la autenticación automatizada no se podrá realizar.

Copiar la clave pública del cliente al servidor de respaldo.

ssh-copy-id administrador@respaldo.dominio.tld

Luego verificar que se puede ingresar al servidor de respaldo sin que solicite la contraseña.

ssh administrador@respaldo.dominio.tld

Crear la estructura de directorios donde se alojará el respaldo local en cada cliente. Como usuario root ejecutar:

mkdir -p /var/respaldo/config
mkdir -p /var/respaldo/archivos/datos-de-incrementales
mkdir -p /var/respaldo/bases-pgsql
mkdir -p /var/respaldo/bases-mysql

En el caso de PostgreSQL, es el motor el encargado de ejecutar la mayor parte de las actividades del respaldo y es el usuario dueño del proceso el que escribirá en el el directorio. Por tanto, el grupo del usuario postgres debe tener permisos de escritura. Como usuario root ejecutar:

chgrp postgres /var/respaldo/bases-pgsql/
chmod g+w /var/respaldo/bases-pgsql/

Crear la estructura de directorios dónde residirán los scripts que realizarán el respaldo. Como usuario root ejecutar:

mkdir /etc/respaldo

Colocar los scripts de respaldo en /etc/respaldo/

Configurar los respaldos

Todas las configuraciones se deben realizar como usuario root.

¿Qué respaldar?

En los servidores cliente hay tres categorías principales que definen aquello que se ha de respaldar:

  • Archivos de configuración del sistema. Ubicados en /etc/. Además, se respalda la configuración de SSH del usuario administrador de la máquina.
  • Archivos de servicios y de otros servicios. Principalmente los ubicados en /var/www/. Otros servicios como Mediawiki almacenan datos en /var/lib/mediawiki/images/. Para el caso de Git, almacena los datos en /var/cache/git/.
  • Archivos generados por las bases de datos. Para este caso, las bases de datos PostgreSQL y MySQL.

Archivos de Configuración

Editar el script /etc/respaldo/config.sh y cambiar:

  • servidor_respaldo=respaldo.dominio.tld
    Colocar el nombre que corresponda al servidor de respaldo.
  • correos_notificacion=usuario@dominio.tld
    Colocar las cuentas de correo a notificar separadas por coma y sin espacio.

Archivos de Servicios Web y otros

Editar el script /etc/respaldo/archivos.sh y cambiar:

  • servidor_respaldo=respaldo.dominio.tld
    Colocar el nombre que corresponda al servidor de respaldo.
  • correos_notificacion=usuario@dominio.tld
    Colocar las cuentas de correo a notificar separadas por coma y sin espacio.
  • Prestar especial cuidado a
    ruta_respaldada=("/var/www")
    Pues acá es donde se definen todas las rutas a las estructuras de directorios que se desean respaldar. Por ejemplo, para Mediawiki y Git debería quedar como se muestra a continuación (cada ruta entre comillas y separada por espacio):
    ruta_respaldada=("var/cache/git" "/var/lib/mediawiki/images" "/var/www")
    De esta manera se respaldan los archivos del servidor web, Mediawiki y Git.

Bases de Datos

PostgreSQL

Editar el script /etc/respaldo/bases-pgsql.sh y cambiar:

  • servidor_respaldo=respaldo.dominio.tld
    Colocar el nombre que corresponda al servidor de respaldo.
  • correos_notificacion=usuario@dominio.tld
    Colocar las cuentas de correo a notificar separadas por coma y sin espacio.
  • Editar el archivo /etc/postgresql/9.1/main/postgresql.conf, descomentar y modificar el parámetro wal_level tal como se muestra a continuación:
  1. #------------------------------------------------------------------------------
  2. # WRITE AHEAD LOG
  3. #------------------------------------------------------------------------------
  4.  
  5. # - Settings -
  6.  
  7. wal_level = archive                     # minimal, archive, or hot_standby
  8.                                         # (change requires restart)
  • Descomentar y activa el parámetro archive_mode:
  1. # - Archiving -
  2.  
  3. archive_mode = on               # allows archiving to be done
  4.                                 # (change requires restart)
  • Descomentar el parámetro archive_command y colocar la siguiente orden:
  1. archive_command = 'test ! -f /var/respaldo/bases-pgsql/%f && mv %p /var/respaldo/bases-pgsql/%f'                # command to use to archive a logfile segment
  • Descomentar archive_timeout y ajustar el tiempo deseado a 3600 segundos, equivalente a una hora:
  1. archive_timeout = 3600          # force a logfile segment switch after this
  2.                                 # number of seconds; 0 disables
  • Reiniciar el servicio de PostgreSQL:
/etc/init.d/postgresql restart

MySQL

Editar el script /etc/respaldo/bases-mysql.sh y cambiar:

  • servidor_respaldo=respaldo.dominio.tld
    Colocar el nombre que corresponda al servidor de respaldo.
  • correos_notificacion=usuario@dominio.tld
    Colocar las cuentas de correo a notificar separadas por coma y sin espacio.
  • password_mysql=
    Colocar la contraseña de root de MySQL.
  • Editar el archivo /etc/mysql/my.cnf y modificar log_bin, expire_logs_days y max_binlog_size como se muestra a continuación:
  1. log_bin                 = /var/log/mysql/mysql-bin.log
  2. expire_logs_days        = 1
  3. max_binlog_size         = 10M
  • Reiniciar el servicio de mySQL:
/etc/init.d/mysql restart

Activar los respaldos

  • Modificar los permisos de los scripts. Por seguridad se deben otorgar los mínimos necesarios.
chmod 700 /etc/respaldo/*.sh
  • Editar el archivo /etc/respaldo/respaldo. En el caso de las bases de datos, se hacen los respaldos aproximadamente con 20 minutos de diferencia entre los distintos motores. Los archivos se respaldan a la 1:00am; las bases de datos PosgreSQL y MySQL a las 2:00am y 2:20am, respectivamente; los archivos de configuración a las 3:00am. A continuación se muestra un ejemplo.
  1. ## Archivos
  2. # Domingo (completo)
  3. 00 01   * * sun         root    /etc/respaldo/archivos.sh completo
  4. # Lunes-Sábado (incremental)
  5. 00 01   * * mon-sat     root    /etc/respaldo/archivos.sh incremental
  6.  
  7.  
  8. ## Bases de datos PostgreSQL
  9. # Domingo a una hora determinada (completo)
  10. 00 02   * * sun         root    /etc/respaldo/bases-pgsql.sh completo
  11. # de Lunes a Sábado a la hora fijada (incremental)
  12. 00 02   * * mon-sat     root    /etc/respaldo/bases-pgsql.sh incremental
  13. # Cada hora menos el día y hora del respaldo completo (incremental)
  14. 00 00,01,03-23  * * *   root    /etc/respaldo/bases-pgsql.sh incremental
  15.  
  16. ## Bases de datos MySQL
  17. # Domingo a una hora determinada (completo)
  18. 20 02   * * sun         root    /etc/respaldo/bases-mysql.sh completo
  19. # de Lunes a Sábado a la hora fijada (incremental)
  20. 20 02   * * mon-sat     root    /etc/respaldo/bases-mysql.sh incremental
  21. # Cada hora menos el día y hora del respaldo completo (incremental)
  22. 20 00,01,03-23  * * *   root    /etc/respaldo/bases-mysql.sh incremental
  23.  
  24.  
  25. ## Configuración
  26. # Diario
  27. 00 03   * * *           root    /etc/respaldo/config.sh
  • Mover el archivo /etc/respaldo/respaldo a /etc/cron.d/ para que la tarea sea ejecutada por anacron.
mv /etc/respaldo/respaldo /etc/cron.d/

Control de los respaldos

Al tener muchos servidores y diversos servicios configurados con los respaldos, es importante que se tengan coordinadas las horas a las que se realizan las tareas de respaldo. Por ello, se recomienda llevar un control de los mismos de manera manual, por ejemplo, en el servidor de respaldo se puede crear un archivo llamado temporizacion.txt en el directorio de trabajo del usuario administrador como el que se muestra a continuación:

  1. Temporización de respaldo de las máquinas respaldadas (NTP debe estar funcionando para que esto funcione):
  2.  
  3. a) Archivos (Este respaldo se efectúa a las 01:00 y 04:00 horas)
  4.  
  5. servidor1:                     01:00
  6. servidor2:                     01:02
  7.  
  8. b) Base de datos (Este respaldo se hace a las 02:00 y a las 05:00)
  9.  
  10. servidor1:                     02:00
  11. servidor2:                     02:02 pgsql 02:22 mysql
  12.  
  13. c) Configuración (/etc) (Este respaldo se hace a las 03:00 y a las 06:00)
  14.  
  15. servidor1:                     03:00
  16. servidor2:                     03:02
Nota: Este archivo debe actualizarse cada vez que se configure un nuevo cliente con el respaldo.
Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas