Mejorar la velocidad del #rsync

rsync-backupHace ya un bien tiempo le hable sobre pasar archivos de un servidor a otro, hoy le digo como agilizar ese proceso.

Usando rsync

A menos que usen el protocolo rsync, una transferencia rsync entre 2 equipos utiliza como capa de transporte a SSH, SSH por lo general va cifrado (y sin compresión) y siempre en el cifrado de mayor complejidad posible, lo cual, si tu CPU es lento, hará que las transferencias duren mucho.

¿cómo solucionarlo? fácil!, cambiando el cifrado.

El cifrado SSH

SSH utiliza diversos algoritmos de cifrado (como 3DES o AES), a menos que tengas un CPU que soporte aceleración por hardware del cifrado AES (modernos CPU core i7 ó Xeon), usar un alto cifrado tiene un gran penalty en la velocidad de transferencia, en cambio, si es una conexión relativamente segura (desde tu portátil a otro equipo, ejemplo, una NAS en tu casa) usar un algoritmo inseguro puede ayudar a mejorar la velocidad de transferencia.

¿Cómo?, veamos.

RSYNC con ¿blowfish, arcfour?

Hay 2 cifrados bastante inseguros, pero muy rápidos de computar con hardware decente, uno es blowfish y el otro es arcfour (versiones de 128 y 256), mi equipo de pruebas es un:

  • Equipo Intel Atom J1900U con red Ethernet Gigabit, pero
  • Conectado a un swith 100Mbps
  • Y mi portátil está en una red LAN 802.11g (54Mbps)

En estas condiciones “promedio” ejecutamos el rsync:

He movilizado 1GB de información (un backup del sistema raíz) con el siguiente comando:

rsync -viHaAXv -S --recursive --progress  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* root@192.168.1.8:/opt/installer/appliance

Y este es el tiempo:

sent 1,137,165,129 bytes received 830,145 bytes 2,661,977.25 bytes/sec
total size is 1,134,756,293 speedup is 1.00
real 7m6.843s
user 0m28.400s
sys 0m10.204s

2.6MBps fueron transferidos en 7 minutos.

Ahora, usando arcfour128:

rsync -viHaAXv -S --recursive --progress -e "ssh -T -c arcfour128 -o Compression=yes -x" --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* root@192.168.1.8:/opt/installer/appliance
sent 1,137,202,567 bytes received 830,277 bytes 4,832,411.23 bytes/sec
total size is 1,134,794,587 speedup is 1.00
real 3m55.097s
user 2m16.032s
sys 0m14.868s

Esto es una tasa de transferencia de 4.8Mbps, que movieron 1GB de datos en 3,55 minutos, esto es un 90% de mejora en la velocidad!

Haciendo benchmark

Mis condiciones, no son tus condiciones, por lo que hacer un juicio “objetivo” sobre usar arcfour128, o blowfish, o AES si tu CPU lo soporta, lo mejor es que pruebes “tú mismo”, para ello tienes este pequeño script bash que te ayudará:

Crea un archivo de 50MB:

dd if=/dev/zero of=/opt/test-file bs=1M count=50

Y ejecutas este script:

#!/bin/sh
for cipher in aes128-ctr aes192-ctr aes256-ctr arcfour256 arcfour128 aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc arcfour ; do
 echo "$cipher"
 for try in 1 2 ; do
 time rsync -viHaAXS -e "ssh -T -c $cipher -o Compression=yes -x" /opt/test-file USER@IP-DESTINATION
 done
done

Y podrás obtener cuánto dura una transferencia de uno destino a otro con los cifrados soportados por openSSH.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*