以下のシナリオではどのような rsync オプションを使用すればよいでしょうか?

以下のシナリオではどのような rsync オプションを使用すればよいでしょうか?

ご挨拶!!!

これは、私たちが達成しようとしている rsync に関する特定の要件に関するものです。さまざまな rsync オプションを使用してこれを実現しようとしました。ただし、rsync オプションごとに異なる問題が発生しています。

背景: • プロセス (AIX で実行) のログがあり、そのログは A.log (logs ディレクトリ内) に記録されます。 • A.log は 100 MB に達すると A.CURRENT_DATE_TIME.log にローテーションされ、新しい A.log が作成されます。 • これらのログは rsync を使用して集中サーバーに転送しています。完全な logs ディレクトリで rsync を使用しています。 • ソース サーバーと宛先サーバーのファイルの INODE は異なります。 • ログが集中サーバーに転送されると、集中サーバーからの入力を取得する集中ログ プロセスによってこれらのログが読み取られ、インデックス付けされるという考え方です。

問題: • A.log (宛先サーバー) は集中ログ プロセスへの入力として提供されますが、実際のファイル名ではなく、ファイルの INODE が考慮されます。 • そのため、A.log ファイルがロールオーバーされると、新しい A.log には、集中プロセスによって検出されない新しい INODE が含まれます。 これは、rsync で -u –r –t オプションを使用した場合に発生していました。 したがって、この場合、ファイルの INODE は、rsync が発生するたびに、またロールオーバーが発生するたびに変更されていました。 したがって、プロセスは、存在しない古い INODE を探すため、インデックス作成を停止します。

• アイデアは、rsync の実行時にファイルの INODE を変更せず、A.log が A.CURRENT_DATE_TIME.log にローテーションされるときにロールオーバー時に INODE を変更するオプションの組み合わせで rsync を使用することです。したがって、これを実現するために、–inplace オプションを含め、rsync 時の INODE を保持し、ファイルのローテーション時に INODE を変更できるようにしました。ただし、ファイル名が変更されず、常に A.log のままになるという別の問題が発生します。そのため、プロセスが A.log のインデックス作成を完了すると、停止します。

上記の要件を達成するのに役立つ何かを提案していただけるとありがたいです。

よろしくお願いいたします。 Puneet Sinha ミドルウェア管理者

答え1

inode に頼ることはお勧めしません。ファイルがソース マシンから宛先マシンに移動するたびに、inode は変更されます。ファイルがバックアップから復元された場合も、inode は変更されます。ログ処理システムが inode に依存している場合、バックアップから復元すると、システムは期待どおりに動作しなくなります。

A.log をコピーするのではなく、A.CURRENT_DATE_TIME.log のみをコピーすることをお勧めします。これにより、プロジェクトが簡素化されます。

宛先サーバーのログ処理システムは、inode を調べて、以前は A.log として認識されていたファイルが現在は A.CURRENT_DATE_TIME.log であるかどうかを判断しているのではないかと思います。これは信頼できるものではありません。

上記のソリューションには 1 つの問題があります。ログ ファイルの行が生成されてから、集中ログ プロセスによって処理されるまでの時間が長くなることです。たとえば、A.log が 100 MB に大きくなるまでに 3 日かかる場合、そのファイルからのデータは最大 3 日間集中ログ プロセスに入力されません。ログを 2 時間以上遅らせることができない場合は、1 時間ごとにログをローテーションします。そうすれば、2 時間の目標内に収まっていることがわかります。

関連情報