配置自托管mongod
进程
MongoDB 以标准程序运行。您可以通过使用mongod
命令并指定选项来从命令行启动 MongoDB。有关选项列表,请参阅 mongod
参考。
以下示例假设包含 mongod
进程的目录位于您的系统路径中。mongod
进程是运行在单个服务器上的主数据库进程。 mongos
从客户端的角度提供了与 mongod
相当的连贯 MongoDB 接口。mongosh
二进制文件提供管理外壳。
本文讨论了 mongod
进程;然而,本文的某些部分可能也适用于 mongos
实例。
启动 mongod
进程
默认情况下,MongoDB 在端口 27017
上监听来自客户端的连接,并将数据存储在 /data/db
目录中。
在 Windows 上,此路径是您从该驱动器启动 MongoDB 的路径。例如,如果您未指定 --dbpath
,则在 C:\
驱动器上启动 MongoDB 服务器将所有数据文件存储在 C:\data\db
。
要使用所有默认设置启动 MongoDB,请在系统外壳中发出以下命令
mongod
指定数据目录
如果您想使 mongod
在除 /data/db
之外的路径存储数据文件,您可以指定一个 dbPath
。在您启动 mongod
之前,dbPath
必须存在。如果不存在,则需要创建该目录并设置权限,以便 mongod
能够读取和写入此路径下的数据。有关权限的更多信息,请参阅安全操作文档。
要为 mongod
指定一个用作数据目录的 dbPath
,请使用 --dbpath
选项。以下调用将启动一个 mongod
实例,并将数据存储在 /srv/mongodb
路径下
mongod --dbpath /srv/mongodb/
注意
mongod
包含一个 全时诊断数据捕获 机制,以协助 MongoDB 工程师进行部署故障排除。如果此线程失败,则终止原始进程。为了避免最常见的失败,请确认运行此进程的用户有权创建 FTDC diagnostic.data
目录。对于 mongod
,目录位于 storage.dbPath
内。对于 mongos
,它平行于 systemLog.path
。
指定 TCP 端口
一次只能有一个进程可以在网络接口上监听连接。如果您在同一台机器上运行多个 mongod
进程,或者有其他必须使用此端口的进程,您必须为每个进程分配不同的端口以监听客户端连接。
为了指定 mongod
的端口,请在命令行中使用 --port
选项。以下命令启动 mongod
并在端口 12345
上监听。
mongod --port 12345
尽可能使用默认端口号,以避免混淆。
以守护进程方式启动 mongod
要将 mongod
进程作为守护进程(即 fork
)运行,并将其输出写入日志文件,请使用 --fork
和 --logpath
选项。您必须创建日志目录;但是,如果不存在,mongod
会创建日志文件。
以下命令以守护进程方式启动 mongod
并将日志输出记录到 /var/log/mongodb/mongod.log
。
mongod --fork --logpath /var/log/mongodb/mongod.log
其他配置选项
有关常见配置和部署的概述,请参阅自托管部署的运行时数据库配置。
停止 mongod
进程
在正常关闭过程中,一个 mongod
会完成所有挂起操作,将所有数据刷新到数据文件中,并关闭所有数据文件。其他关闭操作是不干净的,可能会损害数据文件的有效性。
为确保正常关闭,始终使用以下方法之一关闭 mongod
实例
使用 shutdownServer()
使用 mongosh
从 mongod
关闭,使用 db.shutdownServer()
方法,如下所示
use admin db.shutdownServer()
从 初始化脚本 调用相同的方法可以完成相同的结果。
对于启用了 授权
的系统,用户只能在认证到 admin
数据库或通过未启用认证的系统上的 localhost 接口时才能发出 db.shutdownServer()
。
使用 --shutdown
仅在Linux上受支持。从命令行使用 mongod
使用 --shutdown
选项来关闭
mongod --shutdown
使用 CTRL-C
使用 kill
仅在Linux和macOS上受支持。从命令行使用以下命令之一关闭特定的 mongod
实例
kill <mongod process ID> kill -2 <mongod process ID>
SIGTERM
和副本集
如果副本集主节点收到 SIGTERM
信号,主节点会尝试下线再关闭。
如果下线成功,该实例不会在随后新主节点的选举中投票,并继续关闭。
如果下线失败,实例继续关闭。
SIGKILL
警告
永远不要使用 kill -9
(即 SIGKILL
) 来终止 mongod 实例。
诊断 mongod
进程
生成堆栈跟踪
针对在Linux上运行的MongoDB实例
此功能适用于以下架构
x86_64
arm64
(从MongoDB 5.0.10和6.0开始)
要向正在运行的mongod
进程发送SIGUSR2
信号,请使用以下命令
kill -SIGUSR2 <mongod process ID>
停止副本集
程序
强制副本集关闭
如果没有最新的从节点并且您希望主节点关闭,请使用带 force
参数的 shutdown
命令,如下面的 mongosh
操作所示
db.adminCommand({shutdown : 1, force : true})
如果需要检查指定数量的秒数以确保没有从节点立即同步,请使用带 timeoutSecs
参数的 shutdown
命令。如果没有任何从节点立即同步,MongoDB 将在指定的时间内持续检查从节点。如果在此期间任何从节点追赶上,主节点将关闭。如果没有从节点追赶上,则不会关闭。
以下命令使用 timeoutSecs
将 shutdown
设置为 5
db.adminCommand({shutdown : 1, timeoutSecs : 5})
或者,您可以使用 timeoutSecs
参数与 db.shutdownServer()
方法一起使用
db.shutdownServer({timeoutSecs : 5})