对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

自管理的配置文件选项

此页面上的配置文件选项适用于 MongoDB 9.0。有关其他版本中的选项,请参阅相应版本的 MongoDB 手册。

注意

如果使用 MongoDB Atlas 来管理云中的 MongoDB 部署,则无需创建配置文件。要了解如何为 MongoDB Atlas 部署配置设置,请参阅配置其他设置。

MongoDB 二进制文件还会读取操作系统环境变量。

您可以使用配置文件在初创企业时配置 mongod 和 mongos 实例。配置文件包含等效于 mongod 和 mongos 命令行选项的设置。请参阅自管理配置和命令行选项映射。

您还可以在配置文件中添加注释以解释服务器的设置。

  • 如果使用软件包管理器(例如 Linux 上的 yum 或 apt,或 macOS 上的 brew)安装 MongoDB,或者使用 Windows 上的 MSI 安装程序安装 MongoDB,则安装过程中会提供默认配置文件:

    平台
    方法
    配置文件

    Linux

    apt,yum 或 zypper 包管理器

    /etc/mongod.conf

    macOS

    brew 包管理器:

    /usr/local/etc/mongod.conf (在英特尔处理器上),或

    /opt/homebrew/etc/mongod.conf (在 Apple M1 处理器上)

    Windows

    MSI 安装程序

    <install directory>\bin\mongod.cfg

  • 如果您通过下载的 TGZ 或 ZIP 文件安装 MongoDB,则必须创建自己的配置文件。基本示例配置是一个很好的开始地方。

MongoDB配置文件使用 YAML 格式 []。1

以下示例配置文件包含多个 mongod 设置:

注意

YAML 不支持缩进制表符:请改用空格。

systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
...

官方 MongoDB 包中包含的 Linux 包初始化脚本依赖于 systemLog.path、storage.dbPath 和 processManagement.fork 或 MONGODB_CONFIG_OVERRIDE_NOFORK 系统环境变量的特定值。如果修改了默认配置文件中的这些设置,mongod 可能无法启动。

[1] YAML 是 JSON 的超集。

注意

MongoDB 支持在配置文件中使用扩展指令来加载外部来源的值。扩展指令可以加载特定配置文件选项的值,或者加载整个配置文件。

以下扩展指令可用:

扩展指令
说明

允许用户指定 REST 端点作为配置文件选项或完整配置文件的外部来源。

如果配置文件包含 __rest 扩展,则在 Linux/macOS 上,对配置文件的读取访问权限必须仅限于运行 mongod / mongos 进程的用户。

允许用户指定 shell 或终端作为配置文件选项或完整配置文件的外部来源。

如果配置文件包含 __exec 扩展,则在 Linux/macOS 上,对配置文件的写入访问权限必须仅限于运行 mongod / mongos 进程的用户。

有关完整文档,请参阅自管理 MongoDB 的外部配置值。

如要使用配置文件来配置 mongod 或 mongos,请使用 --config 选项或 -f 选项指定配置文件,如以下示例所示:

mongod --config /etc/mongod.conf
mongos --config /etc/mongos.conf

您还可以使用 -f 别名:

mongod -f /etc/mongod.conf
mongos -f /etc/mongos.conf

如果您从程序包安装并使用系统的初始化脚本启动了 MongoDB,那么您已经在使用配置文件了。

如果在配置文件中使用扩展指令,则在启动 mongod 或 mongos 时必须包含 --configExpand 选项。例如:

mongod --config /etc/mongod.conf --configExpand "rest,exec"
mongos --config /etc/mongos.conf --configExpand "rest,exec"

如果配置文件包含扩展指令,而您在启动 mongod / mongos 时没有在 --configExpand 选项中指定该指令,则 mongod / mongos 将无法启动。

systemLog:
verbosity: <int>
quiet: <boolean>
traceAllExceptions: <boolean>
syslogFacility: <string>
path: <string>
logAppend: <boolean>
logRotate: <string>
destination: <string>
timeStampFormat: <string>
component:
accessControl:
verbosity: <int>
command:
verbosity: <int>
# COMMENT additional component verbosity settings omitted for brevity
systemLog.verbosity

类型:整型

默认值:0

组件的默认日志消息详细级别。详细级别决定 MongoDB 输出的信息和调试消息的数量。[2]

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

要对命名组件使用不同的详细级别,请使用该组件的详细级别设置。例如,使用 systemLog.component.accessControl.verbosity 为 ACCESS 组件设置具体的详细级别。

有关特定组件的详细级别设置,请参阅 systemLog.component.<name>.verbosity 设置。

有关设置日志详细级别的各种方法,请参阅配置日志详细级别。

[2]

从版本 4.2 开始,MongoDB 在日志消息中包含调试详细级别(1 至 5 级)。例如,如果详细级别为 2,则 MongoDB 记录 D2。在以前版本中,MongoDB 日志消息仅为调试级别指定 D。

systemLog.quiet

类型:布尔值

默认:false

在尝试限制输出量的安静模式下运行 mongos 或 mongod。

systemLog.quiet 不建议在生产系统中使用,因为它可能会使特定连接期间的追踪问题变得更加困难。

systemLog.traceAllExceptions

类型:布尔值

默认:false

打印用于调试的详细信息。用于额外的日志记录以进行与支持相关的故障排除。

systemLog.syslogFacility

类型:字符串

默认:用户

将消息记录到系统日志时使用的设施级别。您指定的值必须受操作系统的系统日志实现支持。要使用此选项,必须将 systemLog.destination 设置为 syslog。

systemLog.path

类型:字符串

mongod 或 mongos 应将所有诊断日志信息发送到的日志文件路径,而不是标准输出或托管的 系统日志。 MongoDB 会在指定路径创建日志文件。

Linux 包初始化脚本并不希望 systemLog.path 更改为非默认值。如果使用 Linux 包并更改 systemLog.path,则必须使用自己的初始化脚本并禁用内置脚本。

systemLog.logAppend

类型:布尔值

默认:false

当 true、mongos 或 mongod 在实例重新启动时将新条目附加到现有日志文件的末尾。如果没有此选项,mongod 或 mongos 会备份现有日志并创建新文件。

systemLog.logRotate

类型:字符串

默认:重命名

确定轮换服务器日志和/或审核日志时 logRotate 命令的行为。指定 rename 或 reopen:

  • rename 对日志文件进行重命名。

  • reopen 按照典型的 Linux/Unix 日志轮换行为关闭并重新打开日志文件。使用 Linux/Unix logrotate 实用程序时使用 reopen 避免日志丢失。

    如果指定 reopen,还必须将 systemLog.logAppend 设置为 true。

systemLog.destination

类型:字符串

MongoDB 发送所有日志输出的目标。指定 file 或 syslog。如果指定 file,则必须同时指定 systemLog.path。

如果不指定systemLog.destination ,MongoDB 会将所有日志输出发送到标准输出。

警告

syslog 守护进程在记录消息时生成时间戳,而不是在 MongoDB 发出消息时生成时间戳。这可能会导致日志条目的时间戳产生误导,尤其是当系统负载较重时。我们建议对生产系统使用 file 选项,以确保时间戳的准确性。

systemLog.timeStampFormat

类型:字符串

Default: iso8601-local

日志消息中时间戳的时间格式。指定以下值之一:

值
说明

iso8601-utc

以 ISO-8601 格式显示协调通用时间 (UTC) 的时间戳。例如,对于纪元开始时的纽约: 1970-01-01T00:00:00.000Z

iso8601-local

以 ISO-8601 格式显示当地时间的时间戳。例如,对于纪元开始时的纽约: 1969-12-31T19:00:00.000-05:00

注意

时间戳格式不再支持 ctime。ctime 格式日期的示例为:Wed Dec 31 18:17:54.811。

systemLog:
component:
accessControl:
verbosity: <int>
command:
verbosity: <int>
# COMMENT some component verbosity settings omitted for brevity
replication:
verbosity: <int>
election:
verbosity: <int>
heartbeats:
verbosity: <int>
initialSync:
verbosity: <int>
rollback:
verbosity: <int>
storage:
verbosity: <int>
journal:
verbosity: <int>
recovery:
verbosity: <int>
write:
verbosity: <int>

注意

从版本 4.2 开始,MongoDB 在日志消息中包含调试详细级别(1 至 5 级)。例如,如果详细级别为 2,则 MongoDB 记录 D2。在以前版本中,MongoDB 日志消息仅为调试级别指定 D。

systemLog.component.assert.verbosity

类型:整型

默认值:0

MongoDB 中用户操作遇到的断言的日志消息详细程度。通常,当操作返回错误时,会触发断言。请参阅 ASSERT 组件。

systemLog.component.accessControl.verbosity

类型:整型

默认值:0

访问控制相关组件的日志信息详细级别。请参阅 ACCESS 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.command.verbosity

类型:整型

默认值:0

与命令相关的组件的日志消息详细级别。请参阅 COMMAND 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.control.verbosity

类型:整型

默认值:0

与控制操作相关的组件的日志消息详细级别。请参阅 CONTROL 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.ftdc.verbosity

类型:整型

默认值:0

与诊断数据集合操作相关的组件的日志消息详细级别。请参阅 FTDC 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.geo.verbosity

类型:整型

默认值:0

与地理空间分析操作相关的组件的日志消息详细级别。请参阅 GEO 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.index.verbosity

类型:整型

默认值:0

与索引操作相关的组件的日志消息详细级别。请参阅 INDEX 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.network.verbosity

类型:整型

默认值:0

与网络操作相关的组件的日志消息详细级别。请参阅 NETWORK 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.query.verbosity

类型:整型

默认值:0

与查询操作相关的组件的日志消息详细级别。请参阅 QUERY 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.query.rejected.verbosity

类型:整型

默认值:0

8.0版本新增。

与拒绝的查询操作相关的组件的日志消息详细程度。有关详细信息,请参阅 REJECTED 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.queryStats.verbosity

类型:整型

默认值:0

与 $queryStats 调用相关组件的日志消息详细级别。请参阅 QUERYSTATS 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是默认的日志详细程度级别,仅包括信息性消息。在此级别上不记录 $queryStats 调用。

  • 1 到 2 会增加详细级别,以包含algorithm为 "hmac-sha-256" 的 $queryStats 调用。所有 HMAC 密钥均已被隐藏。

  • 3 到 5 会增加详细级别,以包括 $queryStats 个调用,其中 algorithm 是 "hmac-sha-256",以及相应的结果。每个结果都有自己的条目,最后一个条目带有字符串 "we finished"。

systemLog.component.replication.verbosity

类型:整型

默认值:0

复制相关组件的日志信息详细级别。请参阅 REPL 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.replication.election.verbosity

类型:整型

默认值:0

与选举相关组件的日志信息详细级别。请参阅 ELECTION 组件。

如果未设置 systemLog.component.replication.election.verbosity,则 systemLog.component.replication.verbosity 级别也适用于选举组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.replication.heartbeats.verbosity

类型:整型

默认值:0

与心跳相关组件的日志消息详细级别。请参阅 REPL_HB 组件。

如果未设置 systemLog.component.replication.heartbeats.verbosity,则 systemLog.component.replication.verbosity 级别也适用于心跳组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.replication.initialSync.verbosity

类型:整型

默认值:0

与 InitialSync 相关的组件的日志消息详细级别。请参阅 INITSYNC 组件。

如果未设置 systemLog.component.replication.initialSync.verbosity,则 systemLog.component.replication.verbosity 级别也适用于 initialSync 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.replication.rollback.verbosity

类型:整型

默认值:0

与回滚相关的组件的日志消息详细程度。请参阅 ROLLBACK 组件。

如果未设置 systemLog.component.replication.rollback.verbosity,则 systemLog.component.replication.verbosity 级别也适用于回滚组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.sharding.verbosity

类型:整型

默认值:0

分片相关组件的日志信息详细级别。请参阅 SHARDING 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.command.slowInProgress.verbosity

类型:整型

默认值:0

与进行中的慢速查询相关的组件的日志消息详细级别。有关更多信息,请参阅 operationProfiling.slowOpInProgressThresholdMs。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.verbosity

类型:整型

默认值:0

与存储相关的组件的日志消息详细级别。请参阅 STORAGE 组件。

如果未设置 systemLog.component.storage.journal.verbosity,则 systemLog.component.storage.verbosity 级别也适用于日志记录组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.journal.verbosity

类型:整型

默认值:0

与日志相关的组件的日志消息详细级别。请参阅 JOURNAL 组件。

如果未设置 systemLog.component.storage.journal.verbosity,则日志记录组件具有与父存储组件相同的详细程度:即,如果已设置,则为 systemLog.component.storage.verbosity 级别,否则为默认详细程度。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.recovery.verbosity

类型:整型

默认值:0

与恢复相关的组件的日志消息详细级别。请参阅 RECOVERY 组件。

如果未设置 systemLog.component.storage.recovery.verbosity,则 systemLog.component.storage.verbosity 级别也适用于恢复组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎相关的组件的日志消息详细级别。请参阅 WT 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtBackup.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的备份操作相关的组件的日志消息详细程度。请参阅 WTBACKUP 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtCheckpoint.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的检查点操作相关的组件的日志消息详细程度。请参阅 WTCHKPT 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtCompact.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的压实操作相关的组件的日志消息详细程度。请参阅 WTCMPCT 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtEviction.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的逐出操作相关的组件的日志消息详细程度。请参阅 WTEVICT 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtHS.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的历史记录存储操作相关的组件的日志消息详细程度。请参阅 WTHS 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtRecovery.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的恢复操作相关的组件的日志消息详细程度。请参阅 WTRECOV 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtRTS.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的回滚到稳定 (RTS) 操作相关组件的日志消息详细程度。请参阅 WTRTS 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtSalvage.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的数据打捞 (salvage) 操作相关的组件的日志消息详细程度。请参阅 WTSLVG 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtTimestamp.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎使用的时间戳相关的组件的日志消息详细程度。请参阅 WTTS 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtTransaction.verbosity

