自己管理型mongod
プロセス を構成する
MongoDB は標準プログラムとして実行されます。 mongod
コマンドを発行してオプションを指定すると、コマンドラインから MongoDB を起動できます。 オプションのリストについては、 mongod
リファレンスを参照してください。 MongoDB は Windows サービスとして実行することもできます。 詳しくは、「 MongoDB Community Edition を Windows サービスとして起動する」を参照してください。 MongoDB をインストールするには、「 MongoDB のインストール 」を参照してください。
次の例えでは、mongod
プロセスを含むディレクトリがシステム パス内にあることを前提としています。mongod
プロセスは、個々のサーバー上で実行されるプライマリ データベース プロセスです。mongos
は、クライアントの観点から見ると mongod
と同等の一貫した MongoDB インターフェースを提供します。mongosh
バイナリは管理 shell を提供します。
このドキュメントでは、mongod
プロセスについて説明します。ただし、このドキュメントの一部は、mongos
インスタンスにも当てはまる場合があります。
mongod
プロセスの開始
デフォルトでは、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
と同じ階層にあります。
TCP ポートの指定
1 つのネットワーク インターフェース上の接続を同時に listen できるのはプロセスは 1 つだけです。単一のマシンで複数の mongod
プロセスを実行する場合、またはこのポートを使用する必要がある他のプロセスが存在する場合には、それぞれにクライアント接続を listen する別のポートを割り当てる必要があります。
mongod
にポートを指定するには、コマンドラインで --port
オプションを使用します。次のコマンドは、ポート 12345
で listen する mongod
を開始します。
mongod --port 12345
混乱を避けるために、可能な限りデフォルトのポート番号を使用してください。
mongod
をデーモンとして起動する
mongod
プロセスをデーモン(fork
)として実行し、かつその出力をログファイルに書込み (write) するには、--fork
と --logpath
のオプションを使用します。ログディレクトリは作成する必要がありますが、ログファイルが存在しない場合は mongod
によって作成されます。
次のコマンドでは、mongod
をデーモンとして起動し、ログ出力を/var/log/mongodb/mongod.log
に記録します。
mongod --fork --logpath /var/log/mongodb/mongod.log
追加の構成オプション
一般的な構成と一般的なユースケースの配置の概要については、「自己管理型配置のためのランタイムデータベース構成 」を参照してください。
mongod
プロセスを停止
クリーン シャットダウンでは、mongod
は保留中のすべての操作を完了し、すべてのデータをデータファイルにフラッシュして、すべてのデータファイルを閉じます。他のシャットダウンはクリーンではなく、データファイルの有効性を損なう可能性があります。
確実にクリーンなシャットダウンを行うには、常に次のいずれかの方法で mongod
インスタンスをシャットダウンしてください。
使用 shutdownServer()
次のようにdb.shutdownServer()
メソッドを使用して、 mongosh
} からmongod
をシャットダウンします。
use admin db.shutdownServer()
init スクリプトから同じメソッドを呼び出しても、同じ結果が得られます。
authorization
が有効になっているシステムの場合、ユーザーは admin
データベースに認証されているとき、または認証が有効になっていないシステム上の localhost インターフェース経由で認証された場合のみ db.shutdownServer()
を実行できます。
使用 --shutdown
Linux でのみサポートされます。コマンドラインから、--shutdown
オプションを使用して mongod
をシャットダウンします。
mongod --shutdown
使用 CTRL-C
mongod
インスタンスを対話モード(--fork
なし)で実行している場合、クリーン シャットダウンを実行するには Control-C
を実行します。
使用 kill
Linux と macOS でのみサポートされています。コマンドラインから、次のいずれかのコマンドを使用して特定の mongod
インスタンスをシャットダウンします。
kill <mongod process ID> kill -2 <mongod process ID>
SIGTERM
とレプリカセット
レプリカセットのプライマリが SIGTERM
を受け取ると、プライマリはシャットダウンする前に降格を試みます。
降格が成功した場合、インスタンスはその後、新しいプライマリの選挙に投票せず、シャットダウンを続行します。
降格が失敗すると、インスタンスはシャットダウンを続行します。
SIGKILL
警告
mongod インスタンスを終了させるのに、kill -9
(SIGKILL
)は絶対に使用しないでください。
mongod
プロセスのトラブルシューティング
バックトレースの生成
Linux で実行されている MongoDB インスタンスの場合:
mongod
プロセスとmongos
プロセスがSIGUSR2
シグナルを受信すると、バックトレースの詳細が各プロセス スレッドのログに追加されます。バックトレースの詳細では、プロセスの関数呼び出しが表示されます。必要に応じて診断に使用したり、 MongoDB サポートに提供したりできます。
バックトレース機能はこれらのアーキテクチャで利用できます。
x86_64
arm64
( MongoDB 5.0.10以降 )
実行中の mongod
プロセスに SIGUSR2
シグナルを発行するには、次のコマンドを使用します。
kill -SIGUSR2 <mongod process ID>
レプリカセットの停止
手順
mongod
がレプリカセット内のプライマリである場合、このmongod
インスタンスのシャットダウン プロセスには次の手順が含まれます。
レプリカセットの強制シャットダウン
最新のセカンダリがなく、プライマリをシャットダウンする場合は、次の 操作のように、mongosh
shutdown
引数を指定してforce
コマンドを発行します。
db.adminCommand({shutdown : 1, force : true})
すぐに最新の状態になるセカンダリがない場合に、指定した秒数だけセカンダリをチェックし続けるには、timeoutSecs
引数を指定して shutdown
を実行します。MongoDB は、どれもすぐに最新にならない場合、指定された秒数だけセカンダリをチェックし続けます。割り当てられた時間内にいずれかのセカンダリが追いついた場合、プライマリはシャットダウンします。どのセカンダリも追いつかなければ、シャットダウンしません。
次のコマンドは、timeoutSecs
を 5
に設定して shutdown
を実行します。
db.adminCommand({shutdown : 1, timeoutSecs : 5})
あるいは、db.shutdownServer()
メソッドで timeoutSecs
引数を使用することもできます。
db.shutdownServer({timeoutSecs : 5})