8

クライアント データベースから中央データベースにデータをプッシュする何らかの方法が必要です。基本的に、リモート マシン [クライアント] で実行されている MongoDB のインスタンスがいくつかあり、クライアントで新しく追加および変更されたドキュメントで中央の mongo データベースを定期的に更新する何らかの方法が必要です。そのレコードを単一の中央サーバーに複製する

例えば:

3 台のマシンで 3 つの mongo インスタンスを実行し、それぞれに 10 GB のデータがある場合、データ移行後、4 台目のマシンの mongoDB には 30 GB のデータが必要です。また、中央の mongoDB マシンは、これら 3 台のマシンすべてのデータで定期的に更新する必要があります。しかし、これら 3 台のマシンは新しいドキュメントを取得するだけでなく、それらの既存のドキュメントが更新される可能性があります。中央の mongoDB マシンにもこれらの更新を取得してもらいたいです。

4

2 に答える 2

6

希望するレプリケーション戦略は、MongoDBによって正式にサポートされていません。

MongoDBレプリカセットは、同じレプリカセット内の1つ以上のセカンダリサーバーへの非同期レプリケーションを備えた単一のプライマリで構成されます。複数のプライマリを含むレプリカセットを構成したり、別のレプリカセットに複製したりすることはできません。

ただし、中央サーバーをどれだけ積極的に最新の状態に保ちたいか、および管理する必要のあるデータ/更新の量に応じて、ユースケースにいくつかの可能なアプローチがあります。

いくつかの一般的な警告:

  • 複数のスタンドアロンサーバーからのデータをマージすると、予期しない競合が発生する可能性があります。たとえば、一意のインデックスは、他のサーバーで作成されたドキュメントを認識しません。

  • _id理想的には、統合するデータは、オリジンサーバーごとに一意のデータベース名で区切られるため、同じ名前空間を持ち、異なるオリジンサーバーで共有される異種のドキュメント間で奇妙なクロストークが発生することはありません。

アプローチ#1:使用mongodumpしてmongorestore

コンテンツを中央サーバーに定期的に同期する必要がある場合、そのための1つの方法は、とを使用することmongodumpですmongorestoremongodump各スタンドアロンインスタンスから定期的にスケジュールを設定し、mongorestoreそれらを使用して中央サーバーにインポートできます。

警告:

  • 元の名前とは異なるデータベースに復元できるようにするための--dbパラメーターがあります(必要な場合)mongorestore

  • mongorestore既存のデータベースへの挿入のみを実行します(つまり、更新やアップサートは実行しません)。同じものを持つ既存のデータが_idターゲットデータベースにすでに存在する場合、mongorestoreはそれを置き換えません。

  • mongodumpエクスポートするデータをより選択的にするなどのオプションを使用できます--query(たとえば、すべてではなく最近のデータのみを選択します)

  • 実行ごとにダンプおよび復元するデータの量を制限する場合(たとえば、「変更された」データのみをエクスポートする場合)、中央サーバーで更新と削除を処理する方法を検討する必要があります。

警告を考えると、このアプローチの最も簡単な使用法は、mongorestore --dropすべての変更が確実にコピーされるように、完全なダンプと復元を実行することです(つまり、を使用します)。

アプローチ#2:MongoDBで調整可能なカーソルを使用しますoplog

よりリアルタイムまたはインクリメンタルレプリケーションが必要な場合、考えられるアプローチは、MongoDBレプリケーションに調整可能なカーソルを作成することoplogです。

このアプローチは、基本的に「独自のレプリケーションをロールする」ことです。各MongoDBインスタンスでoplogを調整し、中央サーバーに保存する対象の変更を探すアプリケーションを作成する必要があります。たとえば、選択した名前空間(データベースまたはコレクション)の変更のみを複製したい場合があります。

興味深い可能性のある関連ツールは、10genラボの実験的なMongoコネクタです。これは、レプリケーションを調整するためのインターフェースを提供するPythonモジュールですoplog

警告:

  • このために独自のコードを実装し、oplogドキュメントの操作方法を学習/理解する必要があります

  • 「箱から出して」希望のレプリケーションモデルをより適切にサポートする代替製品があるかもしれません。

于 2013-01-03T07:16:44.860 に答える
0

レプリケーションを実行するためのレプリカセットしかないことに注意してください。レプリカセットとは、常に1つのプライマリ、複数のセカンダリを意味します。書き込みは常にプライマリサーバーに送信されます。どうやら、MongoDBでサポートされていないマルチマスターレプリケーションが必要なようです。そのため、CouchDBやCouchBaseなどの別のテクノロジーを調べたいと思います。MongoDBはここでバレルバーストです。

于 2012-12-14T15:46:47.940 に答える