类型:整型

默认:-1

5.3版本新增。

WiredTiger 存储引擎执行的事务操作相关组件的日志消息详细程度。请参阅 WTTXN 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtVerify.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的验证操作相关的组件的日志消息详细程度。请参阅 WTVRFY 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.storage.wt.wtWriteLog.verbosity

类型:整型

默认:-1

5.3版本新增。

与 WiredTiger 存储引擎执行的日志写入操作相关的组件的日志消息详细程度。请参阅 WTWRTLOG 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.transaction.verbosity

类型:整型

默认值:0

与事务相关组件的日志信息详细级别。请参阅 TXN 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

systemLog.component.write.verbosity

类型:整型

默认值:0

与写入操作相关的组件的日志消息详细级别。请参阅 WRITE 组件。

详细程度级别的范围可以从 0 到 5:

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 1 到 5 提高详细程度以包括调试消息。

processManagement:
fork: <boolean>
pidFilePath: <string>
timeZoneInfo: <string>
processManagement.fork

类型:布尔值

默认:false

启用守护进程模式,在背景中运行mongos或mongod进程。默认情况下,mongos 或 mongod 不作为守护进程运行。要将 mongos 或 mongod 用作守护进程,请设置 processManagement.fork 或使用处理守护进程的控制进程(示例 systemd)。

Windows 不支持 processManagement.fork 选项。

Linux 包初始化脚本并不希望 processManagement.fork 更改为非默认值。如果使用 Linux 包并更改 processManagement.fork,则必须使用自己的初始化脚本并禁用内置脚本。

注意

或者,您可以将系统上的 MONGODB_CONFIG_OVERRIDE_NOFORK 环境变量设置为 true,以在背景运行 mongos 或 mongod 进程。如果设置了环境变量,则会覆盖 processManagement.fork 的设置。

processManagement.pidFilePath

类型:字符串

指定文件位置以存储 mongos 或 mongod 进程的进程 ID (PID)。运行 mongod 或 mongos 进程的用户必须能够写入此路径。如果未指定 processManagement.pidFilePath 选项,进程将不创建 PID 文件。此选项通常仅在与 processManagement.fork 设置结合使用时才有用。

注意

Linux

在 Linux 上,PID 文件管理通常由发行版的初始化系统负责:通常是 /etc/init.d 目录中的服务文件,或是使用 systemctl 注册的 systemd 单元文件。仅当您未使用这些初始化系统时,才使用 processManagement.pidFilePath 选项。有关更多信息,请参阅操作系统的相关安装指南。

注意

macOS

在 macOS 上,PID 文件管理通常由 brew 处理。仅当您的 macOS 系统上未使用 brew 时,才使用 processManagement.pidFilePath 选项。有关更多信息,请参阅适用于您的操作系统的相应《安装指南》。

processManagement.timeZoneInfo

类型:字符串

加载时区数据库的完整路径。如果未提供此选项,则 MongoDB 将使用内置的时区数据库。

Linux 和 macOS 软件包中包含的配置文件默认将时区数据库设置为 /usr/share/zoneinfo 。

内置时区数据库是 Olson/IANA 时区数据库 的副本。它随着 MongoDB 的发布而更新,但时区数据库的发布周期与 MongoDB 的发布周期不同。时区数据库的最新版本可在我们的下载网站上找到。

警告

MongoDB使用第三方 timelib 库提供时区之间的准确转换。由于最近的更新,timelib 可能会在旧版本的MongoDB中创建不准确的时区域转换。

要在 之前的MongoDB版本中显式链接到时区域数据库,下载时区域数据库。并使用5.0 timeZoneInfo参数。

在版本 5.0 中进行了更改:

MongoDB删除了 net.serviceExecutor 配置选项和相应的 --serviceExecutor 命令行选项。

net:
port: <int>
bindIp: <string>
bindIpAll: <boolean>
maxIncomingConnections: <int>
ipv6: <boolean>
unixDomainSocket:
enabled: <boolean>
pathPrefix: <string>
filePermissions: <int>
tls:
certificateSelector: <string>
clusterCertificateSelector: <string>
mode: <string>
certificateKeyFile: <string>
certificateKeyFilePassword: <string>
clusterFile: <string>
clusterPassword: <string>
CAFile: <string>
clusterCAFile: <string>
clusterAuthX509:
attributes: <string>
extensionValue: <string>
CRLFile: <string>
allowConnectionsWithoutCertificates: <boolean>
allowInvalidCertificates: <boolean>
allowInvalidHostnames: <boolean>
disabledProtocols: <string>
FIPSMode: <boolean>
logVersions: <string>
compression:
compressors: <string>
net.port

类型:整型

默认值:

  • 27017,适用于 mongod(如果不是分片成员或配置服务器成员)或 mongos 实例

  • 27018 如果 mongod 是 shard member

  • 如果 mongod 是配置服务器节点,则 27019

MongoDB 实例监听客户端连接的 TCP 端口。

net.port 选项接受 0 和 65535 之间的值范围。将端口设置为 0 会将 mongos 或 mongod 配置为使用操作系统分配的任意端口。

net.bindIp

类型:字符串

默认值:localhost

mongos 或 mongod 应该监听客户端连接的主机名和/或 IP 地址和/或完整 Unix 域套接字路径。您可以将 mongos 或 mongod 连接到任何接口。要绑定到多个地址,请输入逗号分隔值的列表。

例子

localhost,/tmp/mongod.sock

您可以指定 IPv4 和 IPv6 解决方案,或解析为 IPv4 或 IPv6 地址的主机名。

例子

localhost, 2001:0DB8:e132:ba26:0d5c:2774:e7f9:d513

注意

如果将 IPv6 地址或解析为 IPv6 地址的主机名称指定为 net.bindIp,则必须使用 net.ipv6 : true 启动 mongos 或 mongod,才能启用 IPv6 支持。将 IPv6 地址指定为 net.bindIp 不会启用 IPv6 支持。

如果指定链路本地 IPv6 地址 (fe80::/10),则必须将区域索引附加到该地址(即fe80::<address>%<adapter-name>)。

例子

localhost,fe80::a00:27ff:fee0:1fcf%enp0s3

重要

要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。

在水平分割网络配置下,请使用主机名而非 IP 地址来配置集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证,因而不会启动。

警告

将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。

有关 IP 绑定的更多信息,请参阅自托管部署中的 IP 绑定文档。

要绑定到所有 IPv4 地址,请输入 0.0.0.0。

要绑定到所有 IPv4 和 IPv6 地址,请输入 ::,0.0.0.0 或星号 "*"(将星号括在引号中以区别于 YAML 别名节点)。或者,使用 net.bindIpAll 设置。

注意

  • net.bindIp 和 net.bindIpAll 是互斥的。也就是说,您可以指定其中之一,但不能同时指定两者。

  • 命令行选项 --bind_ip 会覆盖配置文件设置 net.bindIp。

要为水平分割 DNS 配置集群节点,使用主机名称,而非 IP 地址。

从 MongoDB v5.0 开始,replSetInitiate 和 replSetReconfig 拒绝使用 IP 地址而不是主机名的配置。

使用 disableSplitHorizonIPCheck 修改无法更新为使用主机名的节点。该参数仅适用于配置命令。

mongod 和 mongos 在初创企业时不依赖 disableSplitHorizonIPCheck 进行验证。使用 IP 地址而非主机名的旧版 mongod 和 mongos 实例可以在升级后启动。

配置 IP 地址的实例会记录警告,要求使用主机名称而非 IP 地址。

net.bindIpAll

类型:布尔值

默认:false

如果为 true,则 mongos 或 mongod 实例将绑定到所有 IPv4 地址(即0.0.0.0)。如果 mongos 或 mongod 以 net.ipv6 : true 开头,则 net.bindIpAll 也会绑定到所有 IPv6 地址(即::)。

mongos 如果以 net.ipv6 : true 启动,则 mongod 仅支持 IPv6。仅指定 net.bindIpAll 并不能启用 IPv6 支持。

警告

将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。

有关 IP 绑定的更多信息,请参阅 IP 绑定文档。

或者,将net.bindIp 设立为::,0.0.0.0 或星号"*" (将星号括在引号中以区别于 YAML 别名节点)以绑定到所有IP地址。

注意

net.bindIp 和 net.bindIpAll 是互斥的。同时指定两个选项会导致 mongos 或 mongod 抛出错误并终止。

net.maxIncomingConnections

类型:整型

在版本 8.1 中进行了更改:(以及 8.0.16、7.0.31)

Default (Windows): 1,000,000
Default (Linux): (RLIMIT_NOFILE / 2) * 0.8

注意

在Linux上,net.maxIncomingConnections 必须小于或等于 (RLIMIT_NOFILE / 2) * 0.8 的值。如果您尝试设立更大的值, MongoDB会自动使用默认。

mongos 或 mongod 接受的最大并行连接数。如果此设置高于操作系统配置的最大连接跟踪阈值,则此设置无效。

不要为此选项分配过低的值,否则您可能会在正常的应用程序操作期间遇到错误。

如果您的客户端创建了多个连接,并且允许这些连接超时而不是将其关闭,那么这对于 mongos 特别有用。

在此情况下,请将 maxIncomingConnections 的值设为略高于客户端创建的最大连接数或连接池的最大大小。

此设置可防止 mongos 在各分片上造成连接峰值。此类峰值可能会扰乱分片集群的操作和内存分配。

net.wireObjectCheck

自版本 9.0 起已弃用。

类型:布尔值

默认值:true

当为 true 时,mongod 或 mongos 实例会在收到客户端请求时验证所有请求,防止客户端将格式不正确或无效的 BSON 插入 MongoDB 数据库。

对于子文档嵌套程度较高的对象,net.wireObjectCheck 对性能的影响很小。

net.ipv6

类型:布尔值

默认:false

将 net.ipv6 设置为 true 以启用 IPv6 支持。mongos/mongod 默认禁用 IPv6 支持。

设置 net.ipv6 不会指示 mongos/mongod 侦听任何本地 IPv6 地址或接口。要将 mongos/mongod 配置为侦听 IPv6 接口,您必须:

  • 使用一个或多个 IPv6 地址或解析为 IPv6 地址的主机名配置 net.bindIp,或

  • 将 net.bindIpAll 设置为 true。

net:
unixDomainSocket:
enabled: <boolean>
pathPrefix: <string>
filePermissions: <int>
net.unixDomainSocket.enabled

类型:布尔值

默认值:true

启用或禁用 UNIX 域套接字上的监听。net.unixDomainSocket.enabled 仅应用于基于 Unix 的系统。

当 net.unixDomainSocket.enabled 为 true 时, mongos 或 mongod 会侦听 UNIX 套接字。

mongos 或 mongod 进程始终侦听 UNIX 套接字,除非满足以下任一条件:

  • net.unixDomainSocket.enabled is false

  • --nounixsocket 已设置。命令行选项优先于配置文件设置。

  • net.bindIp 未设置

  • net.bindIp 未指定 localhost 或其关联的 IP 地址

从官方 Debian 和 Redmongosmongod Hat 或 CentOS 包中安装的 或 ,其bind_ip 配置默认设置为127.0.0.1 。

net.unixDomainSocket.pathPrefix

类型:字符串

默认:/tmp

UNIX 套接字的路径。net.unixDomainSocket.pathPrefix 仅应用于基于 Unix 的系统。

如果此选项没有值,则 mongos 或 mongod 进程会创建一个以 /tmp 为前缀的套接字。MongoDB 创建并侦听 UNIX 套接字,除非满足以下条件之一:

  • net.unixDomainSocket.enabled is false

  • --nounixsocket 已设置

  • net.bindIp 未设置

  • net.bindIp 未指定 localhost 或其关联的 IP 地址

net.unixDomainSocket.filePermissions

类型:int

默认值:0700

设置 UNIX 域套接字文件的权限。

net.unixDomainSocket.filePermissions 仅适用于基于 Unix 的系统。

注意

tls 选项提供与之前的 ssl 选项相同的功能。

net:
tls:
mode: <string>
certificateKeyFile: <string>
certificateKeyFilePassword: <string>
certificateSelector: <string>
clusterCertificateSelector: <string>
clusterFile: <string>
clusterPassword: <string>
clusterAuthX509:
attributes: <string>
extensionValue: <string>
CAFile: <string>
clusterCAFile: <string>
CRLFile: <string>
allowConnectionsWithoutCertificates: <boolean>
allowInvalidCertificates: <boolean>
allowInvalidHostnames: <boolean>
disabledProtocols: <string>
FIPSMode: <boolean>
logVersions: <string>
net.tls.mode

类型:字符串

对所有网络连接启用 TLS 模式。net.tls.mode 设置的参数可以是以下之一:

值
说明

disabled

该服务器不使用 TLS。

allowTLS

服务器之间的连接不使用 TLS。对于传入连接,服务器既接受 TLS,也接受非 TLS。

preferTLS

服务器之间的连接使用 TLS。对于传入连接,服务器既接受 TLS,也接受 TLS。

requireTLS

服务器仅使用并接受 TLS 加密连接。

如果未指定 --tlsCAFile 或 tls.CAFile 且您未使用 X.509 身份验证,则必须将 tlsUseSystemCA 参数设置为 true。这使得 MongoDB 在连接到启用 TLS 的服务器时使用系统范围的 CA 证书存储区。

如果使用 X.509身份验证,则必须指定 --tlsCAFile 或 tls.CAFile,除非使用 --tlsCertificateSelector。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.certificateKeyFile

类型:字符串

包含 TLS 证书和密钥的 .pem 文件。

