2012-03-22 8 views
1

私はロードバランシングサーバが2台あり、それぞれPHPベースのさまざまなウェブサイトと同じコピーを実行しています。負荷分散サーバ間でWebディレクトリを同期

管理者ユーザー(または複数の管理者ユーザー)がサイトにアクセスすると、コンテンツを変更したい場合など、サーバーの1つまたは他のサーバーにヒットする可能性があります。画像をアップロードする、メディアライブラリからファイルを削除するなど

これらの操作は、一方または他方または両方のサーバーが互いに同期しなくなり、回線に戻す必要があることを意味します。

現在、私はこのために--deleteオプションを使ってrsyncを見ていますが、削除されているファイルとサーバ間で新しいファイルが作成されていることにどう反応するのかは分かりません。

つまり、サーバーAのファイルとサーバーBのrsyncを削除すると、ファイルはサーバーBからも削除されます(Aには存在しなくなるため)。ただし、ファイルをサーバーBに個別にアップロードすると同期を実行する前にサーバーAからファイルを削除すると、サーバーBにアップロードされたファイルもサーバーAに存在しないため削除されますか?

ウェブ上のチュートリアルの多くは、サーバーBがサーバーAのミラーであり、このプロセスは正常に機能するマスター/スレーブタイプのシナリオを処理しますが、私の状況では両方のサーバーが効果的にマスターをミラーリングします。

私はこれが本当にそうである場合、または rsyncは優雅に、この問題に対処することはできますがわからないことがあり、それはで、そのように扱うのファイルのローカル履歴を保持考えるそれはこれだけに頼るのは危険だ場合?

この問題を処理するには、より良い方法がありますか?

+0

次のシナリオがあるとします。サーバーAにファイル{A、B}があり、サーバーBにファイル{B、C}があります。サーバーAで同期を実行すると、ファイルAを削除するかサーバーBに送信する必要があるかどうかをどのように知ることができますか?天気をどうやって判断するのですか?ファイルAはサーバーAに追加されたばかりか、サーバーBで削除されたばかりですか? – aglassman

答えて

3

以前の回答に満足できませんでした。あまりにも多くの人がこれを行う方法を発明したに違いないと思う。

ありそうです!チェックアウト:UnisonそれとすべてのためのGUIがあります。

+0

私はあなたの反応を見る前にrsyncからunisonに移りました。それは確かに私たちが必要としていることを確かにしています。 – CoderChris

0

最初に双方向rsyncを実行している場合(つまり最初に一方を実行してから他方を実行する場合)、--updateを使用する必要があり、両方のサーバのクロックを正確に調整する必要があります。両方のサーバーが同じファイルに書き込むと、最後の書き込みが優先され、先の書き込みは失われます。

第2に、私はあなたとは思わない使用を削除します。とにかく直接ではありません。 rsyncが保持する唯一の状態は、ファイルシステム自体の状態です。もしそれが動いているとすれば、混乱するでしょう。

ファイルを削除すると、名前をファイルに書き込むことをお勧めします。次にの代わりにを使用する場合は、手動で、たとえばcat deleted-files | ssh serverb xargs rm -vを使用してください。

だから、あなたのプロセスは、このようなものになります。もちろん

ServerA: 
rsync -a --update mydir serverB:mydir 
cat deleted-files | ssh serverB xargs rm -v 

ServerB: 
rsync -a --update mydir serverA:mydir 
cat deleted-files | ssh serverA xargs rm -v 

を、2つの同期が同時に実行することはできません、と私は他の重要なrsyncのオプションをオフに残してきた:あなたはおそらくしたいです--delay-updates,--partial-dirなどと考えてください。

関連する問題