Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 次のステップ

MongoDB 7.1以降( 7.0.2以降でも利用可能 )、 6.0.11と5.0 。 22 )、 mongodumpを使用して、シャーディングされたクラスター上のデータをバックアップできます。

mongodumpは、データベース コンテンツのバイナリ エクスポート作成用ユーティリティです。 mongodumpユーティリティを使用して、シャーディングされたクラスターの自己管理型バックアップを取得できます。

mongodumpを使用してシャーディングされたクラスターをバックアップするには、バランサーを停止し、クラスター上のすべてのスキーマ変換操作を停止する必要があります。 そのため、バックアップ内の不整合が発生する可能性を減らすことができます。

MongoDB は、バランサーと実行中のトランザクションを次のサービスを通じて実行できるバックアップと復元操作を提供します。

このタスクはmongodumpを使用してシャーディングされたクラスターをバックアップします。 シャーディングされたコレクションにデータを含むクラスターが実行されていることを確認してください。

この手順には、 mongosからの fsync ロックをサポートするバージョンの MongoDB が必要です。

MongoDB 6.0.11以降 ( 5.0.22以降でも利用可能 ) fsync } コマンドとfsyncUnlockコマンドはmongos 1} で実行され、シャーディングされたクラスターのロックとロック解除を行います。

この手順を使用するには、MongoDB ユーザーにfsync認可が必要です。この認可は、カスタムロールまたは組み込みのhostManagerロールを使用して利用できます。

この認可では、 fsync } コマンドとfsyncUnlockコマンドを実行できます。

シャーディングされたクラスターの自己管理型バックアップを作成するには、次の手順を実行します。

1

バックアップを実行するのに適した時間を見つけるには、アプリケーションとデータベースの使用状況をモニターして、チャンクの移行、リシャーディング、スキーマ変換操作が発生し少ない時間を見つけます。

注意

これらの手順は、完全に実行され、開始時に操作が進行中でない場合にのみ、一貫性のあるバックアップを生成できます。

詳細については、「自己管理型シャーディングされたクラスターのスケジュール バックアップ ウィンドウ 」を参照してください。

2

チャンクの移行によってバックアップが中断されないようにするには、 mongosに接続し、 sh.stopBalancer()メソッドを使用してバランサーを停止します。

sh.stopBalancer()

バランシング ラウンドが進行中の場合、 操作はバランシングが完了するまで待機します。

バランサーが停止していることを確認するには、 sh.getBalancerState()メソッドを使用します。

use config
while( sh.isBalancerRunning().mode != "off" ) {
print( "Waiting for Balancer to stop..." );
sleep( 1000 );
}
3

シャーディングされたクラスターは、バックアップ処理中にデータベースを書込み (write) から保護するためにロックされたままである必要があります。これにより、バックアップで不整合が生じる可能性があります。

シャーディングされたクラスターをロックするには、 mongosに接続し、 db.fsyncLock()メソッドを使用します。

db.getSiblingDB("admin").fsyncLock()

ロックを確認するには、コンフィギュレーションサーバーのmongosとプライマリmongodで次の集計パイプラインを実行し、すべてのシャードがロックされていることを確認します。

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } }
] } }],
"unlocked": [
{ $match: { fsyncLock: { $exists: false } } }
]
} },
{ $project: {
"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
} }
] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
4

シャーディングされたクラスターをバックアップするには、 mongodumpを使用してmongosに接続し、バックアップを実行します。

mongodump \
--host mongos.example.net \
--port 27017 \
--username user \
--password "passwd" \
--out /opt/backups/example-cluster-1
5

バックアップが完了したら、クラスターのロックを解除して書き込みを再開できます。

クラスターのロックを解除するには、 db.fsyncUnlock()メソッドを使用します。

db.getSibling("admin").fsyncUnlock()

ロック解除を確認するには、コンフィギュレーションサーバーのmongosとプライマリmongodで次の集計パイプラインを実行し、すべてのシャードがロックされていることを確認します。

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { } },
{ $facet: {
"locked": [
{ $match: { $and: [
{ fsyncLock: { $exists: true } }
] } }],
"unlocked": [
{ $match: { fsyncLock: { $exists: false } } }
]
} },
{ $project: {
"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
} }
] )
[ { fsyncLocked: false }, { fsyncUnlocked: true } ]
6

バランサーを再起動するには、 sh.startBalancer()メソッドを使用します。

sh.startBalancer()

バランサーが実行中であることを確認するには、 sh.getBalancerState()メソッドを使用します。

sh.getBalancerState()
true

バランサーが実行中、このコマンドはtrueを返します。

を使用してmongodump mongorestoreバックアップからデータベースを復元できます。

重要

データベースを --nsExcludeシャーディングされたシャーディングされたクラスターに復元する場合は、config を に設定して データベースを除外する必要があります。

mongorestore --nsExclude='config.*' /data/backup

詳細については、「 MongoDB ツールを使用した自己管理型配置のバックアップと復元 」を参照してください。

戻る

スナップショットの使用