在 macOS 或 Windows 上,可以使用 net.tls.certificateSelector 设置指定来自操作系统安全证书存储区的证书,而不是 PEM 密钥文件。certificateKeyFile 和 net.tls.certificateSelector 是互斥的。您只能指定一个。

  • 在 Linux/BSD 上,当启用 TLS 时,您必须指定 net.tls.certificateKeyFile。

  • 在 Windows 或 macOS 上,当启用 TLS 时,您必须指定 net.tls.certificateKeyFile 或 net.tls.certificateSelector。

    重要

    仅针对 Windows,MongoDB 不支持加密的 PEM 文件。如果遇到加密的 PEM 文件,则 mongod 无法启动。要在 Windows 上安全地存储和访问用于 TLS 的证书,请使用 net.tls.certificateSelector。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.certificateKeyFilePassword

类型:字符串

用于解密证书密钥文件的密码(即certificateKeyFile)。仅当证书密钥文件已加密时才使用 net.tls.certificateKeyFilePassword 选项。在所有情况下,mongos 或 mongod 会对所有日志记录和报告输出中的密码进行脱敏。

在 Linux/BSD 上,如果 PEM 文件中的私钥已加密且您未指定 net.tls.certificateKeyFilePassword 选项,则 MongoDB 会提示您输入密码。

有关更多信息,请参阅 TLS/SSL 证书密码。

在 macOS 上,如果 PEM 文件中的私钥已加密,则必须明确指定 net.tls.certificateKeyFilePassword 选项。或者,您可以使用安全系统存储中的证书(请参阅 net.tls.certificateSelector)而不是 PEM 密钥文件,或使用未加密的 PEM 文件。

在 Windows 上,MongoDB 不支持加密证书。如果 mongod 遇到加密的 PEM 文件,则会失败。请改用 net.tls.certificateSelector。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.certificateSelector

类型:字符串

指定证书属性,以便从操作系统的证书存储区中选择匹配的证书以用于 TLS/SSL。在 Windows 和 macOS 上可用,以作为 net.tls.certificateKeyFile 的替代方案。

net.tls.certificateKeyFile 和 net.tls.certificateSelector 选项互斥。您只能指定一个。

net.tls.certificateSelector 接受格式为 <property>=<value> 的参数,其中属性可以是以下之一:

属性
值类型
说明

subject

ASCII 字符串

证书上的主题名称或公用名

thumbprint

十六进制字符串

以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。

thumbprint 有时称为 fingerprint。

在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。

mongod 搜索操作系统的安全证书存储区,查找验证指定 TLS 证书的完整证书链所需的 CA 证书。具体来说,安全证书存储区必须包含根 CA 以及构建 TLS 证书的完整证书链所需的任何中间 CA 证书。

警告

如果您使用 net.tls.certificateSelector 和/或 net.tls.clusterCertificateSelector,我们不建议使用 net.tls.CAFile 或 net.tls.clusterFile 来指定根 CA 证书和中间 CA 证书

例如,如果 TLS 证书是使用单个根 CA 证书签署的,则安全证书存储区必须包含相应的根 CA 证书。如果 TLS 证书是使用中间 CA 证书签署的,则安全证书存储区必须包含相应的中间 CA 证书和 根 CA 证书。

注意

针对以下情况无法使用 rotateCertificates 命令行或 db.rotateCertificates() shell 方法:将 net.tls.certificateSelector 或 --tlsCertificateSelector 集合用于 thumbprint 时

net.tls.clusterCertificateSelector

类型:字符串

指定证书属性,以便从操作系统的证书存储区中选择匹配的证书以用于内部 X.509 成员身份验证。

在 Windows 和 macOS 上可用,以作为 net.tls.clusterFile 的替代方案。

net.tls.clusterFile 和 net.tls.clusterCertificateSelector 选项互斥。您只能指定一个。

net.tls.clusterCertificateSelector 接受格式为 <property>=<value> 的参数,其中属性可以是以下之一:

属性
值类型
说明

subject

ASCII 字符串

证书上的主题名称或公用名

thumbprint

十六进制字符串

以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。

thumbprint 有时称为 fingerprint。

mongod 搜索操作系统的安全证书存储区,查找验证指定集群证书的完整证书链所需的 CA 证书。具体来说,安全证书存储区必须包含根 CA 以及构建集群证书的完整证书链所需的任何中间 CA 证书。

警告

如果使用 net.tls.certificateSelector 和/或 net.tls.clusterCertificateSelector,我们不建议使用 net.tls.CAFile 或 net.tls.clusterCAFile 来指定根和中间 CA 证书。

例如,如果集群证书是使用单个根 CA 证书签署的,则安全证书存储区必须包含该根 CA 证书。如果集群证书是使用中间 CA 证书签署的,则安全证书存储区必须包含中间 CA 证书和根 CA 证书。

如果显示的 x.509 证书在 mongod/mongos 主机系统时间后的 30 天内过期,则 mongod / mongos 会在连接时记录警告。

net.tls.clusterFile

类型:字符串

.pem 文件,其中包含用于集群或副本集的成员身份验证的 X.509 证书密钥文件。

在 macOS 或 Windows 上,您可以使用 net.tls.clusterCertificateSelector 选项从操作系统的安全证书存储区中指定证书,而不是 PEM 密钥文件。net.tls.clusterFile 和 net.tls.clusterCertificateSelector 选项互斥。您只能指定一个。

如果 net.tls.clusterFile 没有为内部集群身份验证指定 .pem 文件或备选 net.tls.clusterCertificateSelector,则集群将使用 certificateKeyFile 设置中指定的 .pem 文件或 net.tls.certificateSelector 返回的证书。

如果使用 X.509身份验证,则必须指定 --tlsCAFile 或 tls.CAFile,除非使用 --tlsCertificateSelector。

如果显示的 x.509 证书在 mongod/mongos 主机系统时间后的 30 天内过期,则 mongod / mongos 会在连接时记录警告。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

重要

Windows 仅适用,MongoDB 不支持 PEM 加密文件。如果遇到 PEM 加密文件,则 mongod 无法启动。要安全存储和访问用于 Windows 成员身份验证的证书,请使用 net.tls.clusterCertificateSelector。

net.tls.clusterPassword

类型:字符串

用于解密使用 --sslClusterFile 指定的 X.509 证书密钥文件的密码。仅在证书密钥文件已加密的情况下使用 net.tls.clusterPassword 选项。在所有情况下,mongos 或 mongod 都会对所有日志记录和报告输出中的密码进行脱敏。

在 Linux/BSD 上,如果 X.509 文件中的私钥已加密且未指定 net.tls.clusterPassword 选项,MongoDB 将提示输入密码。

有关更多信息,请参阅 ssl-certificate-password。

在 macOS 上,如果 X.509 文件中的私钥已加密,则必须明确指定 net.tls.clusterPassword 选项。此外,您可以使用安全系统存储区中的证书(请参阅 net.tls.clusterCertificateSelector)而不是集群 PEM 文件,或使用未加密的 PEM 文件。

在 Windows 上,MongoDB 不支持加密证书。如果 mongod 遇到加密的 PEM 文件,则会失败。使用 net.tls.clusterCertificateSelector。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.clusterAuthX509

7.0版本新增。

net:
tls:
clusterAuthX509:
attributes: <string>
extensionValue: <string>
net.tls.clusterAuthX509.attributes

类型:字符串

7.0版本新增。

指定服务器期望集群成员节点在其证书使用者名称中包含的一设立X.509 标识名 (DN) 属性和值。这样,您就可以使用不包含 DC、O 和 OU 值的证书对集群成员进行身份验证。

设置 attributes 后,MongoDB 使用 DN 匹配证书并忽略扩展值。

net.tls.clusterAuthX509.extensionValue

类型:字符串

7.0版本新增。

指定与MongoDB 集群成员资格扩展 OID 1.3.6.1.4.1.34601.2.1.2 相对应的扩展值。服务器期望集群成员节点在其证书中包含此扩展。这样,您就可以使用不包含 DC、O 和 OU 值的证书对集群成员进行身份验证。

当您设立extensionValue 时, MongoDB使用证书扩展值匹配证书并忽略标识名 (DN)。

创建 OID 为 1.3.6.1.4.1.34601.2.1.2 的证书时,请考虑以下准则:

  • 保持扩展值低于 128 字节。

  • 使用单个 UTF8 字符串作为扩展的内部值。 mongod 不接受其他字符串类型。

  • 如果使用 OpenSSL,则必须显式指定 ASN.1 类型,以便对 UTF8 字符串进行编码。 示例:

    • 在命令行,指定 -addext: 1.3.6.1.4.1.34601.2.1.2=ASN1:UTF8String:<your-value>。

    • 在 OpenSSL 配置文件中,指定 1.3.6.1.4.1.34601.2.1.2 = ASN1:UTF8String:<your-value>。

    警告

    如果省略 ASN1:UTF8String:,OpenSSL 可能会选择不同的编码或原始八位字节,而 mongod 会拒绝并使用“不支持的标签”或“未知 DER”标签。

net.tls.CAFile

类型:字符串

.pem 文件,其中包含来自证书颁发机构的根证书链。使用相对或绝对路径指定 .pem 文件的文件名。

仅限 Windows/macOS
如果使用net.tls.certificateSelector 和/或net.tls.clusterCertificateSelector ,请勿使用 net.tls.CAFile来指定根和中间 CA 证书。将验证 net.tls.certificateSelector 和/或 net.tls.clusterCertificateSelector 证书的完整信任链所需的所有 CA 证书存储在安全证书存储区中。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.clusterCAFile

类型:字符串

包含用于验证建立连接的客户端提供的证书的来自证书授权机构的根证书链的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。net.tls.clusterCAFile 要求设置 net.tls.CAFile。

如果 net.tls.clusterCAFile 未指定 .pem 文件用于验证建立连接的客户端的证书,集群将使用 net.tls.CAFile 选项中指定的 .pem 文件。

net.tls.clusterCAFile 允许您使用单独的证书颁发机构来验证 TLS 握手的客户端到服务器和服务器到客户端部分。

从 4.0 开始,在 macOS 或 Windows 上,您可以使用操作系统安全存储区中的证书,而不是 PEM 密钥文件。请参阅 net.tls.clusterCertificateSelector。使用安全存储时,您不需要但可以指定 net.tls.clusterCAFile。

仅限 Windows/macOS
如果使用net.tls.certificateSelector 和/或net.tls.clusterCertificateSelector ,请勿使用 net.tls.clusterCAFile来指定根和中间 CA 证书。将验证 net.tls.certificateSelector 和/或 net.tls.clusterCertificateSelector 证书的完整信任链所需的所有 CA 证书存储在安全证书存储区中。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.CRLFile

类型:字符串

包含证书吊销列表的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

注意

  • 在 macOS 上不能指定 net.tls.CRLFile。相反,您可以使用系统 SSL 证书存储区,该存储区使用 OCSP(在线证书状态协议)来验证证书的吊销状态。要使用系统 SSL 证书存储区,请参阅 net.tls.certificateSelector。

  • 为了检查证书吊销状况,MongoDB 默认enables OCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.allowConnectionsWithoutCertificates

类型:布尔值

默认:false

如果为 false,则所有客户端都必须提供客户端 TLS 证书。如果为 true,则客户端无需提供客户端证书,但 mongod 或 mongos 会对 TLS/SSL 连接进行加密。

如果客户端提供客户端证书,则无论为 net.tls.allowConnectionsWithoutCertificates、mongos 或 mongod 设定什么值, 或 都会使用 CAFile 指定的根证书链或系统 CA 存储库(如果 tlsUseSystemCA 为 true)执行证书验证,并拒绝证书无效的客户端。

如果您的混合部署包含不向或不能向 mongos 或 mongod 提供证书的客户端,请使用 net.tls.allowConnectionsWithoutCertificates 选项。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

net.tls.allowInvalidCertificates

类型:布尔值

默认:false

启用或禁用集群中其他服务器上的 TLS 证书的验证检查,并允许使用无效证书进行连接。

注意

如果您在使用 X.509 身份验证时指定 --tlsAllowInvalidCertificates 或 tls.allowInvalidCertificates: true,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。

使用 net.tls.allowInvalidCertificates 设置时,MongoDB 会记录有关使用无效证书的警告。

有关 TLS 和 MongoDB 的更多信息,请参阅 为 TLS/SSL 加密配置 MongoDB 实例 和 自管理内部/成员身份验证。

net.tls.allowInvalidHostnames

类型:布尔值

默认:false

当 net.tls.allowInvalidHostnames 为 true 时,MongoDB 将禁用 TLS 证书中的主机名验证。这允许 mongod 或 mongos 连接到集群中的其他 MongoDB 实例,即使其证书的主机名与指定的主机名不匹配也是如此。

有关 TLS 和 MongoDB 的更多信息,请参阅 configure-mongod-mongos-for-tls-ssl。

net.tls.disabledProtocols

类型:字符串

防止使用 TLS 运行的 MongoDB Server 接受使用特定协议的传入连接。要指定多个协议,请使用逗号分隔的协议列表,但不要在逗号后使用空格。如果在协议名称前包含空格,服务器会将其解释为无法识别的协议并且不会启动。

net.tls.disabledProtocols 可识别以下协议:TLS1_0、TLS1_1、TLS1_2 和 TLS1_3。

  • 在 macOS 上,您无法在禁用 TLS1_1 的情况下,让 TLS1_0 和 TLS1_2 同时启用。您必须至少禁用后两者中的一个,比如 TLS1_0,TLS1_1。

  • 若要列出多个协议,请指定为逗号分隔的协议列表,逗号后不带空格。例如 TLS1_0,TLS1_1。

  • 指定无法识别的协议或在逗号后包含空格,将会阻止服务器启动。

  • 指定的禁用协议将覆盖任何默认禁用的协议。

如果系统上可用 TLS 1.1+,MongoDB 将禁用 TLS 1.0。要启用 TLS 1.0,请将 none 指定为 net.tls.disabledProtocols。

副本集和分片集群的成员必须至少使用一个共同协议。

net.tls.FIPSMode

类型:布尔值

默认:false

启用或禁用 mongos 或 mongod 的 TLS 库的 FIPS 模式。您的系统必须有符合 FIPS 标准的库,才能使用 net.tls.FIPSMode 选项。

注意

