配置自管理mongod
进程
MongoDB 作为标准程序运行。您可以通过发出 mongod
命令并指定选项,从命令行启动 MongoDB。有关选项列表,请参阅 mongod
参考。
以下示例假设包含 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 和 6.0 开始)
要向运行中的 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})