多数のファイルのinotifyとrsync

多数のファイルのinotifyとrsync

私はinotifyを使用してディレクトリを監視し、rsyncを使用してサーバー間でファイルを同期しています。同期は完全に機能し、メモリ使用量は基本的に問題ではありません。ただし、最近では大量のファイル(350k)が追加され、パフォーマンス、特にCPUパフォーマンスに影響を与えます。 rsyncが実行されると、CPU使用率は90%/ 100%になり、650,000個のファイルが監視/同期され、rsyncを完了するのに長い時間がかかります。

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

更新:--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

サーバーのプロセッサが遅い場合は、チェックサムと圧縮にrsyncを使用しないでください。 rsyncコマンドからht "-z"オプションを削除します。

rsync --update -alvr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/

650kファイルを比較するためにrsyncを避けないことに注意してください。 /var/www のサブディレクトリを 1 つずつ再同期することで、一度に確認されるファイルの数を減らすことができます。

答え2

回答を投稿していただきありがとうございます。本当に役に立ちました。ループを単純化できると思います。

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

sync() {
  rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/

}
watch() {
  inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' 
}


watch | (
while true ; do
  read -t 1 LINE && sync
done
)

少し変更する必要があるかもしれませんが、ポイントは明確でなければなりません。私はAmazonのAWS s3同期バリアントを使用しているので、rsyncコマンドを誤って置き換えた可能性があります。

答え3

このツールを確認できます物事を同期

Dockerizedバージョンを使用していますこの倉庫

このツールを使用して同期するファイルが411,000個あり、アラビア語で名前が付けられたファイルのファイル名のエンコードに問題があります。

#!/bin/bash
docker run -d --rm \
  --name=syncthing \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Jordan \
  -e UMASK_SET=022 \
  -p 8384:8384 \
  -p 22000:22000 \
  -p 21027:21027/udp \
  -v "$(pwd)/config:/config" \
  -v "path_to_sync:/config/Sync" \
  --net host \
  linuxserver/syncthing

注:設定にはGUIを使用してください。

関連情報