只有 MongoDB Enterprise 支持与 FIPS 兼容的 TLS/SSL。有关更多信息,请参阅为 FIPS 配置 MongoDB 。

net.tls.logVersions

类型:字符串

指示 mongos 或 mongod 在客户端使用指定 TLS 版本连接时记录日志消息。

指定单个 TLS 版本或以逗号分隔的多个 TLS 版本的列表。

例子

要指示 mongos 或 mongod 在客户端使用 TLS 1.2 或 TLS 1.3 连接时记录日志,请将 net.tls.logVersions 设置为 "TLS1_2,TLS1_3"。

net:
compression:
compressors: <string>
net.compression.compressors

Default: snappy,zstd,zlib

指定默认压缩程序用于此 mongod 或 mongos 实例与以下对象之间的通信:

  • 部署的其他成员(如果实例是副本集或分片集群的一部分)

  • 支持 OP_COMPRESSED 消息格式的驱动程序。

MongoDB 支持以下压缩程序:

要禁用网络压缩,请将值设置为 disabled。

重要

当双方都启用网络压缩时,消息就会被压缩。否则,各方之间的消息不会被压缩。

如果指定多个压缩程序,则列出压缩程序的顺序与通信发起者同样重要。示例,如果 mongosh 指定以下网络压缩程序 zlib,snappy 且 mongod 指定 snappy,zlib,则 mongosh 和 mongod 之间的消息使用 zlib。

如果各方未分享至少一个通用压缩程序,则各方之间的消息将不会被压缩。示例,如果 mongosh 指定网络压缩程序 zlib 且 mongod 指定 snappy,则 mongosh 与 mongod 之间的消息将不会被压缩。

security:
keyFile: <string>
clusterAuthMode: <string>
authorization: <string>
transitionToAuth: <boolean>
javascriptEnabled: <boolean>
redactClientLogData: <boolean>
clusterIpSourceAllowlist:
- <string>
sasl:
hostName: <string>
serviceName: <string>
saslauthdSocketPath: <string>
enableEncryption: <boolean>
encryptionCipherMode: <string>
encryptionKeyFile: <string>
kmip:
keyIdentifier: <string>
rotateMasterKey: <boolean>
serverName: <string>
port: <string>
clientCertificateFile: <string>
clientCertificatePassword: <string>
clientCertificateSelector: <string>
serverCAFile: <string>
connectRetries: <int>
connectTimeoutMS: <int>
ldap:
servers: <string>
bind:
method: <string>
saslMechanisms: <string>
queryUser: <string>
queryPassword: <string | array>
useOSDefaults: <boolean>
transportSecurity: <string>
timeoutMS: <int>
userToDNMapping: <string>
authz:
queryTemplate: <string>
validateLDAPServerConfig: <boolean>
security.keyFile

类型:字符串

密钥文件的路径,该文件存储 MongoDB 实例用于在 分片集群或 副本集中相互身份验证的共享秘钥。keyFile 意味着 security.authorization。有关更多信息,请参阅自管理内部/会员身份验证。

用于内部成员身份验证的密钥文件使用 YAML 格式,允许在密钥文件中包含多个密钥。YAML 格式接受以下任一形式:

  • 单个密钥字符串(与早期版本相同)

  • 键字符串序列

YAML 格式与使用文本文件格式的现有单密钥文件兼容。

security.clusterAuthMode

类型:字符串

默认:keyFile

集群身份验证时使用的身份验证方式。如果使用内部 X.509 身份验证,请在此处指定。此选项可为以下值之一:

值
说明

keyFile

使用密钥文件进行身份验证。仅接受密钥文件。

sendKeyFile

用于滚动升级目的。发送密钥文件进行身份验证,但可以同时接受密钥文件和 X.509 证书。

sendX509

用于滚动升级目的。发送 X.509 证书进行身份验证,但可以同时接受密钥文件和 X.509 证书。

x509

推荐。发送 X.509 证书进行身份验证,仅接受 X.509 证书。

如果未指定 --tlsCAFile 或 tls.CAFile 且您未使用 X.509 身份验证,则必须将 tlsUseSystemCA 参数设置为 true。这使得 MongoDB 在连接到启用 TLS 的服务器时使用系统范围的 CA 证书存储区。

如果使用 X.509身份验证,则必须指定 --tlsCAFile 或 tls.CAFile,除非使用 --tlsCertificateSelector。

有关 TLS 和MongoDB 的更多信息,请参阅为 TLS/SSL 加密配置MongoDB实例和连接到启用 TLS 的副本集。

security.authorization

类型:字符串

默认值:已禁用

启用或禁用基于角色的访问控制(RBAC)以管理每个用户对数据库资源和操作的访问。

将此选项设为以下之一:

值
说明

enabled

用户只能访问已获得授权的数据库资源和操作。

disabled

用户可以访问任何数据库并执行任何操作。

有关更多信息,请参阅自管理部署中的基于角色的访问控制。

已在版本 9.0.0:(以及 8.3.9、8.2.13、8.0.30, 7.0.41)

security.authorization 强制值区分大小写。您必须将其准确设立为 enabled 或 disabled。 mongod 在初创企业时拒绝任何其他值。早期版本的MongoDB会静默忽略不正确的大小写,例如 Enabled 或 eNaBlEd,并禁用授权。

security.authorization 设置仅适用于mongod。

security.transitionToAuth

类型:布尔值

默认:false

允许 mongod 或 mongos 接受和创建与部署中其他 mongod 和 mongos 实例之间的经过身份验证和未经身份验证的连接。用于对副本集或分片集群执行从无身份验证配置到内部身份验证的滚动过渡。需要指定内部身份验证机制,例如 security.keyFile。

示例,如果使用密钥文件进行内部身份验证,则 mongod 或 mongos 会使用匹配的密钥文件与部署中的任何 mongod 或 mongos 创建经身份验证的连接。如果安全机制不匹配,则 mongod 或 mongos 将改用未经身份验的连接。

使用 security.transitionToAuth 运行的 mongod 或 mongos 不会强制实施用户访问控制。用户无需任何访问控制检查即可连接到您的部署并执行读取、写入和管理操作。

注意

使用内部身份验证运行且不使用 security.transitionToAuth 的 mongod 或 mongos 要求客户端使用用户访问控制进行连接。更新客户端以使用适当的 用户 连接到 mongod 或 mongos,在不使用 security.transitionToAuth 的情况下重启 mongod 或 mongos 之前。

security.javascriptEnabled

类型:布尔值

默认值:true

重要

从 MongoDB 5.0 开始,Map-reduce 已被弃用。

启用或禁用服务器端 JavaScript 执行。禁用后,您便无法使用可在服务器端执行 JavaScript 代码的操作,如 $where 查询运算符、mapReduce 命令、$accumulator 和 $function。

如果不使用这些操作,请禁用服务器端脚本。

security.javascriptEnabled 可用于 mongod 和 mongos。在早期版本中,该设置仅适用于 mongod。

security.redactClientLogData

类型:布尔值

仅在 MongoDB Enterprise 中可用。

使用 security.redactClientLogData 运行的 mongod 或 mongos 会在登录之前编辑与给定日志事件相关的任何消息。这可防止 mongod 或 mongos 将数据库中存储的潜在敏感数据写入诊断日志。错误或操作代码、行号和源文件名称等元数据在日志中仍然可见。

将 security.redactClientLogData 与 静态加密 和 TLS/SSL(传输加密) 结合使用,以协助合规监管要求。

示例,MongoDB 部署可能会将个人身份信息 (PII) 存储在一个或多个集合中。mongod 或 mongos 日志事件,例如与 CRUD 操作、分片元数据等相关的事件。mongod 或 mongos 可能会将 PII 作为这些日志记录操作的一部分。通过 security.redactClientLogData 运行的 mongod 或 mongos 会在输出到日志之前删除与这些事件相关的任何消息,从而有效地删除了 PII。

由于缺少与日志事件相关的数据,对使用 security.redactClientLogData 运行的 mongod 或 mongos 进行诊断可能会更困难。有关 security.redactClientLogData 对日志输出影响的示例,请参阅进程日志记录手册页面。

在运行的mongod 或mongos 上,使用带有 参数的setParameter redactClientLogData来配置此设置。

security.clusterIpSourceAllowlist

类型:列表

版本 5.0 中的新增功能。

在版本5.2中进行了更改。

IP地址/CIDR(无类域间路由)范围列表, 根据这些地址/CIDR mongod范围验证来自副本集其他成员以及mongos 实例(如果属于分片集群)的身份验证请求。mongod 验证源IP是否明确位于列表中或属于列表中的 CIDR范围。如果IP解决不存在,则服务器不对mongod 或mongos 进行身份验证。

security.clusterIpSourceAllowlist 对未经身份验证启动的 mongod 没有影响。

从 MongoDB 5.2 开始,可以使用 setParameter 在正在运行的 mongod 或 mongos 上配置 security.clusterIpSourceAllowlist。

此示例在运行时更新 security.clusterIpSourceAllowlist,以包括 IP 地址 "1.1.1.1/24"、"2.2.2.2/16" 和 "3.3.3.3"。

db.adminCommand( {
setParameter: 1,
"clusterIpSourceAllowlist": ["1.1.1.1/24", "2.2.2.2/16", "3.3.3.3"]
} );

此示例在运行时更新 security.clusterIpSourceAllowlist 以排除所有 IP 地址:

db.adminCommand( {
setParameter: 1,
"clusterIpSourceAllowlist": null
} );

security.clusterIpSourceAllowlist 对未经身份验证启动的 mongod 没有影响。

security.clusterIpSourceAllowlist 需要将每个 IPv4/6 地址或无类别域间路由 (CIDR)范围指定为 YAML 列表:

security:
clusterIpSourceAllowlist:
- 192.0.2.0/24
- 127.0.0.1
- ::1

重要

确保 security.clusterIpSourceAllowlist 包含 IP 地址或 CIDR 范围,其中包含部署中每个副本集成员或 mongos 的 IP 地址,以确保集群组件之间的正常通信。

security:
enableEncryption: <boolean>
encryptionCipherMode: <string>
encryptionKeyFile: <string>
kmip:
keyIdentifier: <string>
rotateMasterKey: <boolean>
serverName: <string>
port: <int>
clientCertificateFile: <string>
clientCertificatePassword: <string>
clientCertificateSelector: <string>
serverCAFile: <string>
connectRetries: <int>
connectTimeoutMS: <int>
activateKeys: <boolean>
keyStatePollingSeconds: <int>
useLegacyProtocol: <boolean>
security.enableEncryption

类型:布尔值

默认:false

对 WiredTiger 存储引擎启用加密。必须设置为 true,才能传递加密密钥和配置。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.encryptionCipherMode

类型:字符串

默认值:AES256-CBC

用于静态加密的密码模式:

模式
说明

AES256-CBC

采用密码分组链接模式的 256 位高级加密标准

AES256-GCM

采用 Galois/Counter 模式的 256 位高级加密标准

仅在 Linux 上可用。

Windows 上的 MongoDB Enterprise 不再支持将 AES256-GCM 作为静态加密的分组密码算法。仅 Linux 版本支持此用法。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.encryptionKeyFile

类型:字符串

通过 KMIP 以外的进程管理密钥时,本地密钥文件的路径。仅在通过 KMIP 以外的进程管理密钥时设置。如果已使用 KMIP 加密数据,则 MongoDB 会抛出错误。

要求 security.enableEncryption 为 true。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.keyIdentifier

类型:字符串

KMIP 服务器中现有密钥的唯一 KMIP 标识符。包括该设置可将与该标识符关联的密钥作为系统密钥。只能在第一次为 mongod 实例启用加密时使用该设置。要求 security.enableEncryption 为 true。

如果未指定,MongoDB 会请求 KMIP 服务器创建新密钥用作系统密钥。

如果 KMIP 服务器找不到指定标识符的密钥或者数据已使用密钥加密,则 MongoDB 将报告错误。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.rotateMasterKey

类型:布尔值

默认:false

如果为 true,则轮换主密钥并对内部密钥库重新加密。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.serverName

类型:字符串

要连接的 KMIP 服务器的主机名或 IP 地址。要求 security.enableEncryption 为 true。

您可以将多个 KMIP 服务器指定为逗号分隔的列表,例如 server1.example.com,server2.example.com。启动时,mongod 会尝试按列出的顺序与每台服务器建立连接,并选择可以成功建立连接的第一台服务器。KMIP 服务器选择仅在启动时进行。

mongod 启动时验证与 KMIP 服务器的连接。

security.kmip.serverName 中指定的服务器名称必须与 KMIP服务器出示的证书上的主题备用名称SAN 或公用名 CN 相匹配。SAN 可以是系统名称或IP地址。

如果存在 SAN,则 mongod 不会尝试与 CN 配对。

如果 KMIP 服务器的主机名或 IP 地址与 SAN 和 CN 都不匹配,则 mongod 不会启动。

从 MongoDB 4.2 开始,在比较 SAN 时,MongoDB 可以比较 DNS 名称或 IP 地址。在之前的版本中,MongoDB 仅能比较 DNS 名称。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.port

类型:int

默认:5696

用于与 KMIP 服务器通信的端口号。需要 security.kmip.serverName。要求 security.enableEncryption 为 True。

如果使用 security.kmip.serverName 指定多个 KMIP 服务器,则 mongod 将对所有提供的 KMIP 服务器使用通过 security.kmip.port 指定的端口。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.clientCertificateFile

类型:字符串

用于在 KMIP 服务器上对 MongoDB 进行身份验证的 .pem 文件的路径。指定的 .pem 文件必须包含 TLS/SSL 证书和密钥。

如要使用此设置,还必须指定 security.kmip.serverName 设置。

重要

使用security.kmip.clientCertificateFile且 KMIP 服务器强制执行 TLS 1.2时,在 Windows 上使用 KMIP 服务器启用加密会失败。

要在 Windows 上使用 KMIP 启用静态加密,您必须:

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.clientCertificatePassword

类型:字符串

