データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ
MongoDB7.1 以降(7.0.2 6.0.11、 、 以降でも利用可能5.0 22)、mongodump
を使用してシャーディングされたクラスター上のデータをバックアップできます。
このタスクについて
mongodump
は、データベース コンテンツのバイナリ エクスポート作成用ユーティリティです。 mongodump
ユーティリティを使用して、シャーディングされたクラスターの自己管理型バックアップを取得できます。
mongodump
を使用してシャーディングされたクラスターをバックアップするには、バランサーを停止し、クラスター上のすべてのスキーマ変換操作を停止する必要があります。 そのため、バックアップ内の不整合が発生する可能性を減らすことができます。
MongoDB は、バランサーと実行中のトランザクションを次のサービスを通じて実行できるバックアップと復元操作を提供します。
始める前に
このタスクはmongodump
を使用してシャーディングされたクラスターをバックアップします。 シャーディングされたコレクションにデータを含むクラスターが実行されていることを確認してください。
バージョンの互換性
この手順には、 mongos
からの fsync ロックをサポートするバージョンの MongoDB が必要です。
MongoDB 5.0.22以降では、 fsync
} コマンドとfsyncUnlock
コマンドをmongos
で実行して、シャーディングされたクラスターをロックおよびロック解除します。
管理者特権
この手順を使用するには、MongoDB ユーザーにfsync
認可が必要です。この認可は、カスタムロールまたは組み込みのhostManager
ロールを使用して利用できます。
この認可では、 fsync
} コマンドとfsyncUnlock
コマンドを実行できます。
手順
シャーディングされたクラスターの自己管理型バックアップを作成するには、次の手順を実行します。
バックアップ ウィンドウの検索
バックアップを実行するのに適した時間を見つけるには、アプリケーションとデータベースの使用状況をモニターして、チャンクの移行、リシャーディング、スキーマ変換操作が発生し少ない時間を見つけます。
注意
これらの手順は、完全に実行され、開始時に操作が進行中でない場合にのみ、一貫性のあるバックアップを生成できます。
詳細については、「自己管理型シャーディングされたクラスターのスケジュール バックアップ ウィンドウ 」を参照してください。
バランサーを停止する
チャンクの移行によってバックアップが中断されないようにするには、 mongos
に接続し、 sh.stopBalancer()
メソッドを使用してバランサーを停止します。
sh.stopBalancer()
バランシング ラウンドが進行中の場合、 操作はバランシングが完了するまで待機します。
バランサーが停止していることを確認するには、 sh.getBalancerState()
メソッドを使用します。
use config while( sh.isBalancerRunning().mode != "off" ) { print( "Waiting for Balancer to stop..." ); sleep( 1000 ); }
クラスターのロック
シャーディングされたクラスターは、バックアップ処理中にデータベースを書込み (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 } ]
バックアップの取得
シャーディングされたクラスターをバックアップするには、 mongodump
を使用してmongos
に接続し、バックアップを実行します。
mongodump \ --host mongos.example.net \ --port 27017 \ --username user \ --password "passwd" \ --out /opt/backups/example-cluster-1
クラスターのロック解除
バックアップが完了したら、クラスターのロックを解除して書き込みを再開できます。
クラスターのロックを解除するには、 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 } ]
バランサーを再起動する
バランサーを再起動するには、 sh.startBalancer()
メソッドを使用します。
sh.startBalancer()
バランサーが実行中であることを確認するには、 sh.getBalancerState()
メソッドを使用します。
sh.getBalancerState()
true
バランサーが実行中、このコマンドはtrue
を返します。
次のステップ
を使用してmongodump
mongorestore
バックアップからデータベースを復元できます。
シャーディングされたクラスターを復元するには、
mongorestore
mongos
に対して を実行しますレプリカセットまたはスタンドアロン サーバーに移行するには、
mongorestore
に対してmongod
を実行します
重要
データベースを --nsExclude
シャーディングされたシャーディングされたクラスターに復元する場合は、config
を に設定して データベースを除外する必要があります。
mongorestore --nsExclude='config.*' /data/backup