これはMongoDBの有効なバックアップ戦略ですか?


11

約10GBのMongoDBデータベースを備えた単一の専用サーバーがあります。毎日バックアップを行う必要がありますが、データベースを停止することはできません。単一のディスク(異なるポートで実行されているmongodの2つのインスタンス)でレプリカセットを使用し、セカンダリをオフラインにして、データファイルをS3(ジャーナリングがオンになっている)などのオフサイトストレージにバックアップすることは可能ですか?または、マスター/スレーブの使用はレプリカセットよりも優れているでしょうか?

これは実行可能ですか?その場合、どのような問題が発生する可能性がありますか?そうでない場合、これを機能させるにはどうすれば概念化できますか?

回答:


6

ReplicaSetはこのシナリオで機能します。ただし、同じサーバーに2つのMongoDBインスタンスを配置するのは良い考えかどうかわかりません。これは、サーバーのハードウェア/ソフトウェアと負荷に依存します。

必ず、あなたのようにするにはbackupMongoDBのノードがマスターになっていません、その設定priorityパラメータをする0など、

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

:ダウンタイムが発生しない場合、ReplicaSetに少なくとも2つのプライマリMongoDBノードが必要です(記事を参照)


2

考慮すべき1つの戦略は、レプリカセットのバックアップノードで「非表示」オプションを使用することです。MongoDBブログから:

非表示のサーバーはisMaster()の結果に表示されません。これは、ドライバーが読み取りをスレーブに自動的に配信する場合には使用されないことも意味します。非表示サーバーの優先度は0である必要があります(非表示のプライマリを持つことはできません)。非表示のメンバーを追加するには、次を実行します:

rs.add({"_ id":num、 "host":ホスト名、 "priority":0、 "hidden":true})


1

レプリカセットは一般的に好まれますが、この場合も、単に自動回復および自動再同期機能のために好まれます。あなたが説明しているバックアップ方法は完全に合理的であり、他のデータベースでも同様に使用されています。

私が見る唯一の潜在的な問題は、特定の状況下でセカンダリがプライマリに昇格する可能性があり、a)新しいセカンダリからバックアップを取得する必要があるか、b)バックアップスクリプトを十分にスマートにしてそのインスタンスを通知することですMongoDBは辞任します。

良いニュースは、それはかなり些細なことであるはずです

  1. バックアップソースを照会して、どのインスタンスがプライマリで、どのインスタンスがセカンダリであるかを見つけます(db.isMaster()
  2. バックアップインスタンスを説得して、rs.freeze()and rs.stepDown()コマンドを使用する、セカンダリに再接続します。

セカンダリがプライマリにならないように、Alexanderが提案するように優先度を0に設定するオプションではないでしょうか?
ジェームズシンプソン

いくつかのテストを行う必要がありますが、何らかの理由でプライマリプロセスがダウンした場合にセカンダリがスタンバイするかどうかはわかりません。私は常に私のセカンダリが引き継ぐことを望んでいた;)
チャールズフーパー

1
>>セカンダリをプライマリに昇格させることができます-前述のように、セカンダリを優先度0に設定すると、マスターに切り替えることができなくなります。
ジョーンズーム復活モニカ

ピアノードのリスト(任意のプライマリ、セカンダリ、アービター、または非表示ノード)からピアのいずれか1つに接続し、セカンダリが誰であるかをピアに確認し(rs.status()ループスルーresult["members"])、バックアップを実行するセカンダリ。
イフェルドブルム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.