web-dev-qa-db-ja.com

Ubuntuで2つのサーバーをミラーリングする方法はありますか?

1つのサーバーにファイルをアップロードしたり、他のサーバーにプッシュしたりできるように、2つのサーバーをミラーリングできるかどうか疑問に思っていました。セットアップ(しかし、それもクールです!)

8
Kyle

それは当面の仕事に大きく依存します。

なぜファイルミラーリングが必要なのですか。通常は定期的に更新してもよいWebサイトやコンテンツリポジトリなどを更新しますか?または、データのリアルタイム同期が必要ですか?

ファイルの定期的な非同期ミラーリングでは、通常、すべてのデータをアップロードするステージング領域があれば十分です。そして、それをサーバーに配布する場所から。あなたの場合-2つのサーバーで-データを(FTP、NFS、DAV、SFTPなどを介して)転送する場所にsrv1にステージングファイル共有を作成し、cronjobにファイルを「ライブ」ディレクトリにrsyncさせることができます。 srv1およびsrv2。その場合にrsyncを使用する最も簡単な方法は、データ転送に使用し、クラスター内のすべてのサーバーで承認されるsshキーペアを生成することです。

例:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

これはあなたに基本的な考えを与えるはずです。もちろん、一部のスクリプトでrsync呼び出しをラップし、同期に5分以上かかる場合に2回実行されないように適切なロックを実装する必要があります。また、ステージング領域は必須ではありません。 srv1:productionをsrv2:productionに直接同期することもできます。 srv2がsrv1のデータより最大5分古いデータを表示する可能性があるだけではありません。 2つのバランスを取る方法によっては、どちらが問題になるかもしれません。

ファイルを非同期で配布する別の方法は、rpmまたはあなたの場合はdebファイルとしてそれらをパッケージ化することです。これらを中央リポジトリに配置し、cfengine、monkey、またはdiyメッセージバスベースのソリューションなどを介してインストール/更新します。これには、デプロイされたデータのバージョン管理のいい副作用がありますが、自分で作成してデプロイする少量のデータ(独自のソフトウェアのバージョンなど)にのみ適しています。これを使用してTBのデータを配布する必要はありません。また、1分おきなどの高頻度で変化するコンテンツをミラーリングするのにも適していません。

Cronを毎回呼び出す代わりに、ほぼリアルタイムでデータを複製する必要があるが必ずしも同期ではない場合は、前述のincronのようなinotifyベースのメソッドを使用して同期スクリプトを呼び出すことができます。もう1つの可能性は、Gamin(カーネルに存在する場合はinotifyも使用します)を使用して、独自の小さな同期デーモンを作成することです。最後に、すべてのファイルが1つのサーバーにアップロードされた場合、たとえば、 SFTPでは、SFTPサーバーでファイルのアップロードなどの特定のイベントの後に呼び出されるフックを定義できるかどうかを確認できます。これにより、新しいデータがアップロードされるたびにサーバーに同期スクリプトをトリガーするように指示できます。

データのリアルタイム同期ミラーリングが必要な場合は、クラスターファイルシステムが適切な場合があります。 DRDBはすでに名前が付けられています。これは、ブロックレベルでのレプリケーションに非常に適しており、高可用性のMySQLセットアップでよく使用されます。 GFS2、OCFS2、Luster、GlusterFSもご覧ください。ただし、LustreとGlusterFSは、2つのサーバーのセットアップにはあまり適していません。

6
Lukas Loesche

基本的に、3つの可能性があります。

  1. アプリケーションでファイルを両方のサーバーにプッシュします。
  2. 非同期複製、e。 g。 cronジョブで15分(またはそれ以下)ごとにrsync
  3. ファイルシステムでの同期レプリケーション(例: GlusterFS )またはブロックデバイスレベル(例: [〜#〜] drbd [〜#〜] )。ブロックデバイスレベルでレプリケーションを使用する場合、ファイルへのr/wアクセスを許可するには、分散ロックをサポートするファイルシステムが必要です(例: OCFS2 または GFS2 ))。両方のサーバーから同時に。
5
joschi
2
Chris S

特定のユースケースに応じて-DRBDに類似したものを使用できます http://www.drbd.org/

1
Keiran Holloway

ここでバックアップソリューションを構築しようとしている場合(私は個人的にほぼ同じ設定で行っています)は慎重に行ってください。 (おそらく)最大の付随的削除の1つである、バックアップする必要のあるさまざまな問題が数多くあります。どのライブレプリケーションシステムも削除を複製するだけであり、安全性は保証されません。この毎日のレプリケーションは機能しますが、かなり弱い答えです。 RSnapshotを試してください。

Unisonはあなたのために働くかもしれませんが、私には個人的な経験はありません。

適切なフラグを使用して双方向でRsyncを実行することはできますが、削除されたファイルを処理する方法にはかなり注意が必要な問題があり、特別な操作は必要ありません。ファイルを復元するだけです。そうでなければ貧しい。ファイルが移動された場合にも奇妙なことを行います。

あなたが何をしていても、ファイルを両端で同時に編集できる状況が発生する場合は、問題があります。 unisonは、私が知っている唯一の解決策であり、これを問題なく処理することができます。

1
Thingomy

clonezillaは、rsyncを使用するものも見ることができます

0
dream_liner2k2

それはあなたのニーズに依存します...私はクラスター化されたウェブサーバーのための非常に「安くて簡単な」設定をしています。

私は1つの「ファイルサーバー」(NFS)を持っているだけで、すべてのWebサーバーが次のディレクトリをマウントします。

/etc/Apache/sites-enabled
/etc/Apache2/sites-avaliable
/var/www

シンプルで機能的

0
bmaeser

一方向の場合(つまり、常に1つのサーバーから他の1つのサーバーへ、ただしその逆ではない)、incronを使用できます。これはcronに似ていますが、ファイルシステムイベントに基づいています。

ファイルが作成または変更されるたびに、他のサーバーに対してscpまたはrsyncがトリガーされます。

双方向にはループの問題があります:)。

0
chmeee