定義
db.fsyncLock()ストレージ層からディスクへのすべての保留中の書込みをフラッシュし、サーバーをロックしてロックが解放されるまで追加の書込みを防ぎます。
MongoDB 7.1以降( 7.0.2以降でも利用可能 )、 6.0.11と5.0 。 22 )
db.fsyncLock()メソッドとdb.fsyncUnlock()メソッドをmongosで実行すると、シャーディングされたクラスターのロックとロックが解除されます。重要
mongosh メソッド
このページでは メソッドについて説明します。ただし、データベースコマンドやNode.jsなどの言語固有のドライバーのドキュメントには 該当しません
mongosh。データベースコマンドについては、
fsyncコマンドを参照してください。MongoDB API ドライバーについては、各言語の「MongoDB ドライバーのドキュメント」を参照してください。
サーバーはfsyncロックカウントを維持します。
fsyncLock()メソッドはロック数を増加させ、fsyncUnlock()メソッドはロック数を減算します。サーバーまたはクラスターへの書込みをロックするには、ロック数が 0 になるまでfsyncUnlock()メソッドを呼び出します。db.fsyncLock()の構文は次のとおりです。db.fsyncLock() この操作は、次のフィールドを含むドキュメントを返します。
フィールド説明info操作のステータスに関する情報。
lockCountインスタンスで現在実行されているロックの数。
seeAlsofsyncコマンドのドキュメントへのリンクokステータス コード。
db.fsyncLock()は管理コマンドです。このメソッドを使用して、バックアップ操作の前にサーバーまたはクラスターをロック。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
重要
このコマンドは、MongoDB Atlas クラスターではサポートされていません。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
動作
db.fsyncLock()は、cp 、scp 、tar などの低レベルのバックアップユーティリティを使用してデータファイルを安全にコピーすることを保証します。コピーされたファイルを使用して開始されたmongod には、ロックされたmongod のユーザーが記述したデータと区別できないユーザーが記述したデータが含まれています。
ロックされた mongod のデータファイルは、ジャーナリング同期 や WiredTigerスナップショット などの操作によって変更される可能性があります。これは論理データ(例:クライアントがアクセスするデータ)では、一部のバックアップユーティリティがこれらの変更を検出して警告を発したり、エラーで失敗したりすることがあります。MongoDB- 推奨バックアップユーティリティと手順の詳細については、自己管理型配置のバックアップ メソッド を参照してください。
失敗後の Fsync ロック
Fsync ロックは、レプリカセットまたはシャーディングされたクラスター内のプライマリで実行されます。
ネットワークの問題によりプライマリがダウンしたり、アクセスできなくなった場合、クラスターは使用可能なセカンダリから新しいプライマリを選択します。 fsync ロックを持つプライマリがダウンした場合、新しいプライマリは fsync ロックを保持せず、書込み操作を処理できます。 バックアップ操作中に選挙が行われると、結果のバックアップが一貫性を失うか、使用できない可能性があります。
プライマリがダウンした状態から回復するには、次の手順に従います。
ロック数が 0 になるまで
db.fsyncUnlock()メソッドを実行して、すべてのノードのロックを解放します。db.fsyncLock()コマンドを発行して、クラスターのfsyncロックを再確立します。バックアップを再起動します。
さらに、 fsync ロックは永続的です。 古いプライマリが再度オンラインになったら、ノードのロックを解放するためにdb.fsyncUnlock()コマンドを実行する必要があります。
例
次の操作では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 }
db.fsyncLock()を再度実行すると、操作により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 に減らす必要があります。