用于解密连接到 KMIP服务器的客户端证书的私钥的密码。 此选项向 KMIP服务器对MongoDB进行身份验证,并要求您提供--kmipClientCertificateFile 。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.clientCertificateSelector

类型:字符串

5.0 版本中的新增功能:

可在 Windows 和 macOS 上用作 security.kmip.clientCertificateFile 的替代方案。

security.kmip.clientCertificateFile 和 security.kmip.clientCertificateSelector 选项互斥。您只能指定一个。

指定证书属性,以便从操作系统的证书存储区中选择匹配的证书来在 KMIP 服务器上对 MongoDB 进行身份验证。

security.kmip.clientCertificateSelector 接受格式为 <property>=<value> 的参数,其中属性可以是以下之一:

属性
值类型
说明

subject

ASCII 字符串

证书上的主题名称或公用名

thumbprint

十六进制字符串

以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。

thumbprint 有时称为 fingerprint。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.serverCAFile

类型:字符串

CA 文件的路径。用于验证客户端与 KMIP 服务器的连接是否安全。

注意

从 4.0 开始,在 macOS 或 Windows 上,您可以使用操作系统安全存储区中的证书,而不是 PEM 密钥文件。请参阅 security.kmip.clientCertificateSelector。使用安全存储时,您不需要但可以指定 security.kmip.serverCAFile。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.connectRetries

类型:int

默认值:0

与 KMIP 服务器初次连接时的重试次数。与 connectTimeoutMS 一起使用可控制 mongod 在两次重试之间等待响应的时长。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.connectTimeoutMS

类型:int

默认值:5000

等待 KMIP 服务器响应的超时时间(以毫秒为单位)。如果指定了connectRetries 设置,则每次重试时,mongod 将等待至使用 connectTimeoutMS 指定的值。

取值不得小于 1000。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

security.kmip.activateKeys

类型:布尔值

默认值:true

5.3版本新增。

在 KMIP 密钥创建后激活所有这些新创建的密钥,然后定期检查这些密钥是否处于活动状态。

如果 security.kmip.activateKeys 为 true,并且您在 KMIP 服务器上有现有密钥,则必须首先激活该密钥,否则 mongod 节点将无法启动。

如果 mongod 使用的密钥转换为非活动状态,则 mongod 节点将关闭,除非 kmipActivateKeys 为 false。为确保您拥有活动密钥,请使用security.kmip.rotateMasterKey。轮换 KMIP 主密钥。

security.kmip.keyStatePollingSeconds

类型:int

默认:900 秒

5.3版本新增。

mongod 轮询 KMIP 服务器以获取有效密钥的频率(以秒为单位)。

要禁用轮询,请将值设置为 -1。

security.kmip.useLegacyProtocol

类型:布尔值

默认:false

7.0 版本新增:(和 6.0.6)

设置为 true 时,mongod 使用 KMIP 协议的 1.0 或 1.1 版,而不是默认版本。KMIP 协议的默认版本是 1.2。

要在 KMIP 1.0 或 1.1 版中使用审核日志加密,必须在启动时指定 auditEncryptKeyWithKMIPGet。

要使用 KMIP 协议 1.0 或 1.1 版本,请替换您的本地值并将如下条目添加到您的 mongod 配置文件中:

security:
enableEncryption: true
kmip:
serverName: "mdbhost.somecompany.com"
serverCAFile: "security/libs/trusted-ca.pem"
clientCertificateFile: "security/libs/trusted-client.pem"
useLegacyProtocol: true
security:
sasl:
hostName: <string>
serviceName: <string>
saslauthdSocketPath: <string>
security.sasl.hostName

类型:字符串

用于配置 SASL 和 Kerberos 身份验证的完全限定服务器域名。SASL 主机名仅覆盖 SASL 和 Kerberos 配置的主机名。

security.sasl.serviceName

类型:字符串

使用 SASL 的服务的注册名称。此选项允许您按实例替换 Kerberos 主体名称的默认 Kerberos 服务名称组件。如果未指定,则默认值为 mongodb。

MongoDB 仅允许在启动时设置此选项。setParameter 无法更改此设置。

此选项仅在 MongoDB Enterprise 中可用。

重要

确保驱动程序支持备用服务名称。关于 mongosh 和其他连接到新 serviceName 的 MongoDB 工具,请参阅 gssapiServiceName 选项。

security.sasl.saslauthdSocketPath

类型:字符串

saslauthd 的 UNIX 域套接字文件的路径。

注意

从MongoDB 8.0 开始并在 9.0 中继续, LDAP身份验证和授权已弃用。 LDAP将在未来发布中删除。

要学习;了解其他身份验证方法,请参阅LDAP身份验证替代方法。

security:
ldap:
servers: <string>
bind:
method: <string>
saslMechanisms: <string>
queryUser: <string>
queryPassword: <string | array>
useOSDefaults: <boolean>
transportSecurity: <string>
timeoutMS: <int>
retryCount: <int>
userToDNMapping: <string>
authz:
queryTemplate: <string>
validateLDAPServerConfig: <boolean>
security.ldap.servers

类型:字符串

仅在 MongoDB Enterprise 中可用。

特定 LDAP 服务器,mongod 或 mongos 在该服务器上对用户进行身份验证或决定授权用户可对给定数据库执行哪些操作。如果指定的 LDAP 服务器有任何复制的实例,则可以在逗号分隔的列表中指定每个复制的服务器的主机和端口。

如果您的LDAP基础架构将LDAP目录分区到多个LDAP服务器,请将一个LDAP服务器或其任何复制实例指定为 security.ldap.servers。 MongoDB支持以下LDAP引用,如 RFC..45114 110security.ldap.servers中所定义。请勿使用 列出基础架构中的每台LDAP服务器。

您可以为 LDAP 服务器添加前缀 srv: 和 srv_raw:。

如果连接字符串指定 "srv:<DNS_NAME>",则 mongod 将验证 "_ldap._tcp.gc._msdcs.<DNS_NAME>" 是否存在,以使 SRV 支持 Active Directory。如果未找到,mongod 将验证 SRV 是否存在 "_ldap._tcp.<DNS_NAME>"。如果找不到 SRV 记录,则 mongod 会警告您用 "srv_raw:<DNS_NAME>" 代替。

如果您的连接字符串指定了 "srv_raw:<DNS_NAME>",mongod 会对 "<DNS NAME>" 执行 SRV 记录查询。

可以使用 setParameter 在运行的 mongod 或 mongos 上配置此设置。

如果未设置,mongod 或 mongos 将无法使用LDAP 身份验证或授权。

security.ldap.bind.queryUser

类型:字符串

仅在 MongoDB Enterprise 中可用。

mongod 或 mongos 连接到 LDAP 服务器或在其上执行查询时绑定的身份。

仅当满足以下任一条件时才需要:

您必须将 queryUser 与 queryPassword 一起使用。

如果未设置,则 mongod 或 mongos 不会尝试绑定到 LDAP 服务器。

可使用 setParameter 在运行中的 mongod 或 mongos 上配置此设置。

注意

Windows MongoDB 部署可以使用 useOSDefaults 而不是 queryUser 和 queryPassword。不能同时指定 queryUser 和 useOSDefaults。

security.ldap.bind.queryPassword

类型:字符串或数组

仅在 MongoDB Enterprise 中可用。

使用 queryUser 时用于绑定到 LDAP 服务器的密码。您必须将 queryPassword 与 queryUser 一起使用。

如果未设置,则 mongod 或 mongos 不会尝试绑定到 LDAP 服务器。

可以使用 setParameter 在运行中的 mongod 或 mongos 上配置此设置。

ldapQueryPassword setParameter 命令接受 string 或 string 数组。如果将 ldapQueryPassword 设置为数组,则 MongoDB 会按顺序尝试每个密码,直到成功为止。使用密码数组可以在不停机的情况下滚动 LDAP 账户密码。

注意

Windows MongoDB 部署可以使用 useOSDefaults 而不是 queryUser 和 queryPassword。不能同时指定 queryPassword 和 useOSDefaults。

security.ldap.bind.useOSDefaults

类型:布尔值

默认:false

仅在 Windows 平台上的 MongoDB Enterprise 中可用。

允许 mongod 或 mongos 在连接 LDAP 服务器时使用 Windows 登录凭证进行身份验证或绑定。

仅在以下情况下才需要:

  • 使用 LDAP 授权。

  • 将 LDAP 查询用于 username transformation。

  • LDAP 服务器不允许匿名绑定

使用 useOSDefaults 替换 queryUser 和 queryPassword。

security.ldap.bind.method

类型:字符串

默认值:简单

仅在 MongoDB Enterprise 中可用。

方法 mongod 或 mongos 用于对 LDAP 服务器进行身份验证。与 queryUser 和 queryPassword 一起使用以连接到 LDAP 服务器。

method 支持以下值:

  • simple - mongod 或 mongos 使用简单身份验证。

  • sasl - mongod 或 mongos 使用 SASL 协议进行身份验证

如果指定 sasl,则可以使用 security.ldap.bind.saslMechanisms 配置可用的 SASL 机制。mongod 或 mongos 默认使用 DIGEST-MD5 机制。

security.ldap.bind.saslMechanisms

类型:字符串

默认值:DIGEST-MD5

仅在 MongoDB Enterprise 中可用。

以逗号分隔的 SASL 机制列表,mongod 或 mongos 可以在向 LDAP 服务器进行身份验证时使用。mongod 或 mongos 和 LDAP 服务器必须就至少一种机制达成一致。mongod 或 mongos 可在运行时动态加载托管机器上安装的任何 SASL 机制库。

在 mongod 或 mongos 托管以及远程 LDAP 服务器托管上安装和配置所选 SASL 机制的相应库。默认情况下,操作系统可能包含某些 SASL 库。请参阅与每个 SASL 机制相关的文档以获取安装和配置指导。

重要

在具有 Cyrus SASL 2.1.28 或更高版本的主机上, MongoDB不支持与 DIGEST-MD5 机制的LDAP SASL 绑定。如果将 security.ldap.bind.method设立为 sasl 并在 security.ldap.bind.saslMechanisms 中指定 DIGEST-MD5,则 mongod 和 mongos 将无法启动。

有关详细信息和替代方案,请参阅 Cyrus SASL 2.1.28 及更高版本不支持 DIGEST-MD5。

如果将 GSSAPI SASL 机制与 自管理部署上的 Kerberos 身份验证结合使用,请验证 mongod 或 mongos 托管的以下内容:

Linux
  • KRB5_CLIENT_KTNAME 环境变量会解析为主机客户端 Linux Keytab 文件的名称。有关 Kerberos 环境变量的更多信息,请参阅 Kerberos 文档。

  • 客户端密钥表包含了供 mongod 或 mongos 连接到 LDAP 服务器并执行 LDAP 查询时使用的 用户主体。

Windows
如果连接到 Active Directory服务器,则当用户登录系统时, Windows Kerberos配置会自动生成票证授予票证。将 useOSDefaults设置为true ,以允许mongod 或mongos 在连接到 Active Directory服务器并执行查询时使用生成的凭证。

将 method 设置为 sasl 以使用此选项。

注意

有关 SASL 机制的完整列表,请参阅 IANA 列表。请参阅 LDAP 或 Active Directory 服务的文档来识别与该服务兼容的 SASL 机制。

MongoDB 不是 SASL 机制库的来源,MongoDB 文档也不是安装或配置任何给定 SASL 机制的权威来源。如需获得文档和支持,请咨询 SASL 机制库供应商或所有者。

有关 SASL 的更多信息,请参阅以下资源:

security.ldap.transportSecurity

类型:字符串

默认值:tls

仅在 MongoDB Enterprise 中可用。

默认情况下,mongod 或 mongos 会创建与 LDAP 服务器的 TLS/SSL 安全连接。

对于 Linux 部署,必须在 /etc/openldap/ldap.conf 文件中配置相应的 TLS 选项。操作系统的程序包管理器通过 libldap 依赖项创建此文件作为 MongoDB Enterprise 安装的一部分。有关更完整的说明,请参阅 ldap.conf OpenLDAP 文档 中的 。TLS Options

在 Windows 上部署时,必须将 LDAP 服务器 CA 证书添加到 Windows 证书管理工具中。该工具的确切名称和功能可能会因操作系统版本而异。有关证书管理的更多信息,请参阅您的 Windows 版本对应的文档。

将 transportSecurity 设置为 none,以禁用 mongod 或 mongos 与 LDAP 服务器之间的 TLS/SSL。

警告

将 transportSecurity 设置为 none,可在 mongod 或 mongos 和 LDAP 服务器之间传输明文信息,可能还传输凭证。

security.ldap.timeoutMS

类型:int

默认值:10000

仅在 MongoDB Enterprise 中可用。

mongod 或 mongos 应等待 LDAP 服务器响应请求的时间,以毫秒为单位。

如果失败的根源是连接超时,增加 timeoutMS 的值可以防止 MongoDB 服务器和 LDAP 服务器之间的连接失败。降低 timeoutMS 的值会缩短 MongoDB 等待 LDAP 服务器响应的时间。

可使用 setParameter 在运行中的 mongod 或 mongos 上配置此设置。

security.ldap.retryCount

6.1版本新增。

类型:int

默认值:0

仅在 MongoDB Enterprise 中可用。

在出现网络错误后服务器 LDAP 管理器重试的操作数。

可使用 setParameter 在运行中的 mongod 或 mongos 上配置此设置。

security.ldap.userToDNMapping

类型:字符串

仅在 MongoDB Enterprise 中可用。

将提供的用户名映射到 mongod 或 mongos 进行身份验证,以获取 LDAP 标识名 (标识名)。在以下情况下,可能需要使用 userToDNMapping 将用户名转换为 LDAP 标识名:

  • 通过 LDAP 简单绑定进行 LDAP 身份验证,其中用户使用非完整 LDAP DN 的用户名向 MongoDB 进行身份验证。

  • 使用需要 DN 的 LDAP authorization query template。

  • 将使用不同身份验证机制(如 x.509、kerberos)向 Mongo DB 进行身份验证的客户端的用户名转换为完整的 LDAP DN,以进行授权。

