inotify y rsync en una gran cantidad de archivos

inotify y rsync en una gran cantidad de archivos

Estoy usando inotify para ver un directorio y sincronizar archivos entre servidores usando rsync. La sincronización funciona perfectamente y el uso de la memoria prácticamente no es un problema. Sin embargo, recientemente se agregó una gran cantidad de archivos (350k) y esto afectó el rendimiento, específicamente en la CPU. Ahora, cuando se ejecuta rsync, el uso de la CPU aumenta al 90%/100% y rsync tarda mucho en completarse, hay 650k archivos en observación/sincronización.

¿Hay alguna forma de acelerar rsync y solo rsync el directorio que se ha cambiado? O, alternativamente, configurar múltiples inotifywaits en directorios separados. El script que se utiliza se encuentra a continuación.

ACTUALIZACIÓN: Agregué el indicador --update y el uso parece prácticamente sin cambios

#! /bin/bash

EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"

inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' | (
WAITING="";
while true; do
    LINE="";
    read -t 1 LINE;
    if test -z "$LINE"; then
        if test ! -z "$WAITING"; then
                echo "CHANGE";
                WAITING="";
                rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
        fi;
    else
        WAITING=1;
    fi;
done)

Respuesta1

Terminé eliminando la opción de compresión (z) y aumentando la var de ESPERA a 10 (segundos). Esto parece haber ayudado, rsync todavía aumenta la carga de la CPU pero dura menos. El crédito va a una respuesta enintercambio de pila unix

Respuesta2

También podrías investigarlsyncdque tiene más opciones. Puede usar secuencias de comandos lua, para luego decir cuántos procesos simultáneos necesita usar y tal vez más cosas que puedan ser de interés.

Esto también usa rsync e ionotify.

Respuesta3

También puedes considerar desactivar la compresión SSH y utilizar un algoritmo de cifrado menos exigente, por ejemplo:

rsync -e "ssh -c arcfour -x -o Compresión=no" ....

Otra medida puede ser configurar explícitamente su túnel ssh. Sin embargo, necesitas configurar un demonio Rsync para ese propósito. Consulte el script de shell en nuestroPreguntas más frecuentes. También debería ser utilizable para su caso.

información relacionada