inotify und rsync bei einer großen Anzahl von Dateien

inotify und rsync bei einer großen Anzahl von Dateien

Ich verwende inotify, um ein Verzeichnis zu überwachen und Dateien zwischen Servern mit rsync zu synchronisieren. Die Synchronisierung funktioniert einwandfrei und die Speichernutzung ist meist kein Problem. Vor kurzem wurden jedoch viele Dateien hinzugefügt (350 KB), was sich auf die Leistung, insbesondere die CPU, ausgewirkt hat. Wenn rsync jetzt ausgeführt wird, steigt die CPU-Auslastung auf 90 %/100 % und rsync dauert lange, obwohl 650.000 Dateien überwacht/synchronisiert werden.

Gibt es eine Möglichkeit, rsync zu beschleunigen und nur das geänderte Verzeichnis zu synchronisieren? Oder alternativ mehrere inotifywaits in separaten Verzeichnissen einzurichten. Das verwendete Skript finden Sie weiter unten.

UPDATE: Ich habe das Flag --update hinzugefügt und die Verwendung scheint größtenteils unverändert

#! /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)

Antwort1

Ich habe die Komprimierungsoption (z) entfernt und die Variable WAITING auf 10 (Sekunden) erhöht. Das scheint geholfen zu haben, rsync erhöht die CPU-Last zwar immer noch, aber das hält nicht mehr so ​​lange an. Der Dank geht an eine Antwort aufUnix-Stack-Austausch

Antwort2

Sie können auch einen Blick auflsyncddas mehr Optionen bietet. Sie können Lua-Skripte verwenden und dann angeben, wie viele gleichzeitige Prozesse verwendet werden sollen und vielleicht noch weitere Dinge, die von Interesse sein könnten.

Dies verwendet auch rsync und ionotify.

Antwort3

Sie können auch die SSH-Komprimierung deaktivieren und einen weniger anspruchsvollen Verschlüsselungsalgorithmus verwenden, Beispiel:

rsync -e "ssh -c arcfour -x -o Komprimierung=nein" ….

Eine weitere Möglichkeit besteht darin, einen SSH-Tunnel explizit einzurichten. Dazu müssen Sie allerdings einen Rsync-Daemon einrichten. Schauen Sie sich das Shell-Skript auf unsererFAQ. Es sollte auch in Ihrem Fall verwendbar sein.

verwandte Informationen