userToDNMapping 需要一个用引号括住的 JSON 字符串,代表有序的文档数组。每个文档都包含一个正则表达式 match 以及用于转换传入用户名的 substitution 或 ldapQuery 模板。

数组中的每个文档均采用以下形式:

{
match: "<regex>"
substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>"
}
字段
说明
例子

match

ECMAScript 格式的正则表达式 (regex),用于与提供的用户名进行匹配。每个括号括起来的部分表示 substitution 或 ldapQuery 使用的正则表达式捕获组。

"(.+)ENGINEERING" "(.+)DBA"

substitution

LDAP标识名(DN) 格式模板,用于将match 正则表达式匹配的身份验证名称转换为LDAP DN。每个大括号括起来的数值都替换为通过 match正则表达式从身份验证用户名中提取的相应正则表达式捕获群组。

替换的结果必须是 RFC4514 转义字符串。

"cn={0},ou=engineering, dc=example,dc=com"

ldapQuery

LDAP查询格式模板,该模板将匹配 正则表达式的身份验证名称插入到按照match RFC4515 和 RFC 编码的LDAP查询URI4516 中。每个大括号括起来的数值都替换为通过 match表达式从身份验证用户名名中提取的相应正则表达式捕获群组。mongod 或mongos 针对LDAP服务器执行查询,以检索经身份验证用户的LDAP DN。mongod 或mongos 要求只有一个返回结果才能转换成功, 或mongod mongos会跳过此转换。

"ou=engineering,dc=example, dc=com??one?(user={0})"

注意

对 RFC4514 、RFC4515 、RFC4516 或LDAP查询的解释超出了MongoDB文档的范围。请直接查看RFC 或使用您首选的LDAP资源。

对于数组中的每个文档,必须使用 substitution 或 ldapQuery。不能在同一文档中同时指定两者。

执行身份验证或授权时,mongod 或 mongos 会按给定顺序遍历数组中的每个文档,对照 match 过滤器检查身份验证用户名。如果找到匹配,mongod 或 mongos 就会应用转换,并使用输出结果对用户进行身份验证。mongod 或 mongos 不会检查数组中的其余文档。

如果给定文档与提供的身份验证名称不匹配,mongod 或 mongos 会继续通过文档列表查找其他匹配项。如果在任何文档中均未找到匹配项,或文档描述的转换失败,mongod 或 mongos 将返回错误。

mongod 或 mongos 也会返回错误(如果由于网络或对 LDAP 服务器的身份验证失败而无法评估某项转换)。mongod 或 mongos 会拒绝连接请求,不检查数组中的其余文档。

从 MongoDB 5.0 开始,userToDNMapping 接受空 string "" 或空数组 [ ] 代替映射文档。如果向 userToDNMapping 提供空 string 或空数组,MongoDB 会将经过身份验证的用户名映射为 LDAP 标识名。以前,提供空映射文档会导致映射失败。

重要

必须将数组作为 string 传递给 userToDNMapping。

例子

下面展示了两个转换文档。第一个文档匹配以 @ENGINEERING 结尾的任何字符串,将后缀前面的所有内容放入正则表达式捕获组中。第二个文档匹配以 @DBA 结尾的任何字符串,将后缀前面的所有内容放入正则表达式捕获组中。

"[
{
match: "(.+)@ENGINEERING.EXAMPLE.COM",
substitution: "cn={0},ou=engineering,dc=example,dc=com"
},
{
match: "(.+)@DBA.EXAMPLE.COM",
ldapQuery: "ou=dba,dc=example,dc=com??one?(user={0})"
}
]"

用户名为 alice@ENGINEERING.EXAMPLE.COM 的用户匹配第一个文档。正则表达式捕获群组 {0} 对应于字符串 alice。生成的输出是 DN "cn=alice,ou=engineering,dc=example,dc=com"。

用户名为 bob@DBA.EXAMPLE.COM 的用户匹配第二个文档。正则表达式捕获组 {0} 对应于 string bob。生成的输出是 LDAP 查询 "ou=dba,dc=example,dc=com??one?(user=bob)"。mongod 或 mongos 针对 LDAP 服务器执行此查询,并返回结果 "cn=bob,ou=dba,dc=example,dc=com"。

如果未设置 userToDNMapping,则在尝试通过 LDAP 服务器对用户进行身份验证或授权时,mongod 或 mongos 不应用任何转换到用户名。

可以在运行中的 mongod 或 mongos 上使用 setParameter 数据库命令配置此设置。

security.ldap.authz.queryTemplate

类型:字符串

仅在 MongoDB Enterprise 中可用。

格式符合 RFC4515 和 RFC4516 的相对LDAP查询URL,mongod 执行该 URL 以获得经过身份验证的用户所属的LDAP群组。该查询是相对于security.ldap.servers 中指定的一托管或多台主机的。

注意

为了获得更好的性能,可以考虑将用于 MongoDB 授权的 LDAP 群组放入各自的组织单位 (OU)。

在 URL 中,可以使用以下替换令牌:

替换令牌
说明

{USER}

使用经过身份验证的用户名进行替换,或者,如果指定了 userToDNMapping,则使用 transformed 用户名进行替换。

{PROVIDED_USER}

在 LDAP 查询中替换为提供的用户名(即在身份验证或 LDAP 转换之前)。

构造查询 URL 时,请确保 LDAP 参数的顺序遵循 RFC4516:

