SSH経由で1台のサーバーで多数のファイルを同期する

SSH経由で1台のサーバーで多数のファイルを同期する

サーバー間のログファイル同期プロセスを高速化する必要があります。

ログを生成するマシン(LOGMACHINE)は、次のようにツリーにログを生成します。

/Files
/Files/LOGS1/
/Files/LOGS1/logFiles/
/Files/LOGS1/logFiles/typeLog1A
/Files/LOGS1/logFiles/typeLog1B
/Files/LOGS1/logFiles/typeLog1C
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0900.xml.gz
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0915.xml.gz
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0930.xml.gz
/Files/LOGS1/logFiles/typeLog2A
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0900.xml.gz
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0915.xml.gz
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0930.xml.gz

/Files/LOGS2/
/Files/LOGS2/logFiles/
/Files/LOGS2/logFiles/typeLog1A
/Files/LOGS2/logFiles/typeLog1B
/Files/LOGS2/logFiles/typeLog1C
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0900.xml.gz
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0915.xml.gz
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0930.xml.gz
/Files/LOGS2/logFiles/typeLog2A
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0900.xml.gz
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0915.xml.gz
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0930.xml.gz

typeLog1*約4000個のフォルダと9000個のフォルダがあります。typeLog2*各フォルダには15分ごとに新しいファイルがあります。

2 台のサーバーがあり、SERV1 はフォルダを同期し、typeLog1*SERV2 はフォルダを同期し、typeLog2*両方とも LOGMACHINE で同期します。各サーバーは LOGS1 および LOGS2 フォルダーを同期します。

現在、このアプリを使用しており、rsyncLOGSフォルダの1つを取得するのに30分しかかかりません。これにより、ファイルあたり約30分〜1時間程度の遅延が発生します。

rsync複数を並列に実行するソリューションを考え出しました。残念ながら、並列sshに実行できるセッションは8つだけです。これは、ログが生成されるマシンの制限です。

限界:

  • 使用すべきssh
  • ログが生成されたコンピュータにソフトウェアをインストールできません。

rsyncこのプロセス、使用、または代替のスピードを上げる方法はありますか?

修正する:

現在rsyncs

  • SERV1から:

    rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/
    
    rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS2/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS2/logFiles/ Files/LOGS2/logFiles/
    
  • SERV2から:

    rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog2*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/
    
    rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS2/logFiles/; find . -mtime -1 -type f -name "*fileLog2*.xml.gz"') user@logmachine:/home/user/Files/LOGS2/logFiles/ Files/LOGS2/logFiles/
    

このフォルダには他のファイルもあるため、ファイル内のパターンを見つける条件が必要です。

答え1

tar.gzを使用してログを圧縮し、rsyncを使用してコピーし、コピープロセスのタイミングを確認します。

答え2

このコマンドを実行すると、rsync効率に影響を与える可能性があります。

rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/

gzタイプ2ログを複製する2番目のサーバーに対して適切に変更して、タイプ1圧縮ログに対してこのバリエーションを試すことをお勧めします。

rsync -av --rsync-path=/usr/local/bin/rsync --delete --prune-empty-dirs --include '*.gz' --include '*/' --exclude '*' user@logmachine:'Files/LOGS1/logFiles/typeLog1*/' Files/LOGS1/logFiles/

最新のファイルをコピーすると、次回の実行時にファイルの一部のみがコピー、更新、および置き換えられることがわかります。これは、ファイルlogmachineをすぐにターゲットディレクトリツリーに移動して他の場所に書き込んで圧縮しない限り、ファイルが完全に書き込まれたことを認識する方法がないためです。ただし、すでにこの問題があり、悪いのは、更新された--ignore-existingファイルがコピーされないためです。

ログが不要になったら、logmachine使用を慎重に検討してください。--remove-source-files

答え3

「二重圧縮」はCPUが消費され、転送速度が増加しないことを忘れないでください。

  • rsyncフラグを使用してすぐにデータを圧縮することは可能-zですが、「圧縮可能な」データ(さまざまなテキスト、一部のバイナリデータ)を転送する場合にのみ意味があります。
  • すでに圧縮されているデータ(gzファイルなど、MP3ファイル、JPGファイルなど)は、サイズ面ですでに圧縮/最適化されており、速度が向上せず、CPUのみが加熱されます。

関連情報