Cómo sincronizar dos servidores web/sitios web Apache mediante Rsync


Hay tantos tutoriales disponibles en la web para duplicar o realizar una copia de seguridad de sus archivos web con diferentes métodos, aquí estoy creando este artículo para mi futura referencia y aquí usaré un comando muy simple y versátil de Linux para crear un copia de seguridad de su sitio web. Este tutorial le ayudará a sincronizar datos entre sus dos servidores web con "Rsync".

El propósito de crear un espejo de su servidor web con Rsync es que si su servidor web principal falla, su servidor de respaldo puede tomar el control para reducir el tiempo de inactividad de su sitio web. Esta forma de crear una copia de seguridad del servidor web es muy buena y eficaz para las pequeñas y medianas empresas web.

Ventajas de sincronizar servidores web

Las principales ventajas de crear una copia de seguridad de un servidor web con rsync son las siguientes:

  1. Rsync sincroniza solo los bytes y bloques de datos que han cambiado.
  2. Rsync tiene la capacidad de verificar y eliminar aquellos archivos y directorios en el servidor de respaldo que se hayan eliminado del servidor web principal.
  3. Se encarga de los permisos, las propiedades y los atributos especiales mientras copia datos de forma remota.
  4. También es compatible con el protocolo SSH para transferir datos de forma encriptada para que tenga la seguridad de que todos los datos están seguros.
  5. Rsync utiliza un método de compresión y descompresión mientras transfiere datos que consumen menos ancho de banda.

Cómo sincronizar dos servidores web Apache

Continuemos con la configuración de rsync para crear un espejo de su servidor web. Aquí, usaré dos servidores.

  1. Dirección IP: 192.168.0.100
  2. Nombre de host: webserver.example.com

  1. Dirección IP: 192.168.0.101
  2. Nombre de host: backup.example.com

Aquí, en este caso, los datos del servidor web de webserver.example.com se reflejarán en backup.example.com. Y para hacerlo primero, necesitamos instalar Rsync en ambos servidores con la ayuda del siguiente comando.

[[email protected]]# yum install rsync        [On Red Hat based systems]
[[email protected]]# apt-get install rsync    [On Debian based systems]

Podemos configurar rsync con el usuario root, pero por razones de seguridad, puede crear un usuario sin privilegios en el servidor web principal, es decir, webserver.example.com para ejecutar rsync.

[[email protected]]# useradd tecmint
[[email protected]]# passwd tecmint

Aquí he creado un usuario “tecmint” y le he asignado una contraseña.

Es hora de probar su configuración de rsync en su servidor de respaldo (es decir, backup.example.com) y para hacerlo, escriba el siguiente comando.

[[email protected] www]# rsync -avzhe ssh [email protected]:/var/www/ /var/www
[email protected]'s password:

receiving incremental file list
sent 128 bytes  received 32.67K bytes  5.96K bytes/sec
total size is 12.78M  speedup is 389.70

Puede ver que su rsync ahora está funcionando absolutamente bien y sincronizando datos. He utilizado "/ var/www" para transferir; puede cambiar la ubicación de la carpeta según sus necesidades.

Ahora, hemos terminado con las configuraciones de rsync y ahora es el momento de configurar un cron para rsync. Como vamos a usar rsync con el protocolo SSH, ssh pedirá autenticación y si no proporcionamos una contraseña a cron, no funcionará. Para que cron funcione sin problemas, necesitamos configurar inicios de sesión ssh sin contraseña para rsync.

Aquí, en este ejemplo, lo estoy haciendo como root para preservar la propiedad de los archivos, también puede hacerlo para usuarios alternativos.

Primero, generaremos una clave pública y privada con los siguientes comandos en el servidor de copias de seguridad (es decir, backup.example.com).

[[email protected]]# ssh-keygen -t rsa -b 2048

Cuando ingrese este comando, no proporcione la frase de contraseña y haga clic en Intro para Vaciar la frase de contraseña para que rsync cron no necesite ninguna contraseña para sincronizar los datos.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9a:33:a9:5d:f4:e1:41:26:57:d0:9a:68:5b:37:9c:23 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|          .o.    |
|           ..    |
|        ..++ .   |
|        o=E *    |
|       .Sooo o   |
|       =.o o     |
|      * . o      |
|     o +         |
|    . .          |
+-----------------+

Ahora, nuestra clave pública y privada ha sido generada y tendremos que compartirla con el servidor principal para que el servidor web principal reconozca esta máquina de respaldo y le permita iniciar sesión sin pedir ninguna contraseña mientras sincroniza los datos.

[[email protected] html]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

Ahora intente iniciar sesión en la máquina, con "ssh‘ [email protected] ‘", y registre .ssh/allowed_keys.

[[email protected] html]# [email protected]

Ahora, hemos terminado con compartir claves. Para obtener más información sobre la contraseña SSH sin inicio de sesión, puede leer nuestro artículo al respecto.

  1. Inicio de sesión sin contraseña SSH en 5 sencillos pasos

Configuremos un cron para esto. Para configurar un cron, abra el archivo crontab con el siguiente comando.

[[email protected] ~]# crontab –e

Abrirá el archivo/etc/crontab para editarlo con su editor predeterminado. Aquí En este ejemplo, estoy escribiendo un cron para ejecutarlo cada 5 minutos para sincronizar los datos.

*/5        *        *        *        *   rsync -avzhe ssh [email protected]:/var/www/ /var/www/

El comando cron y rsync anterior simplemente sincroniza “/ var/www /” desde el servidor web principal a un servidor de respaldo cada 5 minutos. Puede cambiar la configuración de la ubicación de la carpeta y la hora según sus necesidades. Para ser más creativo y personalizar con el comando Rsync y Cron, puede consultar nuestros artículos más detallados en:

  1. 10 comandos Rsync para sincronizar archivos/carpetas en Linux
  2. 11 ejemplos de programación cron en Linux