GNU/Linux >> Tutoriales Linux >  >> Linux

Configure Lsyncd localmente y a través de SSH para sincronizar directorios

Este artículo explica cómo configurar Lsyncd herramienta tanto localmente como a través de SSH para mantener los directorios sincronizados.

Lsyncd significa Live Syncing Mirror Daemon, y es una herramienta utilizada en los sistemas Linux para mantener los directorios sincronizados. Estos directorios se pueden encontrar de forma local, dentro de la misma máquina, o de forma remota, en diferentes máquinas. Para la sincronización remota, este artículo se centra en el uso de SSH para lograrlo.

La ventaja de usar Lsyncd es que es una solución gratuita y liviana que no afectará el rendimiento del sistema de archivos. Supervisa los archivos periódicamente en busca de cambios y luego usa rsync para realizar la sincronización.

Requisitos

Para Lsyncd para que funcione correctamente necesitas tener rsync instalado.

NOTA: Se recomienda ejecutar los siguientes comandos como sudo

Para instalar rsync en los sistemas CentOS, Fedora o Red Hat use:

yum install rsync

Para sistemas Ubuntu o Debian use:

apt-get update
apt-get install rsync

Instalar Lsyncd

Para instalar lsyncd en un sistema CentOS, Fedora o Red Hat es necesario habilitar el repositorio EPEL antes de instalar lsyncd . Los siguientes comandos se utilizan para realizar la instalación:

yum install epel-release
yum install lsyncd

Para un sistema Ubuntu o Debian, el lsyncd La herramienta está incluida en los repositorios predeterminados, por lo que los siguientes comandos deberían ser suficientes para la instalación:

sudo apt-get update
sudo apt-get install lsyncd

Para confirmar que la instalación fue exitosa y verificar la versión instalada, use el siguiente comando:

lsyncd -version

Archivos de configuración de Lsyncd

El archivo de configuración predeterminado para Lsyncd se crea automáticamente en /etc/lsyncd.conf cuando se complete la instalación.

Este archivo contiene todos los parámetros utilizados para realizar la sincronización entre directorios, ya sea de forma local o remota.

Para archivos de configuración de ejemplo, puede revisar el contenido en /usr/share/doc/lsyncd*/examples/ (el * se refiere a la versión de Lsyncd instalada).

cd /usr/share/doc/lsyncd-2.2.2/examples/
ls -lh
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

A los efectos de este artículo, los archivos de configuración que pueden ser ejemplos útiles son lrsync.lua para la sincronización local y lrsyncssh.lua para sincronización remota.

Un archivo de configuración tendrá la siguiente estructura:

cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
[...]
-- User configuration file for lsyncd.
-- Simple example for default rsync.
settings {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
}

sync{
    default.rsync,
    source="src",
    target="trg"
}

Como se mencionó anteriormente, Lscynd usa el rsync herramienta para realizar la sincronización, por lo que puede usar el rsync banderas para personalizar el proceso agregando un rsync parámetro para sync declaración:

[...]
sync {
    default.rsync,
    source="src",
    target="trg",
    rsync = {
        archive = false,
        compress = true,
        links = false,
        owner = false,
        perms = false,
        verbose = true
    }
}
[...]

Además, es importante tener en cuenta que Lsyncd agrega los eventos durante un valor predeterminado de 20 segundos antes de verificar si se han realizado cambios. Este tiempo se puede modificar usando el delay parámetro en sync sección del archivo de configuración:

sync {
    default.rsync,
    source = "src",
    target = "trg",
    delay = 5,
}

Sincronizar directorios locales

Para sincronizar el contenido del directorio local /path/source_dir al directorio local /path/destination_dir necesitamos realizar algunos cambios en el archivo de configuración y se recomienda crear un archivo de registro y un archivo de estado para realizar un seguimiento del progreso de la tarea, aunque es un paso opcional:

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

El siguiente paso es modificar el archivo de configuración en /etc/lsyncd.conf para especificar los directorios de origen y de destino y, si se crearon, la ubicación de los archivos de registro y de estado. La configuración será la siguiente:

-- User configuration file for lsyncd.
-- Simple example for default rsync, but executing moves through on the target.
-- For more examples, see /usr/share/doc/lsyncd*/examples/
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
    default.rsync,
    source = "/path/source_dir",
    target = "/path/destination_dir"
}

Para activar esta nueva configuración inicie el servicio con el siguiente comando:

systemctl start lsyncd

Después de seguir las instrucciones anteriores, Lsyncd comenzará a sincronizar los contenidos de /path/source_dir a /path/destination_dir .