[ dn [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]

如果您的查询包含属性,则 mongod 会假定查询检索此实体是节点的 DN 列表。

如果查询不包含属性,则 mongod 假定该查询检索用户所属的所有实体。

对于查询返回的每个 LDAP DN,mongod 都会在 admin 数据库中为授权用户分配相应的角色。如果 admin 数据库上的角色与 DN 完全匹配,mongod 将向用户授予该角色以及分配给该角色的权限。有关创建角色的更多信息,请参阅 db.createRole() 方法。

例子

此 LDAP 查询返回 LDAP 用户对象的 memberOf 属性中列出的所有群组。

"{USER}?memberOf?base"

您的 LDAP 配置可能不包含 memberOf 属性作为用户架构的一部分,可能具有不同的属性来报告组成员身份,或者可能无法通过属性跟踪组成员身份。根据您自己独特的 LDAP 配置来配置您的查询。

如果未设置,mongod 将无法授权用户使用 LDAP。

虽然您可以使用 setParameter 数据库命令在运行的 mongod 上修改 ldapAuthzQueryTemplate 参数的值,但您无法在运行时启用或禁用它。要启用此设置,您必须在初创企业期间的配置文件中配置 security.ldap.authz.queryTemplate。

注意

对 RFC4515 、RFC4516 或LDAP查询的解释超出了MongoDB文档的范围。请直接查看RFC 或使用您首选的LDAP资源。

security.ldap.validateLDAPServerConfig

类型:布尔值

默认值:true

在 MongoDB Enterprise 中可用

一个标志,用于确定 mongod 或 mongos 实例是否在初创企业时检查 LDAP server(s) 的可用性:

  • 如果为 true,则 mongod 或 mongos 实例会执行可用性检查,并且仅在 LDAP 服务器可用时才继续启动。

  • 如果为 false,则 mongod 或 mongos 实例会跳过可用性检查;也就是说,即使 LDAP 服务器不可用,实例也会启动。

setParameter

设置自管理部署的 MongoDB 服务器参数中描述的一个或多个 MongoDB 参数

要在 YAML 配置文件中设置参数,请使用以下格式:

setParameter:
<parameter1>: <value1>
<parameter2>: <value2>

例如,在配置文件中指定 enableLocalhostAuthBypass:

setParameter:
enableLocalhostAuthBypass: false
setParameter.ldapUserCacheInvalidationInterval

类型:int

默认值:30

用于与使用自管理部署上的 LDAP 授权的 mongod 服务器一起使用。

mongod 在外部用户缓存刷新之间的等待间隔(以秒为单位)。MongoDB 在刷新外部用户缓存 mongod 次后,下次 LDAP 授权用户发出操作时,MongoDB 会从 LDAP 服务器重新获取授权数据。

增加指定的值会增加 mongod 和 LDAP 服务器可以失去同步的时间,但会减少 LDAP 服务器的负载。相反,减少指定的值会减少 mongod 和 LDAP 服务器可以失去同步的时间,同时会增加 LDAP 服务器的负载。

setParameter:
ldapUserCacheInvalidationInterval: <int>
setParameter.useInternalAuthzForX509

类型:布尔值

默认值:false

9.0版本新增。

适用于 mongod 和 mongos。

设立为 true 时,使用 X.509 证书进行身份验证的客户端始终使用内部授权,即使配置了LDAP授权也是如此。

设立为 false 时,如果启用了LDAP , MongoDB会对经过 X.509 身份验证的用户使用LDAP授权。如果未启用LDAP ,则无论此设置如何,都会使用内部授权。

此参数仅影响 X.509身份验证。它对其他身份验证机制没有影响。

setParameter:
useInternalAuthzForX509: <true|false>
setParameter.searchIndexManagementHostAndPort

类型:字符串

默认值:""

搜索索引管理托管解决。此参数指定搜索索引管理服务器的主机名或IP解决和端口。

注意

此参数的值必须与 setParameter.mongotHost 相同。

setParameter:
searchIndexManagementHostAndPort: <hostname|IP:port>

例子

setParameter:
searchIndexManagementHostAndPort: localhost:27028
setParameter.skipAuthenticationToSearchIndexManagementServer

类型:布尔值

默认:false

确定是否跳过服务器到索引管理服务器连接的 mongod身份验证的标志,即使在 mongod 上启用了身份验证。

注意

出于安全考虑,我们建议将此参数设置为 false。

setParameter:
skipAuthenticationToSearchIndexManagementServer: <true|false>
setParameter.mongotHost

类型:字符串

默认值:""

mongot 托管解决。此参数指定 mongot服务器的主机名或IP解决和端口。

注意

此参数的值必须与 setParameter.searchIndexManagementHostAndPort 相同。

setParameter:
mongotHost: <hostname|IP:port>

例子

setParameter:
mongotHost: localhost:27028
setParameter.skipAuthenticationToMongot

类型:布尔值

默认:false

指定MongoDB是否跳过 mongod 到 mongot 连接的身份验证,即使在 mongod 上启用了身份验证。

注意

出于安全考虑,我们建议保持此参数不设置或设置为 false。

setParameter:
skipAuthenticationToMongot: <true|false>
setParameter.useGrpcForSearch

类型:布尔值

默认:false

指定分片是否应使用 gRPC 与 mongot 通信。

注意

如果使用 mongot,则必须将此参数设立为 true。

setParameter:
useGrpcForSearch: <true|false>
setParameter.searchTLSMode

类型:字符串

默认值:globalTLS

为 mongod 到 mongot 连接设置 TLS模式。设置 globalTLS 值会使用您在 net.tls.mode 中指定的设置,而其他设置则按照其通常行为运行。

您可以为此参数使用以下值:

  • globalTLS

  • disabled

  • allowTLS

  • preferTLS

  • requireTLS

setParameter:
searchTLSMode: <globalTLS|disabled|allowTLS|preferTLS|requireTLS>

在版本 6.1 中进行了更改:

  • MongoDB 始终会启用日志功能。因此,MongoDB 删除了 storage.journal.enabled 选项以及相应的 --journal 和 --nojournal 命令行选项。
storage:
dbPath: <string>
journal:
commitIntervalMs: <num>
directoryPerDB: <boolean>
syncPeriodSecs: <int>
engine: <string>
wiredTiger:
engineConfig:
cacheSizeGB: <number>
journalCompressor: <string>
directoryForIndexes: <boolean>
maxCacheOverflowFileSizeGB: <number>
collectionConfig:
blockCompressor: <string>
indexConfig:
prefixCompression: <boolean>
inMemory:
engineConfig:
inMemorySizeGB: <number>
oplogMinRetentionHours: <double>
storage.dbPath

类型:字符串

默认值:

  • /data/db 在 Linux 和 macOS 上

  • \data\db 在 Windows 中

mongod 实例存储数据的目录。

storage.dbPath 设置仅适用于 mongod。

注意

配置文件

包含在包经理安装中的默认 mongod.conf 配置文件使用这些特定于平台的默认值来设置 storage.dbPath。

平台
包管理器:
默认 storage.dbPath

RHEL / CentOS 和 Amazon

yum

/var/lib/mongo

SUSE

zypper

/var/lib/mongo

Ubuntu 和 Debian

apt

/var/lib/mongodb

macOS

brew

/usr/local/var/mongodb

Linux 包初始化脚本并不希望 storage.dbPath 更改为非默认值。如果使用 Linux 包并更改 storage.dbPath,则必须使用自己的初始化脚本并禁用内置脚本。

storage.journal.commitIntervalMs

类型:数字

默认值:100

mongod 进程允许在两次日志操作之间的最大时间(以毫秒为单位)。范围可以是 1 到 500 毫秒。较低的值会增加日志的持久性,但会牺牲磁盘性能。

在 WiredTiger 上,默认日志提交间隔为 100 毫秒。此外,包含或暗示 j:true 的写入会导致日志立即同步。有关影响同步频率的详细信息或其他条件,请参阅 日志进程。

storage.journal.commitIntervalMs 设置仅适用于 mongod。

不适用于使用 mongod 内存存储引擎的实例。

storage.directoryPerDB

类型:布尔值

默认:false

当 true时,MongoDB 使用单独的目录来存储每个数据库的数据。这些目录位于 storage.dbPath 目录下,每个子目录名称都与数据库名称相对应。

storage.directoryPerDB 设置仅适用于 mongod。

不适用于使用 mongod 内存存储引擎的实例。

从 MongoDB 5.0 开始,当启用 storage.directoryPerDB 时,删除数据库中的最后一个集合(或删除数据库本身)会删除该数据库的新空子目录。

要更改现有部署的 storage.directoryPerDB 选项:

  • 对于独立运行的实例:

    1. 在现有的 mongod 实例上使用 mongodump 来生成备份。

    2. 停止 mongod 实例。

    3. 添加 storage.directoryPerDB 值并配置新的数据目录

    4. 重新启动 mongod 实例。

    5. 使用 mongorestore 填充新数据目录。

  • 对于副本集:

    1. 停止从节点成员。

    2. 添加 storage.directoryPerDB 值,并为该从节点(secondary node from replica set)配置新的数据目录。

    3. 重启该从节点。

    4. 使用初始同步填充新数据目录。

    5. 以同样的方式更新剩下的从节点。

    6. 降级主节点,并以相同的方式更新降级的成员。

storage.syncPeriodSecs

类型:数字

默认:60

MongoDB 将数据刷新到数据文件之前可以经过的时间量。

请勿对生产系统设置此值。几乎在所有情况下,均应使用默认设置。

mongod 进程会非常快速地将数据写入日志,并延迟写入数据文件。storage.syncPeriodSecs 对日志记录没有影响,但如果将 storage.syncPeriodSecs 设置为 0,则日志最终会占用所有可用的磁盘空间。

storage.syncPeriodSecs 设置仅适用于 mongod。

不适用于使用 mongod 内存存储引擎的实例。

为了提供持久性数据,WiredTiger 使用了检查点。 有关详细信息,请参阅《日志和 WiredTiger 存储引擎》。

storage.engine

默认值:wiredTiger

mongod 数据库的存储引擎。可用值包括:

值
说明

wiredTiger

inMemory

为自托管部署指定内存存储引擎。

仅在 MongoDB Enterprise 中可用。

如果您尝试使用包含由与 storage.engine 指定的存储引擎不同的存储引擎生成的数据文件的 storage.dbPath 启动 mongod,则 mongod 拒绝启动。

storage.oplogMinRetentionHours

类型:double

指定保留 oplog 条目的最小小时数,其中十进制值表示小时的小数部分。例如,值 1.5 表示一小时三十分钟。

该值不得小于 0。值 0 表示 mongod 应从最旧的条目开始截断 oplog,以维持配置的 oplog 最大大小。

默认值为 0。

仅在以下情况下,使用 oplogMinRetentionHours 启动的 mongod 会删除 oplog 条目:

  • oplog 已达到配置的 oplog 最大大小,并且

  • oplog 条目早于根据主机系统时钟配置的小时数。

在配置了最短 oplog 保留期后,mongod 有以下行为:

  • oplog 的大小可以不受限制地增长,以便在配置的小时数内保留 oplog 条目。由于写入量高且保留期长,这可能会导致系统磁盘空间减少或耗尽。

  • 如果 oplog 的大小超过其最大大小,则即使 oplog 变回其最大大小或配置为较小的最大大小,mongod 仍可能会继续保留该磁盘空间。请参阅减小 oplog 大小不会立即收回磁盘空间。

  • mongod 在实施oplog条目保留时,会将系统挂钟与oplog条目创建挂钟时间进行比较。集群组件之间的时钟漂移可能会导致意外的oplog保留行为。有关跨集群成员的时钟同步的更多信息,请参阅时钟同步。

要在启动 mongod 后更改 oplog 的最短保留期,请使用 replSetResizeOplog。使用 replSetResizeOplog,可以动态调整 oplog 的大小,而无需重新启动 mongod 进程。若要通过重启来保留使用 replSetResizeOplog 所做的更改,请更新 oplogMinRetentionHours 的值。

storage:
wiredTiger:
engineConfig:
cacheSizeGB: <number>
cacheSizePct: <number>
journalCompressor: <string>
directoryForIndexes: <boolean>
maxCacheOverflowFileSizeGB: <number>
collectionConfig:
blockCompressor: <string>
indexConfig:
prefixCompression: <boolean>
storage.wiredTiger.engineConfig.cacheSizeGB

类型:浮点

定义WiredTiger用于所有数据的内部缓存的最大大小。索引构建消耗的内存(请参阅 maxIndexBuildMemoryUsageMegabytes )与WiredTiger缓存内存是分开的。

避免将WiredTiger内部缓存大小增加到超过其默认值。如果您的使用案例需要这样做,您可以使用 storage.wiredTiger.engineConfig.cacheSizePct 来指定最多占可用内存的 80%。取值范围可以从 0.256 GB到 10000 GB范围。

默认 WiredTiger 内部缓存大小为以下两者中的较大者:

  • 50% 的 (RAM - 1 GB),或

  • 0.256 GB.

示例,在总RAM为 4 GB的系统上, WiredTiger缓存使用 1.5 GB RAM (0.5 * (4GB - 1GB) = 1.5 GB)。提供特定缓存大小时,请确保RAM不超过 0.256 GB到 10000 GB的范围。

避免将WiredTiger内部缓存大小增加到超过其默认值。如果您的案例需要这样做,您可以使用 --wiredTigerCacheSizePct 来考虑垂直方向导致的内存变化。您必须指定最大为可用内存的 80% 的百分比。计算值的范围可以从 0.256 GB到 10000 GB。示例,在RAM为 2 GB的系统上,--wiredTigerCacheSizePct 无法设立为 10,因为 10% of 2 GB是 0。2GB,小于 0.256 GB。

注意

在某些实例中,例如在配置为使用的RAM小于为托管预配的内存量的容器中运行时,您必须考虑这些限制。您可能需要将WiredTiger缓存配置为适当的值,因为在某些情况下, WiredTiger可能不考虑特定容器的内存限制。

要查看 memory limit,WiredTiger用作最大可用RAM量的值,请使用 hostInfo 命令。

借助 WiredTiger,MongoDB 可同时利用 WiredTiger 内部缓存和文件系统缓存。

借助文件系统缓存,MongoDB 会自动使用 WiredTiger 缓存或其他进程未使用的所有空闲内存。

注意

storage.wiredTiger.engineConfig.cacheSizeGB 限制了 WiredTiger 内部缓存的大小。操作系统使用可用的空闲内存进行文件系统缓存,这允许压缩的 MongoDB 数据文件保留在内存中。此外,操作系统使用任何空闲 RAM 来缓冲文件系统块和文件系统缓存。

为了容纳额外的 RAM 用户,您可能必须减少 WiredTiger 的内部缓存大小。

默认WiredTiger内部缓存大小值假定每台计算机有一个mongod实例。如果一台计算机包含多个MongoDB实例,请减少该设置以容纳其他 mongod 实例。

mongod如果在容器(示例lxc 、cgroups 、 Docker等)中运行 ,而该容器无法访问权限系统中的所有可用RAM ,则必须设立storage.wiredTiger.engineConfig.cacheSizeGB 或storage.wiredTiger.engineConfig.cacheSizePct 为一个小于容器中可用RAM数量的值。确切的数量取决于容器中运行的其他进程。请参阅memLimitMB。

您只能提供 storage.wiredTiger.engineConfig.cacheSizeGB 或 storage.wiredTiger.engineConfig.cacheSizePct 之一。

storage.wiredTiger.engineConfig.cacheSizePct

类型:浮点

定义分配给缓存的最大内存量,作为物理 RAM 的百分比。索引构建消耗的内存(请参阅 maxIndexBuildMemoryUsageMegabytes)与 WiredTiger 缓存内存是分开的。

您可以指定最多占可用内存的 80%。取值范围为 0.25 GB到 10000 GB。

默认 WiredTiger 内部缓存大小为以下两者中的较大者:

  • 50% 的 (RAM - 1 GB),或

  • 0.256 GB.

示例,在总RAM为 4 GB的系统上, WiredTiger缓存使用 1.5 GB RAM (0.5 * (4GB - 1GB) = 1.5 GB)。提供特定缓存大小时,请确保RAM不超过 0.256 GB到 10000 GB的范围。

避免将WiredTiger内部缓存大小增加到超过其默认值。如果您的案例需要这样做,您可以使用 --wiredTigerCacheSizePct 来考虑垂直方向导致的内存变化。您必须指定最大为可用内存的 80% 的百分比。计算值的范围可以从 0.256 GB到 10000 GB。示例,在RAM为 2 GB的系统上,--wiredTigerCacheSizePct 无法设立为 10,因为 10% of 2 GB是 0。2GB,小于 0.256 GB。

注意

在某些实例中,例如在配置为使用的RAM小于为托管预配的内存量的容器中运行时,您必须考虑这些限制。您可能需要将WiredTiger缓存配置为适当的值,因为在某些情况下, WiredTiger可能不考虑特定容器的内存限制。

要查看 memory limit,WiredTiger用作最大可用RAM量的值,请使用 hostInfo 命令。

借助 WiredTiger,MongoDB 可同时利用 WiredTiger 内部缓存和文件系统缓存。

借助文件系统缓存,MongoDB 会自动使用 WiredTiger 缓存或其他进程未使用的所有空闲内存。

注意

storage.wiredTiger.engineConfig.cacheSizePct 限制了 WiredTiger 内部缓存的大小。操作系统使用可用的空闲内存进行文件系统缓存,这允许压缩的 MongoDB 数据文件保留在内存中。此外,操作系统使用任何空闲 RAM 来缓冲文件系统块和文件系统缓存。

为了容纳额外的 RAM 用户,您可能必须减少 WiredTiger 的内部缓存大小。

默认WiredTiger内部缓存大小值假定每台计算机有一个mongod实例。如果一台计算机包含多个MongoDB实例,请减少该设置以容纳其他 mongod 实例。

mongod如果在容器(示例lxc 、cgroups 、 Docker等)中运行 ,而该容器无法访问权限系统中的所有可用RAM ,则必须设立storage.wiredTiger.engineConfig.cacheSizePct 或storage.wiredTiger.engineConfig.cacheSizeGB 为一个小于容器中可用RAM数量的值。确切的数量取决于容器中运行的其他进程。请参阅memLimitMB。

您只能提供 storage.wiredTiger.engineConfig.cacheSizePct 或 storage.wiredTiger.engineConfig.cacheSizeGB 之一。

storage.wiredTiger.engineConfig.journalCompressor

默认值:snappy

指定用于压缩 WiredTiger 日志数据的压缩类型。

可用的压缩类型有:

storage.wiredTiger.engineConfig.directoryForIndexes

类型:布尔值

默认:false

当 storage.wiredTiger.engineConfig.directoryForIndexes 为 true 时,mongod 会将索引和集合存储在数据下的单独子目录中(即storage.dbPath)目录。具体来说,mongod 会将索引存储在名为 index 的子目录中,并将集合数据存储在名为 collection 的子目录中。

您可以使用符号链接,为索引指定不同的位置。具体而言,当 mongod 实例未运行时,将 index 子目录移至目标并在数据目录下创建一个名为 index 的符号链接,指向新目标。

storage.wiredTiger.engineConfig.zstdCompressionLevel

类型:整型

默认:6

版本 5.0 中的新增内容

在版本 8.2 中进行了更改。

指定使用 zstd 压缩器时的压缩级别。

取值范围为 -7 到 22。

正值指定压缩级别,其中较高的 zstdCompressionLevel 值会导致更高的压缩比,但费用降低压缩和解压缩速度。

负值可提供更快的压缩和解压缩速度,但费用压缩率。

指定值 0 将使用 zstd 的内部默认压缩级别 3,该级别与MongoDB默认的 6 不同。

仅在 blockCompressor 或 journalCompressor(或两者)被设置为 zstd 时适用。

重要

在降级到早期版本的 MongoDB 时,请确保将 storage.wiredTiger.engineConfig.zstdCompressionLevel 设置配置为该版本支持的范围。示例,MongoDB 8.0 支持 1 到 22 的范围。

storage.wiredTiger.collectionConfig.blockCompressor

默认值:snappy

指定集合数据的默认压缩类型。创建集合时,您可以针对每个集合覆盖此设置。

可用的压缩类型有:

  • none

  • snappy

  • zlib

  • zstd

storage.wiredTiger.collectionConfig.blockCompressor 会影响创建的所有集合。如果在现有 MongoDB 部署上更改 storage.wiredTiger.collectionConfig.blockCompressor 的值,则所有新集合都会使用指定的压缩程序。现有集合继续使用创建时指定的压缩程序,或当时的默认压缩程序。

storage.wiredTiger.indexConfig.prefixCompression

默认值:true

为索引数据启用或禁用前缀压缩。

为 storage.wiredTiger.indexConfig.prefixCompression 指定 true 可对索引数据启用前缀压缩,或指定 false 可对索引数据禁用前缀压缩。

storage.wiredTiger.indexConfig.prefixCompression 设置会影响创建的所有索引。如果您在现有 MongoDB 部署上更改 storage.wiredTiger.indexConfig.prefixCompression 的值,所有新索引都会使用前缀压缩。现有索引不受影响。

storage:
inMemory:
engineConfig:
inMemorySizeGB: <number>
storage.inMemory.engineConfig.inMemorySizeGB

类型:浮点

默认值:物理 RAM 的 50% 减去 1 GB

值的范围可以从 256 MB 到 10 TB,并且可以是浮点数。

为内存存储引擎数据分配的最大内存量,包括索引、oplog(如果 mongod 是副本集的一部分)、副本集或分片集群元数据等。

默认情况下,内存存储引擎使用物理 RAM 大小减去 1 GB 后的 50%。

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

operationProfiling:
mode: <string>
slowOpThresholdMs: <int>
slowOpInProgressThresholdMs: <int>
slowOpSampleRate: <double>
filter: <string>
operationProfiling.mode

类型:字符串

默认值:off

指定应该进行性能分析的操作。以下分析器级别可用:

等级
说明

off

分析器已关闭,因此不收集任何数据。这是默认的分析器级别。此级别对应于分析器级别 0。

slowOp

分析器会收集耗时超过 slowms 值的操作的数据。此级别对应于分析器级别 1。

all

分析器会收集所有操作的数据。此级别对应于分析器级别 2。

警告

分析会降低性能,并在系统日志中暴露未经加密的查询数据。在生产部署中配置和启用分析器之前,请仔细考虑对性能和安全的影响。

有关潜在性能下降的更多信息,请参阅分析器开销。

operationProfiling.slowOpInProgressThresholdMs

类型:整型

默认值:5000

正在进行的查询的慢 operation time 阈值(以毫秒为单位)。MongoDB运行时长超过此阈值的操作记录为正在进行的慢速查询。一旦查询操作超过时间阈值, MongoDB就会将查询为进行中的慢速查询。

operationProfiling.slowOpThresholdMs

类型:整型

默认值:100

慢速操作时间阈值(以毫秒为单位)。运行时间超过此阈值的操作被视为慢速操作。

根据 workingMillis记录慢操作,这是 MongoDB 处理该操作所花费的时间。这意味着等待锁和流量控制等因素不会影响操作是否超过慢操作阈值。

当 logLevel 设置为 0 时,MongoDB 将慢速操作记录到诊断日志中,记录速率由 slowOpSampleRate 确定。

在较高的 logLevel 设置下,所有操作都会出现在诊断日志中,无论其延迟如何,但从节点(secondary node from replica set)记录慢速 oplog 条目消息的操作除外。从节点(secondary node from replica set)仅日志慢速 oplog 条目;增加 logLevel 不会日志所有 oplog 条目。

此设置适用于 mongod 和 mongos。

  • 对于 mongod 实例,该设置会影响诊断日志,如果启用,还会影响分析器。

  • 对于 mongos 实例,该设置仅影响诊断日志而不影响分析器,因为 mongos 无法使用分析。

operationProfiling.slowOpSampleRate

类型:double

默认值:1.0

应分析或记录的慢速操作的比例。operationProfiling.slowOpSampleRate 接受 0 到 1(含)之间的值。

slowOpSampleRate 设置可用于 mongod 和 mongos。

  • 对于 mongod 实例,该设置会影响诊断日志,如果启用,还会影响分析器。

  • 对于 mongos 实例,该设置仅影响诊断日志,而不影响分析器,因为 mongos 不支持分析。

operationProfiling.filter

类型:查询文件的字符串表示

一个过滤器表达式,用于控制要分析和记录的操作。

设置 filter 后,slowOpThresholdMs 和 slowOpSampleRate 不用于分析和慢查询日志行。

在配置文件中设置分析过滤器时,该过滤器将应用于部署中的所有数据库。要为特定数据库设置配置文件过滤器,请使用 db.setProfilingLevel() 方法。

该选项采用以下形式的查询文档的字符串表示形式:

{ <field1>: <expression1>, ... }

<field> 可以是分析器输出中的任何字段。<expression> 是查询条件表达式。

要在配置文件中指定分析过滤器,必须:

  • 用单引号将筛选器文档括起来,以便将该文档作为字符串传递。

  • 使用 YAML 格式的配置文件。

例如,以下 filter 将分析器配置为记录耗时超过 2 秒的 query 操作:

operationProfiling:
mode: all
filter: '{ op: "query", millis: { $gt: 2000 } }'
replication:
oplogSizeMB: <int>
replSetName: <string>
enableMajorityReadConcern: <boolean>
replication.oplogSizeMB

类型:整型

oplog 的最大大小(以兆字节为单位)。oplogSizeMB 设置将配置 oplog 的未压缩大小,而不是磁盘上的大小。

注意

oplog 的大小可能会超过其配置的大小限制,从而避免删除 majority commit point。

默认情况下,mongod 进程会根据最大可用空间创建一个 oplog。对于 64 位系统,该 oplog 通常占可用磁盘空间的 5%。

只要 mongod 首次创建了 oplog,更改 replication.oplogSizeMB 选项将不会影响 oplog 的大小。要在启动 mongod 后更改最大 oplog 大小,请使用 replSetResizeOplog。使用 replSetResizeOplog,可以动态调整 oplog 的大小,而无需重新启动 mongod 进程。要通过重启保留使用 replSetResizeOplog 所做的更改,请更新 oplogSizeMB 的值。

更多信息,请参阅 Oplog 大小。

replication.oplogSizeMB 设置仅适用于 mongod。

replication.replSetName

类型:字符串

mongod 所属副本集的名称。副本集中的所有托管必须具有相同的设置名称。

如果您的应用程序连接到多个副本集,则每个副本集的名称必须不同。有些驱动程序会按副本集名称对副本集连接进行分组。

replication.replSetName 设置仅适用于 mongod。

replication.replSetName 不能与 storage.indexBuildRetry 同时使用。

replication.enableMajorityReadConcern

默认值:true

配置对 "majority" 读关注的支持。

从 MongoDB 5.0 开始,enableMajorityReadConcern 不可更改,并始终设置为 true。尝试使用 --enableMajorityReadConcern 选项启动不支持大多数读关注(read concern)的存储引擎会失败并返回错误消息。

在早期版本的 MongoDB 中,enableMajorityReadConcern 是可配置的。

警告

如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:

  • 如果从节点不可用或滞后,写关注(write concern) "majority" 可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。

  • 如果使用的全局默认值 "majority",并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。

sharding:
clusterRole: <string>
sharding.clusterRole

类型:字符串

mongod 实例在分片集群中的角色。将其设置设为以下之一:

值
说明

configsvr

将此实例作为配置服务器启动。默认情况下,该实例在端口 27019 上启动。

将 MongoDB 实例配置为 clusterRole configsvr 时,还必须指定 replSetName。

shardsvr

将该实例作为分片启动。默认情况下,该实例在端口 27018 上启动。

将 MongoDB 实例配置为 clusterRole shardsvr 时,还必须指定 replSetName。

注意

设置 sharding.clusterRole 要求 mongod 实例在运行时进行复制。要将实例部署为副本集节点,请使用 replSetName 设置并指定副本集的名称。

sharding.clusterRole 设置仅适用于 mongod。

sharding.archiveMovedChunks

类型:布尔值

默认:false。

在数据段迁移过程中,分片不会保存从该分片中迁移的文档。

注意

仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。

auditLog:
destination: <string>
format: <string>
path: <string>
filter: <string>
schema: <string>
auditLog.auditEncryptionKeyIdentifier

类型:字符串

6.0版本新增。

指定用于审核日志加密的 Key Management Interoperability Protocol (KMIP) 密钥的唯一标识符。

您不能将此选项与 auditLog.localAuditKeyFile 一起使用。

注意

仅在 MongoDB Enterprise 中可用。MongoDB Enterprise 和 Atlas 有不同的配置要求。

auditLog.compressionMode

类型:字符串

5.3版本新增。

指定压缩模式以进行审核日志加密。您还须使用 auditLog.auditEncryptionKeyIdentifier 或 auditLog.localAuditKeyFile 启用审核日志加密。

您可以将此选项设置为以下值之一:

值
说明

zstd

使用 zstd 算法压缩审核日志。

none (默认)

请勿压缩审核日志。

注意

仅在 MongoDB Enterprise 中可用。MongoDB Enterprise 和 Atlas 有不同的配置要求。

auditLog.destination

类型:字符串

设置后,auditLog.destination 将启用Atlas 审核并指定 mongos 或 mongod 将所有Atlas 审核事件发送到何处。

auditLog.destination 可能的值:

值
说明

syslog

将审核事件以 JSON 格式输出到系统日志中。在 Windows 上不可用。审核消息的系统日志严重性级别为 info,设施级别为 info。

系统日志消息限制可能会导致审核消息被截断。审核系统既不会检测此类截断,也不会在其出现时报错。

console

将审核事件以 JSON 格式输出到 stdout。

file

以 auditLog.format 中指定的格式将审核事件输出到 auditLog.path 中指定的文件。

注意

仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。

auditLog.filter

类型:文档的字符串表示

用于限制 Atlas 审核系统记录的操作类型的过滤器。该选项采用以下形式的查询文档的 string 表示形式:

{ <field1>: <expression1>, ... }

<field> 可以是 Atlas 审核消息中的任何字段,包括参数文档中返回的字段。<expression> 是 查询条件表达式。

要指定 Atlas 审核过滤器,请将过滤器文档括在单引号 中,以将文档作为字符串传递。

要在配置文件中指定审核过滤器,必须使用配置文件的 YAML 格式。

注意

仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。

auditLog.format

类型:字符串

如果 destination 为 file,则用于 Atlas 审核的输出文件格式为。auditLog.format 选项可以有以下值之一:

值
说明

JSON

以 JSON 格式将 Atlas 审核事件输出到 auditLog.path 中指定的文件。

BSON

以 BSON 二进制格式将 Atlas 审核事件输出到 auditLog.path 中指定的文件。

与以 BSON 格式打印相比,将 Atlas 审核事件以 JSON 格式打印到文件更可能导致服务器性能下降。

注意

仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。

auditLog.localAuditKeyFile

类型:字符串

5.3版本新增。

指定本地审核密钥文件的路径和文件名,用于审核日志加密。

注意

仅将此选项用于测试,因为密钥不安全。要保护密钥安全,请使用 auditLog.auditEncryptionKeyIdentifier 和外部 Key 管理 Interoperability 协议 (KMIP) 服务器。

不能同时使用这两个选项。

注意

仅在 MongoDB Enterprise 中可用。MongoDB Enterprise 和 Atlas 有不同的配置要求。

auditLog.path

类型:字符串

如果 destination 的值为 file,则为 Atlas 审核用的输出文件。auditLog.path 选项可以使用完整路径名或相对路径名。

auditLog.runtimeConfiguration

类型:布尔值

指定节点是否允许审核过滤器和 auditAuthorizationSuccess 变量的运行时配置。如为 true,则该节点可以参与在线审核过滤器管理。

auditLog.schema

类型:字符串

默认值:mongo

8.0版本新增。

指定审核日志使用的格式。您可以将 auditLog.schema 的以下值之一指定为:

值
说明

mongo

日志以 MongoDB 设计的格式写入。

有关日志消息示例,请参阅 Mongo 模式审核消息。

OCSF

日志以 OCSF 格式写入。此选项以与日志处理器兼容的标准化格式提供日志。

有关日志消息的示例,请参阅 OCSF 模式审核消息。

要查看用于配置 mongot 和 mongod 的选项,请参阅 配置 mongot。

replication:
localPingThresholdMs: <int>
sharding:
configDB: <string>
replication.localPingThresholdMs

类型:整型

默认:15

mongos 用于确定哪些辅助副本集成员传递来自客户端的读取操作的 ping 时间(以毫秒为单位)。15 的默认值对应于所有客户端驱动程序中的默认值。

当mongos 收到允许从节点(secondary node from replica set)读取的请求时,mongos :

  • 找到该副本集中 ping 时间最短的节点。

  • 构造一个副本集节点列表,保持与该副本集中最近的合适节点的 ping 时间在 15 毫秒之内。

    如果您为 replication.localPingThresholdMs 选项指定了值,mongos 将构建在该值允许的延迟范围内的副本节点列表。

  • 从该列表中随机选择要读取的节点。

按 replication.localPingThresholdMs 设置进行比较的节点所用的网络探测(ping)时间是最近网络探测(ping)时间的移动平均值,且最多每 10 秒计算一次。因此,在 mongos 重新计算平均值之前,一些查询查找到的节点可能会超过阈值。

请参阅读取偏好文档的副本集的读取偏好部分,了解更多信息。

sharding.configDB

类型:字符串

针对该分片集群的配置服务器。

分片集群的配置服务器将部署为副本集。副本集配置服务器必须运行 WiredTiger 存储引擎。

指定配置服务器副本集名称以及至少一个配置服务器副本集成员的主机名和端口。

sharding:
configDB: <configReplSetName>/cfg1.example.net:27019, cfg2.example.net:27019,...

该分片集群的 mongos 实例必须指定相同的配置服务器副本集名称,但可指定副本集不同节点的主机名和端口。

processManagement:
windowsService:
serviceName: <string>
displayName: <string>
description: <string>
serviceUser: <string>
servicePassword: <string>
processManagement.windowsService.serviceName

类型:字符串

默认值:mongodb

当作为 Windows 服务运行时,mongos 或 mongod 的服务名称。将此名称与 net start <name> 和 net stop <name> 操作一起使用。

必须将 processManagement.windowsService.serviceName 与 --install 或 --remove 选项结合使用。

processManagement.windowsService.displayName

类型:字符串

默认值:mongodb

服务管理应用程序中列出的 MongoDB 名称。

processManagement.windowsService.description

类型:字符串

默认:MongoDB 服务器

运行 mongos 或 mongod 服务说明。

必须将 processManagement.windowsService.description 与 --install 选项结合使用。

对于包含空格的说明,必须将说明括在引号中。

processManagement.windowsService.serviceUser

类型:字符串

特定用户环境中的 mongos 或 mongod 服务。该用户必须具有“作为服务登录”权限。

必须将 processManagement.windowsService.serviceUser 与 --install 选项结合使用。

processManagement.windowsService.servicePassword

类型:字符串

使用 processManagement.windowsService.serviceUser 选项运行时,mongos 或 mongod 的 <user> 的密码。

必须将 processManagement.windowsService.servicePassword 与 --install 选项结合使用。

MongoDB 删除了已弃用的 MMAPv1 存储引擎和 MMAPv1 特定的配置选项:

删除配置文件设置
删除了命令行选项

storage.mmapv1.journal.commitIntervalMs

storage.mmapv1.journal.debugFlags

mongod --journalOptions

storage.mmapv1.nsSize

mongod --nssize

storage.mmapv1.preallocDataFiles

mongod --noprealloc

storage.mmapv1.quota.enforced

mongod --quota

storage.mmapv1.quota.maxFilesPerDB

mongod --quotaFiles

storage.mmapv1.smallFiles

mongod --smallfiles

storage.repairPath

mongod --repairpath

replication.secondaryIndexPrefetch

mongod --replIndexPrefetch

对于早期版本的MongoDB,请参阅旧版文档。