0

Ubuntu 10.04 で MongoDB 2.2 を実行する 3 サーバーのレプリカセットがあり、最近、特定のデータベースが存在する各サーバーのハード ドライブをアップグレードする必要がありました。このデータベースには、Web サービス要求のログ情報が含まれており、現在のタイムスタンプを使用して 1 時間ごとのバケット内のコレクションに書き込み、名前を特定します (例: log_yyyymmddhh )

私はこのプロセスを実行しました:

  • mongodump --db log_dbを使用して、プライマリ サーバー上のデータベースをバックアップします。
  • セカンダリ サーバーをオフラインにし、ディスクを交換する
  • セカンダリ サーバーをスタンドアロン モードで起動します (つまり、サービスを開始する前に、/etc/mongodb.conf の replSet エントリをコメント アウトします)。
  • mongorestore --drop --db log_dbを使用してセカンダリ サーバーにデータベースを復元します。
  • セカンダリ サーバーをレプリカセットに追加してオンラインにし、レプリケーションがオフラインの間に更新/作成された 1 時間ごとのバケットに追いつくようにします。

バックアップ時に現在のバケットであったコレクションがレプリケーションによって最新のものにならなかったことを除いて、すべてが期待どおりに進んでいるように見えました。最新の状態にするには、そのコレクションを手動でコピーする必要がありました。バックアップに作成されたコレクションは問題なく同期されていることに注意してください。

MongoDB がその 1 つのコレクションの同期を取り戻せなかった原因は、このプロセスで何が欠けていたのでしょうか? 私は、oplogに関して何かがうまくいかなかったと思いますか?

編集1:

プライマリの oplog は、最初のタイムスタンプが数日さかのぼったことを示していたため、数時間 (セカンダリがオフラインだった時間) トランザクションを維持するための十分なスペースがあったはずです。

編集2:

MongoDB のインストールでは、/dev/sda1 と /dev/sdb1 の 2 つのディスク パーティションを使用します。プライマリ MongoDB ディレクトリ /var/lib/mongodb/ は /dev/sda1 にあり、いくつかのデータベースを保持しますが、ログ データベースは /dev/sdb1 に単独で存在します。/dev/sdb1 のディレクトリを指すシンボリックリンク/var/lib/mongodb/log_dbがあります。ログ データベースがいっぱいになったため、/dev/sdb1 のディスクをアップグレードする必要がありました。

4

2 に答える 2

0

これは oplog が十分に長くないことに関係していると思いますが、それを確認したようで、かなり大きく見えました。

それでも、新しいメンバーをレプリカ セットに追加するときは、スナップショットを作成して復元するべきではありません。単純に新しいメンバーを追加して、それ自体でレプリケーションを実行する方がよいでしょう。これは Mongo docs で説明されており、私が常に従ってきたプロセスです。

于 2014-07-02T22:33:12.400 に答える
0

--oplog オプションを指定して mongodump を使用する必要があります。コレクションを同時に更新しているレプリカセットで mongodump を使用してデータベースの完全バックアップを実行すると、一貫したバックアップが得られない場合があります。これは、データベースが大きくなり、コレクションが増え、更新/挿入/削除が頻繁に行われるほど悪化します。

MongoDBのバージョン(2.2)のドキュメントから(2.6でも同じですが、できるだけ正確にするためです):

--oplog

このオプションを使用して、mongodump が oplog を含むデータベースのダンプを作成し、mongod インスタンスの状態の特定時点のスナップショットを作成するようにします。特定のポイント イン タイム バックアップに復元するには、このオプションで作成された出力を mongorestore --oplogReplay と組み合わせて使用​​します。

--oplog を指定しないと、ダンプ操作中に書き込み操作が行われると、ダンプはその瞬間を反映しません。更新プロセス中にデータベースに加えられた変更は、バックアップの出力に影響を与える可能性があります。

http://docs.mongodb.org/v2.2/reference/mongodump/

これは、バックアップと復元に関するほとんどの MongoDB チュートリアルでは十分にカバーされていません。一般に、データベースが存在するストレージ ボリュームのライブ スナップショットを実行できる方がよいでしょう (ストレージ ソリューションに MongoDB と互換性のあるライブ スナップショット機能があると仮定します)。それができない場合、次の最善の策は、セカンダリをオフラインにしてから、データベース ファイルのスナップショットまたはバックアップを実行することです。ライブ データベースでの Mongodump は、パフォーマンスの問題により、大規模なデータベースでは最適なソリューションではなくなりつつあります。

MongoDB のバックアップ オプションの概要を必ず確認してください: http://docs.mongodb.org/manual/core/backups/

于 2014-07-03T00:24:54.093 に答える