ADVERTENCIA Nota:Solo es seguro habilitar Lsyncd para que se inicie en el arranque si está seguro de que los directorios de destino nunca serán cambiados por ningún otro Lsyncd. De lo contrario, no habilite Lsyncd en el arranque y asegúrese de que MOTD contenga una línea para mostrar que Lsyncd está instalado y en uso. Por ejemplo:

Al reiniciar, siga los siguientes pasos:

rsync compruebe si se encuentra en una situación de "remoto/servidor":

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Inicie Lsyncd con:

systemctl start lsyncd.service

¿Necesita sincronizar varios directorios locales?

Para sincronizar más de un par de directorios, es posible agregar más sync declaraciones en el archivo de configuración:

[...]
sync{
default.rsync,
    source = "/path/source_1",
    target = "/path/target_1"
}

sync{
    default.rsync,
    source = "/path/source_2",
    target = "/path/target_2"
}
[...]

Sincronizar directorios remotos a través de SSH

Para realizar una sincronización remota mediante Lsyncd, el servidor de origen debe tener acceso SSH sin contraseña al servidor de destino. Esto se hace creando claves SSH en la fuente servidor.

Generar claves para acceso sin contraseña SSH

Utilice el siguiente comando en el servidor de origen para generar las claves:

ssh-keygen -t rsa

Se le pedirá que ingrese el archivo donde desea guardar la clave; a menos que tenga una configuración especial, déjelo vacío para usar la ubicación predeterminada. Después de esto, otro mensaje le pedirá una frase de contraseña; déjelo vacío ya que necesita un inicio de sesión completo sin contraseña.

Ahora que se generaron las claves, copie la clave en el destino servidor. Para copiarlo en authorized_keys archivo en el servidor de destino, use las siguientes instrucciones en el origen servidor donde se han generado las claves:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Para comprobar que se ha realizado la conexión sin contraseña, inicie sesión en el destino servidor desde la fuente uno:

ssh DESTINATION_SERVER_IP

Si puede iniciar sesión sin que se le solicite una contraseña, el proceso se ha realizado correctamente.

Ahora que ha iniciado sesión, cree un directorio en el host remoto que funcionará como la carpeta de destino y salga de la sesión SSH:

mkdir /path/remote_destination_dir
exit
exit

Editar el archivo de configuración

La estructura del archivo de configuración permanecerá como se explica en la sección para sincronizar directorios locales, pero se realizarán algunos cambios en el sync declaración:

  • El default.rsync la propiedad se cambiará a default.rsyncssh para habilitar rsync herramienta sobre SSH.
  • El target La propiedad se reemplazará con dos propiedades para especificar el destino remoto:host y targetdir .

El archivo de configuración se verá así:

[...]
settings = {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

servers = {
 "REMOTE_IP"
}
sourceList =
{
        "PATH_TO_FOLDER_TO_BE_SYNCED",
}
for _, source in ipairs( sourceList ) do
        for _, server in ipairs(servers) do

sync {
    default.rsyncssh,
    source = "/path/source_dir",
    host = "DESTINATION_SERVER_IP",
    targetdir = "/path/remote_destination_dir"
}
[...]

Una vez que se hayan realizado los cambios en el archivo de configuración, inicie el servicio como se explicó anteriormente:

systemctl start lsyncd

Si el servicio Lsyncd ya se está ejecutando, reinícielo:

sudo service lsyncd restart

ADVERTENCIA: Solo es seguro habilitar Lsyncd para que se inicie en el arranque si está seguro de que los directorios de destino nunca son cambiados por ningún otro Lsyncd. De lo contrario, no habilite Lsyncd en el arranque y asegúrese de que MOTD contenga una línea para mostrar que Lsyncd está instalado y en uso. Por ejemplo:

Al reiniciar, siga los siguientes pasos:

rsync comprueba si estás en una situación de "remoto/servidor"

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Iniciar Lsyncd con

systemctl start lsyncd.service

Excluyendo directorios de Lsyncd

A veces es necesario excluir algunas carpetas seleccionadas en un directorio específico. Los ejemplos incluyen:

  • Archivos multimedia montados en NFS.
  • Archivos de registro. Cuando se sincronizan, los archivos de registro crean una gran cantidad de conversaciones y uso de ancho de banda innecesarios. En algunos casos, esto puede causar retrasos significativos en la sincronización.
  • Archivos temporales utilizados por los procesos en ejecución.

Para excluir carpetas solo necesita poner la ruta relativa de la carpeta excluida. Por ejemplo:

  • /var/www es el directorio de destino que se sincroniza con los esclavos
  • /var/www/vhosts/www.example.com/wp-content/uploads es el directorio que está montado desde su servidor NFS, o que de otro modo no desea sincronizar.
  • Cree exclusiones en la configuración de lsyncd. Suponiendo que está utilizando Lsyncd 2.1.5 en CentOS 6, primero asegúrese de tener un archivo de exclusiones dentro de la configuración de Lsyncd como se muestra a continuación junto a la línea 'excludeFrom:
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

A continuación, excluya la ruta relativa al directorio de origen especificado para la sincronización. Dado que el directorio de destino es /var/www, y el directorio que queremos excluir es /var/www/vhosts/www.example.com/wp-content/uploads, nuestra entrada sería:

cat /etc/lsyncd-excludes.txt
vhosts/www.example.com/wp-content/uploads

PRECAUCIÓN:Asegúrese de que el archivo de exclusiones no tenga líneas vacías. Si es así, lsyncd trata esto como "excluir /" y luego todo se excluye.

Lsyncd en soluciones NFS

Lsyncd se usa comúnmente para replicar archivos en una arquitectura maestro-esclavo. Si bien esto funciona muy bien para manejar actualizaciones de contenido/código, para archivos multimedia o aportados por usuarios, a menudo es más fácil usar NFS para compartir una carpeta entre varios servidores web. Tenga mucho cuidado de excluir las carpetas compartidas a través de NFS de Lsyncd. En el peor de los casos, donde su servidor maestro se reinicia pero el recurso compartido NFS no se monta, esto podría resultar en que Lsyncd elimine el contenido de su recurso compartido NFS.

Hay un par de maneras de manejar esto.

Opción 1:Excluyendo directorios de Lsyncd

Para obtener más detalles, consulte la sección 'Exclusión de directorios de Lsyncd'

Rsync por defecto no funciona con los objetivos de los enlaces simbólicos. Podemos usar esto para proteger el contenido montado en NFS.

En lugar de:

/var/www <– carpeta raíz para la replicación de Lsyncd/uploads <– Punto de montaje compartido de NFS

Monte el recurso compartido NFS en una carpeta diferente, diga /nfsmount, luego haga lo siguiente (suponiendo que el contenido cargado ya se haya copiado en /nfsmount/uploads):

cd /var/www
rm -Rf uploads
ln -s /nfsmount/uploads uploads

Ahora su contenido montado en NFS está ubicado de forma segura fuera del árbol de directorios replicado por Lsyncd.

Opción 3:Establecer parámetros de rsync

Rsync admite una opción -x que le dice a rsync que no cruce los límites del sistema de archivos. Pero antes de continuar, hay varias notas que debe tener en cuenta antes de intentar esto:

  • Esto no funcionará con volúmenes de Cloud Block Storage, volúmenes LVM adicionales, etc.
  • Esto no funcionará si Lsyncd reside en el mismo servidor que el servidor NFS. Esta opción asume que tiene un servidor NFS dedicado
  • Esto solo funciona si la fuente es un sistema de archivos único

Para Lsyncd 2.0.x:agregue esta opción a las opciones que Lsyncd pasa a rsync editando la línea rsyncOpts en /etc/lsyncd.lua:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsyncOpts="-avzx"
}

Para Lsyncd 2.1.x:con Lsyncd 2.1.x, rsyncOpts se ha cambiado a rsync={opciones} con el uso de opciones con un nombre completo en lugar de solo una letra como antes. Agregue lo siguiente a /etc/lsyncd.conf:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsync={ one_file_system=true }
 }

Conclusiones

Usar Lsyncd para mantener sincronizadas las carpetas locales y remotas es una alternativa económica y eficiente y, gracias a las múltiples opciones disponibles para el archivo de configuración, se puede personalizar para satisfacer sus necesidades.

  • Uso de rsync para sincronizar archivos

Use la pestaña Comentarios para hacer cualquier comentario o hacer preguntas. También puede iniciar una conversación con nosotros.


Linux
  1. Cómo configurar la zona horaria y sincronizar la hora del servidor con NTP en Linux

  2. Cómo configurar túneles SSH

  3. Cómo instalar y configurar el servidor sftp en Ubuntu 20.04

  4. Cómo diferenciar directorios sobre ssh

  5. Cómo configurar ssh sin contraseña con claves RSA

Mantener los archivos y directorios de Linux sincronizados con rsync

Cómo usar el comando rsync para copiar datos localmente y a través de SSH

Cómo configurar la clave pública y privada SSH en Linux

Tunelización y proxy SSH

4 formas de transferir archivos entre sistemas remotos y locales a través de SSH

Cómo usar el montaje SSHFS con directorios remotos a través de SSH