Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

配置自管理mongod 进程

在此页面上

  • 启动 mongod 进程
  • 停止 mongod 进程
  • mongod 进程进行故障排除
  • 停止副本集

MongoDB作为标准程序运行。 您可以通过发出 mongod命令并指定选项,命令行启动MongoDB 。 有关选项列表,请参阅mongod参考文档。 MongoDB还运行作为Windows服务运行。 有关详细信息,请参阅将MongoDB Community Edition作为Windows服务启动。 要安装MongoDB,请参阅安装MongoDB。

以下示例假设包含 mongod 进程的目录位于您的系统路径中。mongod 进程是在单个服务器上运行的主节点数据库进程。从客户端的角度来看,mongos 提供了一致的 MongoDB 接口,等效于 mongodmongosh 二进制文件提供管理 shell。

本文档讨论 mongod 进程,不过某些部分可能也适用于 mongos 实例。

默认情况下,MongoDB 在端口 27017 上监听来自客户端的连接,并将数据存储在 /data/db 目录中。

在 Windows 上,此路径位于启动 MongoDB 的驱动器上。例如,如果您未指定 --dbpath,则在 C:\ 驱动上启动 MongoDB Server 会将所有数据文件存储在 C:\data\db 中。

要全部使用默认设置启动 MongoDB,请在操作系统 Shell 中执行以下命令:

mongod

如果希望 mongod 将数据文件存储在 /data/db 以外的路径,可以指定一个dbPath。在您启动 mongod 之前,dbPath 必须存在。如果不存在,请创建目录和权限,以便 mongod 可以向该路径读取和写入数据。有关权限的更多信息,请参阅安全操作文档。

要指定 dbPathmongod 用作数据目录,请使用 --dbpath 选项。以下调用将启动一个 mongod 实例,并将数据存储于 /srv/mongodb 路径

mongod --dbpath /srv/mongodb/

注意

mongod 包括全时诊断数据捕获机制,以协助 MongoDB 工程师对部署进行故障排除。如果该线程失败,它将终止原始进程。为了避免出现最常见的故障,请确认运行该进程的用户有权创建 FTDC diagnostic.data 目录。对于 mongod,该目录位于 storage.dbPath 内。对于 mongos,该目录与 systemLog.path 并行。

每次只有一个进程可以监听网络接口连接。如果在一台计算机上运行多个 mongod 进程,或有其他进程必须使用该端口,则必须为每个进程分配不同的端口来监听客户端连接。

要指定 mongod 的端口,请在命令行上使用 --port 选项。以下命令在端口 12345 上启动 mongod 侦听:

mongod --port 12345

为避免混淆,请尽可能使用默认端口号。

mongod进程作为守护进程运行(即fork),将其输出写入日志文件,请使用 --fork--logpath 选项。 您必须创建日志目录;但是,如果不存在,mongod 会创建日志文件。

以下命令将 mongod 作为守护进程启动,并将日志输出记录到 /var/log/mongodb/mongod.log

mongod --fork --logpath /var/log/mongodb/mongod.log

有关常见使用案例的常见配置和部署的概述,请参阅适用于自管理部署的运行时数据库配置

在彻底关闭时,mongod 会完成所有待处理的操作,将所有数据刷新到数据文件,并关闭所有数据文件。 其他关闭不彻底,可能会损害数据文件的有效性。

要确保完全关闭,请始终使用以下方法之一关闭 mongod 实例:

使用 db.shutdownServer() 方法从 mongosh 关闭 mongod,如下所示:

use admin
db.shutdownServer()

初始化脚本中调用相同的方法可实现相同的结果。

对于启用 authorization 的系统,用户只有在向 admin 数据库进行身份验证时才能发出 db.shutdownServer(),或者在未启用身份验证的系统上通过本地主机接口发出。

仅在 Linux 上支持。在命令行中,使用 --shutdown 选项关闭 mongod

mongod --shutdown

以交互模式运行 mongod 实例时(即没有 --fork),则发出 Control-C 以执行彻底关机。

仅在 Linux 和 macOS 上支持。在命令行中,可通过以下命令关闭特定的 mongod 实例:

kill <mongod process ID>
kill -2 <mongod process ID>

如果副本集主节点收到 SIGTERM,则主节点会在关闭之前尝试降级。

  • 如果成功降级,则该实例在随后的新主节点选举中不会进行投票,而是继续其关闭过程。

  • 如果降级失败,该实例将继续其关闭过程。

警告

切勿使用 kill -9(即 SIGKILL)终止 mongod 实例。

对于在 Linux 上运行的 MongoDB 实例:

  • mongodmongos 进程收到 SIGUSR2 信号时,回溯详细信息将添加到每个进程线程的日志中。

  • 回溯详细信息显示该进程的函数调用,可用于诊断并在需要时提供给 MongoDB 支持。

回溯功能可用于以下架构:

  • x86_64

  • arm64 (从 MongoDB 5.0.10开始)

要向运行中的 mongod 进程发出 SIGUSR2 信号,请使用以下命令:

kill -SIGUSR2 <mongod process ID>

生成的回溯数据将按照 --logpath 的配置,写入 mongod 日志文件。

如果 mongod副本集中的主节点,则此 mongod 实例的关闭过程包括以下步骤:

  1. 检查从节点的最新情况。

  2. 如果在主节点的 10 秒内没有从节点,mongod 将返回一条消息,表明不会关闭。您可以向 shutdown 命令传递 timeoutSecs 参数,令主节点等待从节点赶上。

  3. 如果存在一个从节点,其数据状态落后于主节点不超过 10 秒,则主节点会降级,并等待从节点完成数据同步。

  4. 在等待 60 秒,或从节点数据同步完成后,主节点将关闭。

如果没有最新的从节点并且您想关闭主节点,请发出带有 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})

后退

升级到最新补丁版本