db.fsyncLock()
定義
db.fsyncLock()
ストレージ層からディスクへのすべての保留中の書込みをフラッシュし、サーバーをロックしてロックが解放されるまで追加の書込みを防ぎます。
MongoDB 6.0.11以降 ( 5.0.22以降でも利用可能 )
db.fsyncLock()
メソッドとdb.fsyncUnlock()
メソッドはmongos
で実行され、シャーディングされたクラスターのロックとロックを解除します。重要
mongosh メソッド
このページでは、
mongosh
メソッドについて説明します。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません。データベースコマンドについては、
fsync
コマンドを参照してください。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
サーバーは fsync ロック カウントを維持します。
fsyncLock()
メソッドはロック数を増加させ、fsyncUnlock()
メソッドはロック数を減算します。 サーバーまたはクラスターへの書込みをロックするには、ロック数が 0 になるまでfsyncUnlock()
メソッドを呼び出します。db.fsyncLock()
の構文は次のとおりです。db.fsyncLock() この操作は、次のフィールドを含むドキュメントを返します。
フィールド説明info
操作のステータスに関する情報。lockCount
インスタンスで現在実行されているロックの数。seeAlso
fsync
コマンドのドキュメントへのリンクok
ステータス コード。db.fsyncLock()
は管理コマンドです。 このメソッドを使用して、バックアップ操作の前にサーバーまたはクラスターをロックします。
動作
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" : NumberLong(1), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
db.fsyncLock()
を再度実行すると、その操作によりlockCount
が増加します。
{ "info" : "now locked against writes, use db.fsyncUnlock() to unlock", "lockCount" : NumberLong(2), "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand", "ok" : 1 }
インスタンスの書き込みロックを解除するには、 db.fsyncUnlock()
を 2 回実行してlockCount
を 0 に減らす必要があります。