サーバー間のログファイル同期プロセスを高速化する必要があります。
ログを生成するマシン(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 フォルダーを同期します。
現在、このアプリを使用しており、rsync
LOGSフォルダの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のみが加熱されます。