配置自管理mongod
进程
MongoDB作为标准程序运行。 您可以通过发出 mongod
命令并指定选项,命令行启动MongoDB 。 有关选项列表,请参阅mongod
参考文档。 MongoDB还运行作为Windows服务运行。 有关详细信息,请参阅将MongoDB Community Edition作为Windows服务启动。 要安装MongoDB,请参阅安装MongoDB。
以下示例假设包含 mongod
进程的目录位于您的系统路径中。mongod
进程是在单个服务器上运行的主节点数据库进程。从客户端的角度来看,mongos
提供了一致的 MongoDB 接口,等效于 mongod
。mongosh
二进制文件提供管理 shell。
本文档讨论 mongod
进程,不过某些部分可能也适用于 mongos
实例。
启动mongod
进程
默认情况下,MongoDB 在端口 27017
上监听来自客户端的连接,并将数据存储在 /data/db
目录中。
在 Windows 上,此路径位于启动 MongoDB 的驱动器上。例如,如果您未指定 --dbpath
,则在 C:\
驱动上启动 MongoDB Server 会将所有数据文件存储在 C:\data\db
中。
要全部使用默认设置启动 MongoDB,请在操作系统 Shell 中执行以下命令:
mongod
指定数据目录
如果希望 mongod
将数据文件存储在 /data/db
以外的路径,可以指定一个dbPath
。在您启动 mongod
之前,dbPath
必须存在。如果不存在,请创建目录和权限,以便 mongod
可以向该路径读取和写入数据。有关权限的更多信息,请参阅安全操作文档。
要指定 dbPath
供 mongod
用作数据目录,请使用 --dbpath
选项。以下调用将启动一个 mongod
实例,并将数据存储于 /srv/mongodb
路径
mongod --dbpath /srv/mongodb/
注意
mongod
包括全时诊断数据捕获机制,以协助 MongoDB 工程师对部署进行故障排除。如果该线程失败,它将终止原始进程。为了避免出现最常见的故障,请确认运行该进程的用户有权创建 FTDC diagnostic.data
目录。对于 mongod
,该目录位于 storage.dbPath
内。对于 mongos
,该目录与 systemLog.path
并行。
指定 TCP 端口
每次只有一个进程可以监听网络接口连接。如果在一台计算机上运行多个 mongod
进程,或有其他进程必须使用该端口,则必须为每个进程分配不同的端口来监听客户端连接。
要指定 mongod
的端口,请在命令行上使用 --port
选项。以下命令在端口 12345
上启动 mongod
侦听:
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()
使用 db.shutdownServer()
方法从 mongosh
关闭 mongod
,如下所示:
use admin db.shutdownServer()
从初始化脚本中调用相同的方法可实现相同的结果。
对于启用 authorization
的系统,用户只有在向 admin
数据库进行身份验证时才能发出 db.shutdownServer()
,或者在未启用身份验证的系统上通过本地主机接口发出。
使用 --shutdown
仅在 Linux 上支持。在命令行中,使用 --shutdown
选项关闭 mongod
:
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开始)
要向运行中的 mongod
进程发出 SIGUSR2
信号,请使用以下命令:
kill -SIGUSR2 <mongod process ID>
停止副本集
步骤
强制关闭副本集
如果没有最新的从节点并且您想关闭主节点,请发出带有 force
参数的 shutdown
命令,如以下 mongosh
操作所示:
db.adminCommand({shutdown : 1, force : true})
如果从节点没有立即更新,要在指定的秒数内持续检查从节点,请发出带有 timeoutSecs
参数的 shutdown
。如果没有立即更新,MongoDB 将在指定的秒数内持续检查从节点。如果有从节点在分配的时间内赶上,则主节点将关闭。如果没有辅助设备赶上,它就不会关闭。
以下命令发出 shutdown
,并将 timeoutSecs
设立,制定为 5
:
db.adminCommand({shutdown : 1, timeoutSecs : 5})
或者,您可以将 timeoutSecs
参数与 db.shutdownServer()
方法一起使用:
db.shutdownServer({timeoutSecs : 5})