定義
db.fsyncLock()ストレージ層からディスクへのすべての保留中の書込みをフラッシュし、サーバーをロックしてロックが解放されるまで追加の書込みを防ぎます。
MongoDB 7.1以降( 7.0.2以降でも利用可能 )、 6.0.11と5.0 。 22 )
db.fsyncLock()メソッドとdb.fsyncUnlock()メソッドをmongosで実行すると、シャーディングされたクラスターのロックとロックが解除されます。重要
mongosh メソッド
This page documents a
mongoshmethod. This is not the documentation for database commands or language-specific drivers, such as Node.js.データベースコマンドについては、
fsyncコマンドを参照してください。MongoDB API ドライバーについては、各言語の「MongoDB ドライバーのドキュメント」を参照してください。
Servers maintain an fsync lock count. The
fsyncLock()method increments the lock count while thefsyncUnlock()method decrements it. To unlock writes on a server or cluster, call thefsyncUnlock()method until the lock count reaches zero.db.fsyncLock()の構文は次のとおりです。db.fsyncLock() この操作は、次のフィールドを含むドキュメントを返します。
フィールド説明info操作のステータスに関する情報。
lockCountインスタンスで現在実行されているロックの数。
seeAlsofsyncコマンドのドキュメントへのリンクokステータス コード。
db.fsyncLock()is an administrative command. Use this method to lock a server or cluster before backup operations.
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
This command is not supported in MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
db.fsyncLock() ensures that the data files are safe to copy using low-level backup utilities such as cp, scp, or tar. A mongod started using the copied files contains user-written data that is indistinguishable from the user-written data on the locked mongod.
ロックされた mongod のデータファイルは、ジャーナリング同期 や WiredTigerスナップショット などの操作によって変更される可能性があります。これは論理データ(例:クライアントがアクセスするデータ)では、一部のバックアップユーティリティがこれらの変更を検出して警告を発したり、エラーで失敗したりすることがあります。MongoDB- 推奨バックアップユーティリティと手順の詳細については、自己管理型配置のバックアップ メソッド を参照してください。
失敗後の Fsync ロック
Fsync ロックは、レプリカセットまたはシャーディングされたクラスター内のプライマリで実行されます。
ネットワークの問題によりプライマリがダウンしたり、アクセスできなくなった場合、クラスターは使用可能なセカンダリから新しいプライマリを選択します。 fsync ロックを持つプライマリがダウンした場合、新しいプライマリは fsync ロックを保持せず、書込み操作を処理できます。 バックアップ操作中に選挙が行われると、結果のバックアップが一貫性を失うか、使用できない可能性があります。
プライマリがダウンした状態から回復するには、次の手順に従います。
ロック数が 0 になるまで
db.fsyncUnlock()メソッドを実行して、すべてのノードのロックを解放します。Issue the
db.fsyncLock()command to reestablish the fsync lock on the cluster.バックアップを再起動します。
さらに、 fsync ロックは永続的です。 古いプライマリが再度オンラインになったら、ノードのロックを解放するためにdb.fsyncUnlock()コマンドを実行する必要があります。
例
The following operation runs db.fsyncLock():
db.fsyncLock()
この操作では、 lockCountを含む次のステータス ドキュメントが返されます。
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(1), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
If you run db.fsyncLock() again, the operation increments the lockCount:
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : Long(2), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
インスタンスの書き込みロックを解除するには、 db.fsyncUnlock()を 2 回実行してlockCountを 0 に減らす必要があります。