自己管理型mongod
プロセス を構成する
MongoDB は標準プログラムとして実行されます。 コマンドを発行してオプションを指定すると、コマンドラインからMongoDBmongod
を起動できます。オプションのリストについては、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と6.0以降)
実行中の 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})