双方向rsyncによりコンテンツの振動が発生する

双方向rsyncによりコンテンツの振動が発生する

2 つのサーバー間でコンテンツを同期しようとしています。サーバーは同じバージョン(Ubuntu 12.04LTS)で、次のcronジョブを実行してコンテンツを同期します。

rsync -arzc --update --delete /htdocs/testing/www/cms_uploads/* [email protected]:/htdocs/testing/www/cms_uploads/

しかし、プロセスをテストすると、以下のように奇妙な結果が出ました。

最初のテスト

  • Node2にaaaa.jpgアップロード
  • ノード1に同期
  • ノード1から削除
  • Node1に再び表示されます。
  • ノード2から削除
  • Node1から削除

2回目のテスト

  • Node1にbbbb.pngをアップロード
  • ノード2に同期
  • ノード2から削除
  • Node2に再び現れる
  • ノード1から削除
  • Node1に再び表示されます。

私が望むのは、コンテンツが両方のサーバーで常にまったく同じであることを確認することです。私は何が間違っていましたか?

答え1

rsync双方向同期が設定されていません。特別な助け(変更されたコンピュータの同期など)と幸運がない限り、これを行うことはできません。

変化が頻繁に発生しないようにするには、幸運が必要です。次の同期が始まる前にNode1とNode2が変更された場合(両方のシステムで)、同期中にいくつかの変更が失われます。

また、見ることができますこれ

答え2

問題の説明にはいくつかの基本的な問題があります。サーバーが同期しており、aaaa.jpgノード 2 にファイルを生成するとします。次の同期では、ノード2から偽のファイルを削除する必要があります(ノード1には存在しないため削除する必要があります)、ファイルをノード1にコピーする必要があります(ファイルがノード1に存在しないため、新しく作成する必要がありますか?)

同期が実行される順序によって、各ケースで何が起こるかが決まります。多くの場合、これは所望の結果が得られないことが事実上保証される。さらに悪いことに、同期が並行して実行される場合(つまり、ホストの1つが別のホストで実行されている同期操作によってナビゲートされている間に自己同期操作によって更新される場合)、結果はややランダムに見えます。

Rsyncは基本的に一方向同期用に設計されています。 2つのrsyncジョブを実行し、双方向同期を期待することはできません。

調和双方向同期用に設計されたファイル同期装置です。これはあなたの仕事に最適なツールです。これを設定し、unison -auto remote.example.com://path/to/directory /path/to/directoryホストのいずれかで実行します。

どのツールを使用しても競合が発生する可能性があります。たとえば、同じファイルが2つの異なるコンピュータから2つの異なるバージョンに変わる場合があります。これらの競合を解決する自動化された良い方法はないので、手動介入が必要です。

ほとんどの設定では、正しいアプローチは、あるサーバーをアップロード場所として指定し、そのマスターサーバー上の他のすべてのサーバーを同期することです。誰かがスレーブにファイルをアップロードしている場合は、ローカルで何も変更せずにアップロードをマスターに渡すようにしてください。マスターサーバーのファイルが変更されるたびに、それをスレーブサーバーにプッシュします。

答え3

rsync には -u オプションがあります。
「これを行うと、rsyncがターゲットに存在するすべてのファイルをスキップし、ソースファイルよりも新しい修正時間があります(既存のターゲットファイルの変更時間がソースファイルの変更時間と同じ場合)。したがって、1)ユーザーが提供したコマンドと-uオプションから-cオプションを引いたコマンドと2)同じコマンドですが、反対方向に並べ替えることが
できるシェルスクリプトは2つあります。同期方式ですが、2つの問題があります。 1)リモートサーバーから削除された(または名前が変更された)ファイルはローカルにコピーされます。 b / c rsyncは新しいファイルをローカルで見つけたと見なします。 2)2つの場所で単一のファイルが変更された場合、同期は最新の変更のみを維持します。




関連情報