systemadmin.es > LAMP y web > Migración de datos entre servidores con rsync

Migración de datos entre servidores con rsync

Para realizar una migración de una gran cantidad de datos no vale apagar, copiar y volver a arrancar. Vamos a ver como realizar una migración de un servidor NFS que sirve los contenidos de una pagina web.

El esquema de los servidores seria similar al siguiente:

Diagrama migración entre servidores backend

Diagrama migración entre servidores backend

Para poder realizar la migración y tener todos los logs de lo que esta pasando vamos a combinar screen con script. Primero de todo creamos una sesión con screen para evitar que si perdemos conectividad se pierda el proceso.

screen -S migracion

A continuación con script indicamos a que fichero queremos que se guarde la salida de la sesión interactiva:

script log.migracion

Finalmente mediante rsync y un loop dejamos sincronizando el servidor origen y el servidor destino:

#!/bin/bash

export RSYNC_RSH="ssh -c arcfour -x -o Compression=no"

while true;
do
        date
        time ionice -c2 -n2 rsync -a -H -x --numeric-ids jordi@origen:/var/www /var/
done

Vamos a ver que significan los comandos:

Con el export indicamos lo siguiente:

  • -c arcfour: arcfour se trata de un cifrado de streams muy rápido
  • -x: Deshabilitamos X11 forwarding
  • -o Compression=no: Deshabilitamos compresión, ya que en una aplicación web tendremos el grueso del contenido en imagenes, por lo que es inútil intentar comprimir

En el loop hacemos un date para tener registro cada iteración, a continuación realizamos el rsync con un time y un ionice:

  • time: Medimos lo que tarda en completarse el comando
  • ionice: Bajamos la prioridad de entrada/salida del rsync para evitar que se produzca lentitud en el antiguo servidor

Los parámetros del rsync son los siguientes:

  • -a: “archive mode”, mantiene los permisos y los propietarios
  • -H: mantener los hardlinks
  • -x: no permite el rsync cruzar el sistema de ficheros
  • –numeric-ids: indicamos que no intente traducir ids con los nombres, simplemente traspase los ficheros con su ID

Una vez dejado la sincronización corriendo podemos dejar en otra sesión independiente el siguiente comando para que podamos ver la hora de inicio del proceso como va cambiando:

while true; do ps -fea | grep [r]sync | grep -v ss| head -n1 | awk '{ print $5 }'; sleep 1; done | uniq

Podremos comprobar como inicialmente tarda más y poco a poco va tardando cada vez menos:

17:42
00:45
00:58
01:10
01:18
01:20
01:21
01:22
01:23
01:25

Una vez hemos visto como cada pasada es un tiempo bajo podemos proceder a cambiar los frontales web para que apunten al nuevo NFS. Una vez todos los frontales apunten al nuevo servidor podremos quitar el rsync, con lo que habremos finalizado la intervención sin corte del servicio (evidentemente tendremos que tener mas de un frontal)

One comment to “Migración de datos entre servidores con rsync”

  1. Saludos! Es muy interesante este articulo, con el me ayudaste a resolver algunas dudillas que tenia por el momento. Exitos hasta pronto.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>