文档菜单
文档首页
/
MongoDB 手册
/ / /

配置自托管mongod 进程

本页内容

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

MongoDB 以标准程序运行。您可以通过使用mongod 命令并指定选项来从命令行启动 MongoDB。有关选项列表,请参阅 mongod 参考。

以下示例假设包含 mongod 进程的目录位于您的系统路径中。mongod 进程是运行在单个服务器上的主数据库进程。 mongos 从客户端的角度提供了与 mongod 相当的连贯 MongoDB 接口。mongosh 二进制文件提供管理外壳。

本文讨论了 mongod 进程;然而,本文的某些部分可能也适用于 mongos 实例。

默认情况下,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

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

为了指定 mongod 的端口,请在命令行中使用 --port 选项。以下命令启动 mongod 并在端口 12345 上监听。

mongod --port 12345

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

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

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

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

有关常见配置和部署的概述,请参阅自托管部署的运行时数据库配置。

在正常关闭过程中,一个 mongod 会完成所有挂起操作,将所有数据刷新到数据文件中,并关闭所有数据文件。其他关闭操作是不干净的,可能会损害数据文件的有效性。

为确保正常关闭,始终使用以下方法之一关闭 mongod 实例

使用 mongoshmongod 关闭,使用 db.shutdownServer() 方法,如下所示

use admin
db.shutdownServer()

初始化脚本 调用相同的方法可以完成相同的结果。

对于启用了 授权 的系统,用户只能在认证到 admin 数据库或通过未启用认证的系统上的 localhost 接口时才能发出 db.shutdownServer()

仅在Linux上受支持。从命令行使用 mongod 使用 --shutdown 选项来关闭

mongod --shutdown

当以交互模式(即不使用 --fork)运行 mongod 实例时,按 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和6.0开始)

要向正在运行的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 将在指定的时间内持续检查从节点。如果在此期间任何从节点追赶上,主节点将关闭。如果没有从节点追赶上,则不会关闭。

以下命令使用 timeoutSecsshutdown 设置为 5

db.adminCommand({shutdown : 1, timeoutSecs : 5})

或者,您可以使用 timeoutSecs 参数与 db.shutdownServer() 方法一起使用

db.shutdownServer({timeoutSecs : 5})

返回

升级到最新补丁版本