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


8

1つのサーバーにファイルをアップロードし、他のサーバーにプッシュするなど、2つのサーバーをミラーリングすることが可能かどうか疑問に思っていました。ファイルミラーリングにもっと興味があります。パッケージ管理をミラーリングする必要がないため、セットアップ(しかし、それもクールです!)


ファイルのミラーリング:GlusterまたはDRDB; ウェブサイトのミラーリング:ワニスまたはHAProxy。DBミラーリング:MySQL循環レプリケーション、またはPostgresレプリケーション。; -ほとんどのサーバーパッケージにはクラスター操作モードがあり、それを可能にするリバースプロキシがあります。
トムO'Connor

回答:


6

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

なぜファイルミラーリングが必要なのですか。通常は定期的に更新してもよい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も使用します)を使用して、独自の小さな同期デーモンを作成することです。最後に重要なことですが、すべてのファイルがSFTPなどを介して1つのサーバーにアップロードされる場合、SFTPサーバーでファイルのアップロードなどの特定のイベントの後に呼び出されるフックを定義できるかどうかを確認できます。これにより、新しいデータがアップロードされるたびにサーバーに同期スクリプトをトリガーするように指示できます。

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


DRBDはよさそうだ。1つのサーバーが稼働している状態でこれを使用するのは悪いことですか?ライブサーバーにどのように影響しますか?
カイル

依存-ライブサーバーは何をしていますか?それはウェブサーバー、データベースサーバー、ファイルサーバーなどですか?DRBDは同期レプリケーションを行い、それに伴うすべての影響があります。シングルプライマリまたはデュアルプライマリのどちらに移行するかによって、特定のI / Oキャッシュ(およびファイルシステム)の制限が適用され、アプリケーションに影響を与えます。詳細については、DRBDユーザーガイドdrbd.org/users-guide-embを読むことをお勧めします。このガイドは非常によく書かれており、すべての影響を非常に詳しく説明しています。
Lukas Loesche

5

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

  1. アプリケーションでファイルを両方のサーバーにプッシュします。
  2. 非同期レプリケーション。たとえば、cronジョブで15分(またはそれ以下)ごとにrsync
  3. ファイルシステム(GlusterFSなど)またはブロックデバイスレベル(DRBDなど)での同期レプリケーション。ブロックデバイスレベルでレプリケーションを使用する場合、両方のサーバーから同時にファイルにr / wアクセスできるようにするには、分散ロックをサポートするファイルシステム(OCFS2GFS2など)が必要です。



1

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

Unisonはうまくいくかもしれませんが、個人的な経験はありません。

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

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


下記のループは、正しく設定されている場合、転送するファイルの変更日を維持するため、Rsyncには問題ありません。
Thingomy 2010年

0

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

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

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


0

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

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

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

シンプルで機能的


0

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


ここでclonezillaが適用できるかどうかはわかりませんが、それは素晴らしいユーティリティです。
HopelessN00b 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.