2012-02-29 21 views
13

ダウンタイムなしでバックアップを実行するためのMongoDBのさまざまな設定について読んでいます。どの戦略が最良か、それとも比較することができますか?MongoDbホットバックアップ - data/db VSレプリカセットをfsyncLockでコピー

  1. ジャーナリングを有効にして、単に/data/dbディレクトリをコピー - これは十分であるかどうかは私には不明である - MongoDBのホームページにそれはあなたが「それをスナップショット」する必要があり、それは例として、SANとLVM上で動作することを述べて。

    質問:

    は、スナップショットは、このコンテキストでは何を意味するのでしょうスナップショットとしてコピーコマンド数? NTFSを使用してWindowsサーバにMongoDB(2.0+)のジャーナリングデータディレクトリをコピーするのは不要ですか?あなた自身のファイルシステムとセットアップで安全に実行することを、どのように保証しますか?

  2. 2台のサーバーとアービターでレプリカセットを確立します。次に、rs.status()fsyncLock/unlockを使用して、バックアップ中にセカンダリサーバーでのみデータが読み取れるようにします。

    > db.fsyncLock 
    function() { 
        return db.adminCommand({fsync:1, lock:true}); 
    } 
    > db.fsyncUnlock 
    function() { 
        return db.getSiblingDB("admin").$cmd.sys.unlock.findOne(); 
    } 
    

    質問:

    あなたはレプリカでロックを使用する場合は、書き込み、読み込みが全体のレプリカセットのためにロックすることができ、this bugが固定されていないようだし?

    バックアップが進行中にセカンダリがプライマリとして投票されるとどうなりますか?バックアッププロセスが停止するか、レプリカセットがロック解除されるまで書き込み要求に応答しなくなりますか?

    考慮事項:

    今の私はシンプルなソリューションを好きで、単にジャーナルファイルをdata/dbディレクトリをコピーして、レプリカセットで待機していました。 MongoDBは、64ビットWindowsサーバー(RackSpace Cloud)上で動作します。

答えて

12

最善の策は、その後、第二にはfsync +ロックを行うディスクまたはボリュームレベルでのボリュームのスナップショットを作成することである(例えばLVM2、Hyper-Vの、のbtrfs使用して)、その後、スナップショットを作成、コピー、データベースのロックを解除しますデータファイル。これによりセカンダリのダウンタイムが最小限に抑えられ、復元が容易になります。

このコンテキストでは、「Snapshotting」は、一部のボリュームマネージャ、ファイルシステム、およびハイパーバイザーによって提供されるスナップショット機能を指します。基本的に、これはブロックデバイス用の「コピーオンライト」機能です.OSが要求したときにデータを上書きするのではなく、新しいデータを別の場所に書き込んで古いバージョンと新しいバージョンの両方を読み込み可能にします。スナップショット作成にはほとんど時間がかかりませんが、一部のシステムでは、同じファイルのスナップショットを数多く保存することは悪い考えです。将来の書き込みを劇的に遅くする可能性があるからです。

私はこれがフルバックアップための最善の戦略であると信じて理由:

  1. mongodumpを使用するには、インデックスが復元されますインデックスデータを格納しませんが、回復のために、インデックスを再構築する時間を取ることができます誰もがあなたに叫んでいるときに必要な最後の作業は、時間がかかり、加速することができない操作です。

  2. Fsync + lockは書き込みをブロックし、読み取り者をブロックする可能性があります。したがって、プライマリではなく、(パッシブ)セカンダリで行うことをお勧めします。

  3. oplogは、セカンダリを停止するとロックタイムをできるだけ短くする必要があります。ロック中にすべてのデータファイル(数時間かかる可能性があります)をコピーするのではなく、スナップショットを実行するだけで数秒かかります。したがって、オープロ限界は懸念事項ではありません。

  4. 実際のコピーがで実行されている間、すべてが「正常に戻っています」という安心感があります。唯一の違いは、バックアップ中にセカンダリの負荷が大きくなることです。これは大きな問題ではありません。

アドレッシングご質問:

  • レプリカセット内のロックについて:短いロック時間を維持し、(選出することはできませんマスター)パッシブ二次ので、ライターキューすることができます」を使用ストール。バックアップシステムが受動的である場合に発生することができない「バックアップの進行中に、セカンダリがプライマリとしてで投票された場合にどのような」

今の私は簡単な解決策をご希望の

  • とジャーナルファイルでdata/dbディレクトリをコピーし、レプリカセットで待機してください。 MongoDBは、64ビットのWindowsサーバー(RackSpace Cloud)上で動作します。

  • これは可能です。ボリュームスナップショットはおそらく最善の方法であり、わずか数秒のダウンタイムを与えます。データが小さい場合は、単純なmongodumpがさらに簡単かもしれませんが、復旧時間が許容範囲内であることを確認してください(インデックスによって異なります)。

    関連する問題