配置自托管mongod进程

配置自托管mongod 进程本页内容

启动mongod 进程停止 mongod 进程故障排除 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 admindb.shutdownServer()从 初始化脚本 调用相同的方法可以完成相同的结果。

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

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

mongod --shutdown使用 CTRL-C 当以交互模式(即不使用 --fork)运行 mongod 实例时,按 Control-C 以进行干净关闭。

使用 kill 仅在Linux和macOS上受支持。从命令行使用以下命令之一关闭特定的 mongod 实例

kill kill -2 SIGTERM 和副本集如果副本集主节点收到 SIGTERM 信号,主节点会尝试下线再关闭。

如果下线成功,该实例不会在随后新主节点的选举中投票,并继续关闭。

如果下线失败,实例继续关闭。

SIGKILL警告永远不要使用 kill -9 (即 SIGKILL) 来终止 mongod 实例。

诊断 mongod 进程生成堆栈跟踪针对在Linux上运行的MongoDB实例

当mongod和mongos进程收到SIGUSR2信号时,每个进程线程的详细信息都会添加到日志中。

堆栈跟踪详细信息显示了进程的函数调用,可用于诊断,并在需要时提供给MongoDB支持。

此功能适用于以下架构

x86_64

arm64(从MongoDB 5.0.10和6.0开始)

要向正在运行的mongod进程发送SIGUSR2信号,请使用以下命令

kill -SIGUSR2 生成的堆栈跟踪数据将写入由--logpath配置的mongod日志文件中。

停止副本集程序如果 mongod 是一个 主节点,并且在一个 副本集 中,则此 mongod 实例的关闭过程包括以下步骤

检查 从节点 的同步情况。

如果没有从节点在 10 秒内与主节点同步,mongod 将返回一个消息,表示它将不会关闭。您可以将 shutdown 命令与一个 timeoutSecs 参数一起传递,以等待从节点追赶上。

如果有从节点在 10 秒内与主节点同步,主节点将降级并等待从节点追赶上。

在 60 秒后或一旦从节点追赶上后,主节点将关闭。

强制副本集关闭如果没有最新的从节点并且您希望主节点关闭,请使用带 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})

Back to top: