Docs Menu

自己管理型mongodプロセスの構成

MongoDB は標準プログラムとして実行されます。mongod コマンドを発行してオプションを指定すると、コマンドラインから MongoDB を起動できます。オプションのリストについては、mongod リファレンスを参照してください。

次の例えでは、mongod プロセスを含むディレクトリがシステム パス内にあることを前提としています。mongod プロセスは、個々のサーバー上で実行されるプライマリ データベース プロセスです。mongos は、クライアントの観点から見ると mongod と同等の一貫した MongoDB インターフェースを提供します。mongosh バイナリは管理 shell を提供します。

このドキュメントでは、mongod プロセスについて説明します。ただし、このドキュメントの一部は、mongos インスタンスにも当てはまる場合があります。

デフォルトでは、MongoDB はポート 27017 でクライアントからの接続を listen し、データを /data/db ディレクトリに保存します。

Windows の場合、このパスは MongoDB を起動するドライブにあります。たとえば、--dbpath を指定しない場合、C:\ ドライブで MongoDB サーバーを起動すると、すべてのデータファイルが C:\data\db に保存されます。

すべてのデフォルトを使用して MongoDB を起動するには、システム shell で次のコマンドを実行します。

mongod

mongod でデータファイルを /data/db 以外のパスに保存する場合は、dbPath を指定できます。dbPath は、mongod を開始する前に存在している必要があります。存在しない場合は、ディレクトリと権限を作成して、mongod がこのパスにデータを読み書きできるようにします。権限の詳細については、セキュリティ操作のドキュメントを参照してください。

mongodがデータディレクトリとして使用する dbPath を指定するには、--dbpath オプションを使用します。次の呼び出しでは、mongod インスタンスが開始され、/srv/mongodb パスにデータが格納されます。

mongod --dbpath /srv/mongodb/

注意

mongod は、デプロイに関するトラブルシューティングを行う MongoDB エンジニアを支援するために、フルタイム診断データ取得メカニズムを備えています。このスレッドが失敗すると、元のプロセスが終了します。特に一般的な障害を回避するには、プロセスを実行しているユーザーに FTDC diagnostic.data ディレクトリを作成する権限があることを確認します。mongod の場合、このディレクトリは storage.dbPath 内にあります。mongos の場合は、systemLog.path と同じ階層にあります。

1 つのネットワーク インターフェース上の接続を同時に listen できるのはプロセスは 1 つだけです。単一のマシンで複数の mongod プロセスを実行する場合、またはこのポートを使用する必要がある他のプロセスが存在する場合には、それぞれにクライアント接続を listen する別のポートを割り当てる必要があります。

mongod にポートを指定するには、コマンドラインで --port オプションを使用します。次のコマンドは、ポート 12345 で listen する mongod を開始します。

mongod --port 12345

混乱を避けるために、可能な限りデフォルトのポート番号を使用してください。

mongodプロセスをデーモン(fork)として実行し、かつその出力をログファイルに書込み (write) するには、--fork--logpath のオプションを使用します。ログディレクトリは作成する必要がありますが、ログファイルが存在しない場合は mongod によって作成されます。

次のコマンドでは、mongod をデーモンとして起動し、ログ出力を/var/log/mongodb/mongod.logに記録します。

mongod --fork --logpath /var/log/mongodb/mongod.log

一般的な構成と一般的なユースケースの配置の概要については、「自己管理型配置のためのランタイムデータベース構成 」を参照してください。

クリーン シャットダウンでは、mongod は保留中のすべての操作を完了し、すべてのデータをデータファイルにフラッシュして、すべてのデータファイルを閉じます。他のシャットダウンはクリーンではなく、データファイルの有効性を損なう可能性があります。

確実にクリーンなシャットダウンを行うには、常に次のいずれかの方法で mongod インスタンスをシャットダウンしてください。

次のようにdb.shutdownServer()メソッドを使用して、 mongosh } からmongodをシャットダウンします。

use admin
db.shutdownServer()

init スクリプトから同じメソッドを呼び出しても、同じ結果が得られます。

authorization が有効になっているシステムの場合、ユーザーは admin データベースに認証されているとき、または認証が有効になっていないシステム上の localhost インターフェース経由で認証された場合のみ db.shutdownServer() を実行できます。

Linux でのみサポートされます。コマンドラインから、--shutdown オプションを使用して mongod をシャットダウンします。

mongod --shutdown

mongod インスタンスを対話モード(--forkなし)で実行している場合、クリーン シャットダウンを実行するには Control-C を実行します。

Linux と macOS でのみサポートされています。コマンドラインから、次のいずれかのコマンドを使用して特定の mongod インスタンスをシャットダウンします。

kill <mongod process ID>
kill -2 <mongod process ID>

レプリカセットのプライマリが SIGTERM を受け取ると、プライマリはシャットダウンする前に降格を試みます。

  • 降格が成功した場合、インスタンスはその後、新しいプライマリの選挙に投票せず、シャットダウンを続行します。

  • 降格が失敗すると、インスタンスはシャットダウンを続行します。

警告

mongod インスタンスを終了させるのに、kill -9SIGKILL)は絶対に使用しないでください。

Linux で実行されている MongoDB インスタンスの場合:

  • mongod プロセスと mongos プロセスが SIGUSR2シグナルを受信すると、バックトレースの詳細が各プロセス スレッドのログに追加されます。

  • バックトレースの詳細では、プロセスの関数呼び出しが表示されます。必要に応じて診断に使用したり、 MongoDB サポートに提供したりできます。

バックトレース機能はこれらのアーキテクチャで利用できます。

  • x86_64

  • arm64 (MongoDB 5.0.10および6.0以降)

実行中の mongod プロセスに SIGUSR2 シグナルを発行するには、次のコマンドを使用します。

kill -SIGUSR2 <mongod process ID>

結果のバックトレース データは、--logpath で設定されたとおりに mongod ログファイルに書込まれます

mongodレプリカセット内のプライマリである場合、このmongod インスタンスのシャットダウン プロセスには次の手順が含まれます。

  1. セカンダリがどの程度最新かを確認します。

  2. プライマリから 10 秒以内にセカンダリが存在しない場合、mongod はシャットダウンしないというメッセージを返します。shutdown コマンドに timeoutSecs 引数を渡して、セカンダリが追いつくまで待機することができます。

  3. プライマリから 10 秒以内にセカンダリが存在する場合、プライマリは降格し、セカンダリが追いつくまで待機します。

  4. 60 秒後、またはセカンダリが追いつくと、プライマリはシャットダウンします。

最新のセカンダリがなく、プライマリをシャットダウンする場合は、次の 操作のように、mongosh shutdown引数を指定してforce コマンドを発行します。

db.adminCommand({shutdown : 1, force : true})

すぐに最新の状態になるセカンダリがない場合に、指定した秒数だけセカンダリをチェックし続けるには、timeoutSecs 引数を指定して shutdown を実行します。MongoDB は、どれもすぐに最新にならない場合、指定された秒数だけセカンダリをチェックし続けます。割り当てられた時間内にいずれかのセカンダリが追いついた場合、プライマリはシャットダウンします。どのセカンダリも追いつかなければ、シャットダウンしません。

次のコマンドは、timeoutSecs5 に設定して shutdown を実行します。

db.adminCommand({shutdown : 1, timeoutSecs : 5})

あるいは、db.shutdownServer() メソッドで timeoutSecs 引数を使用することもできます。

db.shutdownServer({timeoutSecs : 5})