2つの離れたLinuxサーバー間での大きなファイルツリーの双方向のリアルタイム同期


21

大きなファイルツリーとは、約20万ファイルを意味し、常に成長しています。しかし、比較的少数のファイルが任意の1時間で変更されています。

双方向とは、どちらかのサーバーで変更が発生し、他方にプッシュする必要がある可能性があることを意味するため、rsyncは適切ではないようです。

遠いということは、サーバーは両方ともデータセンターにありますが、地理的には互いに離れているということです。現在、サーバーは2つしかありませんが、時間が経つにつれて拡大する可能性があります。

リアルタイムでは、同期の間に少しの遅延があっても問題ありませんが、1分ごとに1時間でファイルのごく一部が変更される可能性があるため、1〜2分ごとにcronを実行することは適切ではないようです。

編集:これはVPS上で実行されているので、できるカーネルレベルのものの種類に制限されるかもしれません。また、VPSはリソースが豊富ではないため、大量のRAMを必要とするソリューション(Glusterなど)を避けます。

これを達成するための最良の/最も「受け入れられた」アプローチは何ですか?これは一般的な必要性のように思えますが、一般的に受け入れられているアプローチをまだ見つけることができませんでした。これは驚くべきことでした。(私は大衆の安全を求めています。:)

ファイルシステムの変更レベルで同期をトリガーするためにlsyncdに出会いました。それは非常に一般的ではありませんが賢いようで、さまざまなlsyncdアプローチに少し混乱しています。rsyncでlsyncdを使用しているだけですが、rsyncにはメモリの概念がないため(たとえば、Aで削除されたファイルをBで削除する必要があるか、Bで新しいファイルであるかを知るため)それをA)にコピーする必要があります。 lipsyncは単なるlsyncd + rsyncの実装のようです。

次に、次のようにcsync2でlsyncdを使用していますhttps : //icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ...このアプローチに傾いていますが、 csync2は少し風変わりですが、テストは成功しましたが。私は、この方法についてコミュニティで多くの確認を見つけることができなかったことを主に心配しています。

ここの人々はユニゾンをとても気に入っているように見えますが、もはや活発に開発されていないようで、lsyncdのような自動トリガーを持っているかどうかは明らかではありません。

Glusterが言及しているのを見たことがありますが、必要なものが多すぎるかもしれません。

更新: fyi-私が言及した元のソリューションであるlsyncd + csync2に行きました。それは非常にうまく機能しているようであり、サーバーを非常に緩やかに結合させるアーキテクチャーのアプローチが好きです。


どのような変更を処理する必要がありますか?EGの作成、削除、変更。
sciurus

また、競合は予想されますか?両方のサーバーで同じファイルを変更できますか?
-sciurus

すべての変更:作成、削除、変更。競合の可能性はありますが、まれに発生するはずです。手動で解決する必要がある競合に関するアラートを単に受信しても構いません。
11

回答:


5

プロキシを使用したデュアルプライマリモードのDRBDはオプションです。


プロキシはオープンソースでも無料でもないようです。プロキシを非同期モードにしないことの結果を理解していない:長時間のダウンタイム中にプロキシがない場合、[small?]出力バッファがいっぱいになり、同期が失われる可能性があります。それから回復するのは難しいですか?
11

上記の私の答えをご覧ください。プロキシはあなたが必要とするものではないと思います。わずかなダウンタイム中であっても、drbd-meta-deviceは「ダーティ」ブロックをマークし、接続が再びアップした後にそれらを転送します。プロキシモードと非同期モードの主な違いは、非同期モードがいくつかのMBの最大バッファーを使用することだと思います。その後、バッファを再び満たす前に同期します。プロキシは、より大きなバッファを適切に許可します(遅延が大きい場合や、リモートよりもローカルではるかに高速に書き込むことができる場合に必要です)。
ニルス

2

同期するのではなく、同じファイルシステムをNFSで共有してみませんか?


2
NFSはひどい、ただひどいです。NFSよりも良いものがあるだろう
-AliGibbs

2
マルチサーバーセットアップの主なポイントの1つは、フェールオーバー/冗長性です。そのため、1つのサーバーが他のサーバーなしで続行できる必要があります。
-dlo

あなたはその質問でそれを言及すべきだった-完全に合理的な答えに投票する必要はない!
バートB

fyi私はそれを支持しませんでした-他の誰かがしました。しかし、はい、そもそもそれについて言及すべきでした。
dlo

@Bart:まあ-彼は、2つの離れたサイトに同時アクセスがあることを言及しました。そのため、一方がNFSアクセス中に遅延に悩まされるため、HA-NFSを設置しても、それは悪いソリューションになります。そして、私もダウン票しませんでした。しかし、AliGibbsをサポートするのに十分な長さのNFS管理者でした。:-/
Nils

2

分散ファイルシステムを実装することは、特にサーバーのクラスターが成長する場合、ツールやスクリプトを使用してこれをハッキングするよりもおそらく優れています。また、ダウンしたノードをより適切に処理できるようになります。

Gluster(またはAFS)が過剰すぎるとは思わない。


Glusterには1GBのRAMが必要ですか?gluster.com/community/documentation/index.php/… ...私もVPSを使用しているので、AFSが必要とするかもしれないカーネルレベルの変更を行うかどうかはわかりません。しかし、適切な分散fsがより良いパスであることがわかり始めています。
11

ええ、VPSホストを使用していることを以前に把握できませんでした。サーバーとクライアントの両方のGlusterメモリフットプリントは小さくなく、大幅に増加する可能性があります。DRBDの方が適切です。

AFSがその道です。
アンソニージョルジオ

2

あなたの場合、デュアルプライマリモードのDRBDとgfsまたはocfsの組み合わせをお勧めします。

デュアルプライマリのDRBDの欠点は、同期モードで実行されることです。ただし、書き込み速度はここでは重要ではないようです。

DRBDの代わりに、多くの(2+)iSCSIターゲットを使用するSoft-Raid1がありますが、2つのノードを持つDRBDを好むでしょう。


1
同期モードは悪いでしょう。私はそれを必要としませんし、大陸を越えてWANを介してサーバーが接続されているので、パフォーマンスを損ないたくありません。しかし、非同期モードでデュアルプライマリを使用することはできませんか?
11

現在DRBD 8.3.5を使用しています-デュアルプライマリモードを使用するには、同期モード(「C」)である必要があります。私はDRBDプロキシに関する個人的な経験はありませんが、Veritas Volume Replicatorに似ているようです-しかし、これは両側で書き込みアクセスが必要なため、適切ではありません。ブロックレベルの同期モードは、思ったほど悪くないかもしれません-おそらくgfsやocfsは書き込みをバッファリングできます。
ニルス

GFS2とOCFS2を比較したドイツの記事をチェックしました。それから、少なくともOCFS2はバッファリングされたファイルシステムアクセスをサポートしているようです。GFS2は古いため、この記事で推奨されています。GFS2の詳細については、GFS2のRedHatのドキュメントを参照してください-バッファリングも使用しますが、最高のパフォーマンスを得るには、同時書き込みに異なるディレクトリを使用する必要があります。
ニルス

0

上記で示したように、多くのソリューションが利用可能であり、それぞれに利点と欠点があります。

ツリー全体をバージョン管理(たとえばSubversion)の下に置き、cronジョブで両方のサーバーから定期的にチェックイン/更新することを検討すると思います。


0

同じことに関する探求をやや終えたところで、私はグルースターを使います。ただし、パフォーマンステストはまだ行っていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.