多数のファイルに対するinotifyとrsync

多数のファイルに対するinotifyとrsync

私は inotify を使用してディレクトリを監視し、rsync を使用してサーバー間でファイルを同期しています。同期は完璧に機能し、メモリ使用量もほとんど問題になりません。しかし、最近、大量のファイル (350k) が追加されたため、特に CPU のパフォーマンスに影響が出ています。現在、rsync を実行すると、CPU 使用率が 90%/100% に急上昇し、rsync の完了に時間がかかり、監視/同期されているファイルは 650k あります。

rsync を高速化して、変更されたディレクトリのみを rsync する方法はありますか? または、別のディレクトリに複数の inotifywaits を設定する方法もあります。 使用されているスクリプトは以下のとおりです。

更新: --update フラグを追加しましたが、使用方法はほとんど変わっていないようです

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

答え1

結局、圧縮オプション(z)を削除し、WAITING変数を10(秒)に増やしました。これで効果があったようです。rsyncはCPU負荷を急上昇させますが、持続時間は短くなりました。Unix スタックエクスチェンジ

答え2

また、以下もご覧くださいlsyncdより多くのオプションがあります。Lua スクリプトを使用できるので、同時に使用する必要があるプロセスの数や、おそらくその他の興味深い事項を指定できます。

これも rsync と ionotify を使用します。

答え3

SSH 圧縮を無効にして、要求の少ない暗号化アルゴリズムを使用することも検討してください。例:

rsync -e "ssh -c arcfour -x -o 圧縮=no" ....

もう一つの対策は、SSHトンネルを明示的に設定することです。ただし、そのためにはRsyncデーモンを設定する必要があります。よくある質問あなたのケースにも使えるはずです。

関連情報