mongod
在此页面上
Synopsis
mongod
是 MongoDB 系统的主守护进程,处理数据请求、管理数据访问权限并执行后台管理操作。
本文档提供mongod
的所有命令行选项的完整概述。 这些命令行选项主要用于测试:在常用操作中,使用配置文件选项控制数据库的行为。
注意
MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。
兼容性
在以下环境中托管的部署使用 mongod
:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
MongoDB Atlas 托管所有 MongoDB Atlas 部署的 mongod
。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
Considerations
mongod
包括全时诊断数据捕获机制,可协助 MongoDB 工程师对部署进行故障排除。如果该线程失败,它将终止原始进程。为了避免出现最常见的故障,请确认运行该进程的用户有权创建 FTDCdiagnostic.data
目录。对于mongod
,该目录位于storage.dbPath
内。对于mongos
,它与systemLog.path
平行。
选项
版本 5.0 中进行了更改:
MongoDB 删除
--serviceExecutor
命令行选项和相应的net.serviceExecutor
配置选项。
核心选项
--config <filename>, -f <filename>
指定运行时配置选项的配置文件。 配置文件是运行时配置
mongod
的首选方法。 这些选项相当于命令行配置选项。 有关更多信息,请参阅自管理配置文件选项。确保配置文件使用 ASCII 编码。
mongod
实例不支持非 ASCII 编码的配置文件,包括 UTF-8。
--configExpand <none|rest|exec>
默认:无
启用在配置文件中使用扩展指令。扩展指令允许您为配置文件选项设置外部来源的值。
--configExpand
支持以下扩展指令:值说明none
默认。mongod
不扩展扩展指令。如果任何配置文件设置使用扩展指令,mongod
将无法启动。rest
mongod
解析配置文件时扩展__rest
扩展指令。exec
mongod
解析配置文件时扩展__exec
扩展指令。您可以将多个扩展指令指定为以逗号分隔的列表,例如:
rest, exec
。如果配置文件包含未指定为--configExpand
的扩展指令,mongod
会返回错误并终止。有关扩展指令的更多信息,请参阅配置文件的自管理部署的源自外部的配置文件值。
--verbose, -v
增加标准输出或日志文件中返回的内部报告数量。通过多次包含该选项,可以使用
-v
形式增加详细程度,例如:-vvvvv
。注意
从版本 4.2 开始,MongoDB 在日志消息中包含调试详细级别(1 至 5 级)。例如,如果详细级别为 2,则 MongoDB 记录
D2
。在以前版本中,MongoDB 日志消息仅为调试级别指定D
。
--quiet
在尝试限制输出量的安静模式下运行
mongod
。该选项会抑制:
数据库命令输出
复制活动
连接接受事件
连接关闭事件
--port <port>
默认值:
27017,如果
mongod
不是分片成员或配置服务器成员27018 如果
mongod
是shard member
27019 如果
mongod
是config server member
MongoDB 实例监听客户端连接的 TCP 端口。
在版本5.0.22中进行了更改:
--port
选项接受0
和65535
之间的值范围。 将端口设置为0
会将mongod
配置为使用操作系统分配的任意端口。
--bind_ip <hostnames|ipaddresses|Unix domain socket paths>
默认值:localhost
mongod
应侦听客户端连接的主机名和/或 IP 地址和/或完整 Unix 域套接字路径。您可以将mongod
连接到任何接口。要绑定到多个地址,输入以逗号分隔的值列表。例子
localhost,/tmp/mongod.sock
您可以指定 IPv4 和 IPv6 解决方案,或解析为 IPv4 或 IPv6 地址的主机名。
例子
localhost, 2001:0DB8:e132:ba26:0d5c:2774:e7f9:d513
注意
如果指定 链路本地 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
或星号"*"
(将星号括在引号中以避免文件名模式扩展)。或者您可以使用net.bindIpAll
设置。注意
--bind_ip
和--bind_ip_all
是互斥的。同时指定两个选项会导致mongod
引发错误并终止。命令行选项
--bind
覆盖配置文件设置net.bindIp
。
--bind_ip_all
如果已指定,
mongod
实例将绑定到所有 IPv4 地址(即0.0.0.0
)。如果mongod
以--ipv6
开头,那么--bind_ip_all
也将绑定到所有 IPv6 地址(即::
)。mongod
如果使用 启动,则仅支持6--ipv6
IPv 。单独指定--bind_ip_all
并不能启用 IPv 6支持。警告
在绑定到非本地主机(例如 可公开访问的) IP解决,确保已保护集群免遭未经授权的访问权限。 有关安全建议的完整列表,请参阅自托管部署的安全检查清单。 至少应考虑启用身份验证并强化网络基础架构。
有关 IP 绑定的更多信息,请参阅自托管部署中的 IP 绑定文档。
或者,您可以将
--bind_ip
选项设置为::,0.0.0.0
或星号"*"
(将星号括在引号中以避免文件名模式扩展)。注意
--bind_ip
和--bind_ip_all
是互斥的。也就是说,您可以指定其中之一,但不能同时指定两者。
--clusterIpSourceAllowlist <string>
版本 5.0 中的新增功能。
IP 地址/CIDR(无类别域间路由)范围列表,
mongod
据以验证来自副本集其他成员的身份验证请求;如果属于分片集群的一部分,则验证mongos
实例。mongod
验证源 IP 是否明确位于列表中或属于列表中的 CIDR 范围。如果 IP 地址不存在,则服务器不会对mongod
或mongos
进行身份验证。--clusterIpSourceAllowlist
对未经身份验证启动的mongod
没有影响。--clusterIpSourceAllowlist
接受多个以逗号分隔的 IPv4/6 地址或无类域间路由 (CIDR) 范围:mongod --clusterIpSourceAllowlist 192.0.2.0/24,127.0.0.1,::1 重要
确保
--clusterIpSourceAllowlist
包含 IP 地址或 CIDR 范围,其中包括部署中每个副本集节点或mongos
的 IP 地址,以确保集群组件之间的正常通信。
--clusterIpSourceWhitelist <string>
在 5.0 版本中弃用:请改用
--clusterIpSourceAllowlist
。IP 地址/CIDR(无类别域间路由)范围列表,
mongod
据以验证来自副本集其他成员的身份验证请求;如果属于分片集群的一部分,则验证mongos
实例。mongod
验证源 IP 是否明确位于列表中或属于列表中的 CIDR 范围。如果 IP 地址不存在,则服务器不会对mongod
或mongos
进行身份验证。--clusterIpSourceWhitelist
对未经身份验证启动的mongod
没有影响。--clusterIpSourceWhitelist
接受多个以逗号分隔的 IPv4/6 地址或无类域间路由 (CIDR) 范围:mongod --clusterIpSourceWhitelist 192.0.2.0/24,127.0.0.1,::1 重要
确保
--clusterIpSourceWhitelist
包含 IP 地址或 CIDR 范围,其中包括部署中每个副本集节点或mongos
的 IP 地址,以确保集群组件之间的正常通信。
--ipv6
启用 IPv6 支持。默认情况下,
mongod
禁用 IPv6 支持。设置
--ipv6
不会指示mongod
侦听任何本地 IPv6 地址或接口。要将mongod
配置为侦听 IPv6 接口,您必须:使用一个或多个 IPv6 地址或解析为 IPv6 地址的主机名配置
--bind_ip
,或将
--bind_ip_all
设为true
。
--listenBacklog <number>
默认值:目标系统
SOMAXCONN
常量版本 3.6 中的新增功能。
监听队列中可以存在的最大连接数。
警告
在使用此参数之前,请查阅本地系统的文档以了解限制条件和配置要求。
重要
要防止出现未定义行为,为此参数指定一个介于
1
和本地系统SOMAXCONN
常量之间的值。listenBacklog
参数的默认值在编译时设置为目标系统SOMAXCONN
常量。SOMAXCONN
是为侦听系统调用的积压参数记录的最大有效值。某些系统可能会以符号的形式解释
SOMAXCONN
,而另一些系统则以数字方式解释。实践中应用的实际侦听积压可能与SOMAXCONN
常量或--listenBacklog
参数的任何数字解释不同,并且还可能受到 Linux 上的net.core.somaxconn
等系统设置的限制。根据标准的规定,为
listenBacklog
参数传递超过本地系统SOMAXCONN
常量的值是未定义行为。较高的值可能会被默默地整数截断、可能被忽略、可能导致意外资源消耗,或者产生不利后果。在工作负载出现连接峰值的系统上,经验证本地系统能够支持比
SOMAXCONN
常量更高的积压参数值,通过减少被迫进入回退状态的连接次数,将listenBacklog
参数设置为更高的值可能会减少客户端观察到的操作延迟。
--maxConns <number>
mongod
接受的最大并行连接数。如果该设置高于操作系统配置的最大连接跟踪阈值,则该设置无效。不要为此选项分配过低的值,否则会在正常的应用程序操作期间遇到错误。
--logpath <path>
将所有诊断日志记录信息发送到日志文件中,而不是标准输出或主机的系统日志系统。MongoDB 在您指定的路径创建日志文件。
默认情况下,MongoDB 会移动任何现有日志文件而不是覆盖它。要改为追加到日志文件,请设置
--logappend
选项。
--syslog
将所有日志记录输出发送到主机的 syslog 系统,而不是发送到标准输出或日志文件 (
--logpath
)。--syslog
选项在 Windows 上不受支持。警告
syslog
守护进程在记录消息时生成时间戳,而不是在 MongoDB 发出消息时生成时间戳。这可能会导致日志条目的时间戳产生误导,尤其是当系统负载较重时。我们建议对生产系统使用--logpath
选项,以确保时间戳的准确性。MongoDB 将该组件包含在其发往
syslog
的日志消息中。... ACCESS [repl writer worker 5] Unsupported modification to roles collection ...
--syslogFacility <string>
默认:用户
指定将消息记录到系统日志时使用的设施级别。您指定的值必须受操作系统的系统日志实现支持。要使用该选项,必须启用
--syslog
选项。
--logRotate <string>
默认:重命名
确定轮换服务器日志和/或审核日志时
logRotate
命令的行为。指定rename
或reopen
:rename
对日志文件进行重命名。reopen
按照典型的 Linux/Unix 日志轮换行为关闭并重新打开日志文件。使用 Linux/Unix logrotate 实用程序时使用reopen
避免日志丢失。如果指定
reopen
,那么您还必须使用--logappend
。
--timeStampFormat <string>
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
注意
--timeStampFormat
不再支持ctime
。ctime
格式日期的示例为:Wed Dec 31 18:17:54.811
。
--pidfilepath <path>
指定文件位置以存储
mongod
进程的进程 ID (PID)。运行mongod
或mongos
进程的用户必须能够写入此路径。如果未指定--pidfilepath
选项,进程不会创建 PID 文件。该选项通常只能与--fork
选项结合使用。注意
Linux
在 Linux 上,PID 文件管理通常由发行版的初始化系统负责:一般是
/etc/init.d
目录中的服务文件,或者是使用systemctl
注册的 systemd 单元文件。仅当您未使用这些初始化系统时,才使用--pidfilepath
选项。有关更多信息,请参阅操作系统的相关安装指南。注意
macOS
在 macOS 上,PID 文件管理通常由
brew
处理。 仅当您未在 macOS 系统上使用brew
时才使用--pidfilepath
选项。 有关更多信息,请参阅适用于您的操作系统的相应安装指南。
--keyFile <file>
指定密钥文件的路径,该文件存储MongoDB实例用于在分片分片集群或副本集相互验证的共享密钥。
--keyFile
意味着--auth
。 有关更多信息,请参阅自管理内部/成员身份验证。用于内部成员身份验证的密钥文件使用 YAML 格式,允许在密钥文件中包含多个密钥。YAML 格式接受以下任一形式:
单个密钥字符串(与早期版本相同)
键字符串序列
YAML 格式与使用文本文件格式的现有单密钥文件兼容。
--setParameter <options>
指定用于自托管部署的MongoDB Server参数 中描述的MongoDB参数之一。 您可以指定多个
setParameter
字段。
--nounixsocket
禁用 UNIX 域套接字上的侦听。
--nounixsocket
仅适用于基于 Unix 的系统。mongod
进程始终侦听 UNIX 套接字,除非满足以下任一条件:--nounixsocket
已设置net.bindIp
未设置net.bindIp
未指定localhost
或其相关 IP 地址
--unixSocketPrefix <path>
默认:/tmp
UNIX 套接字的路径。
--unixSocketPrefix
仅适用于基于 Unix 的系统。如果此选项没有值,则
mongod
进程将创建一个以/tmp
作为前缀的套接字。MongoDB 创建并侦听 UNIX 套接字,除非满足以下条件之一:net.unixDomainSocket.enabled
isfalse
--nounixsocket
已设置net.bindIp
未设置net.bindIp
未指定localhost
或其相关 IP 地址
--filePermissions <path>
默认值:
0700
设置 UNIX 域套接字文件的权限。
--filePermissions
仅适用于基于 Unix 的系统。
--fork
启用后台运行
mongod
进程的守护进程模式。--fork
选项在 Windows 系统上不受支持。默认情况下,
mongod
不作为守护进程运行。您可以使用--fork
或处理守护进程的控制进程将mongod
作为守护进程运行,例如upstart
或systemd
。要使用
--fork
,通过以下方法之一配置mongod
的日志输出:
--auth
启用授权以控制用户对数据库资源和操作的访问。启用授权后,MongoDB 要求所有客户端先进行身份验证,以确定各客户端对应的访问权限。
如要配置用户,请使用
mongosh
客户端。如果用户不存在,则本地主机接口可以访问数据库,直到您创建第一个用户。有关详细信息,请参阅安全性。
--transitionToAuth
版本 3.4 中的新增功能。
允许
mongod
接受和创建与部署中其他mongod
和mongos
实例之间的经过身份验证和未经身份验证的连接。用于执行副本集或分片集群从无身份验证配置到内部身份验证的滚动过渡。需要指定内部身份验证验证机制,如--keyFile
。例如,如果使用密钥文件进行内部身份验证,
mongod
会使用匹配的密钥文件与部署中的任何mongod
或mongos
创建经身份验证的连接。如果安全机制不匹配,则mongod
将改用未经身份验证的连接。使用
--transitionToAuth
运行的mongod
不会强制实施用户访问控制。用户无需任何访问控制检查即可连接到您的部署并执行读取、写入和管理操作。注意
使用内部身份验证且不使用
--transitionToAuth
运行的mongod
要求客户端使用用户访问控制进行连接。更新客户端以在重新启动mongod
之前使用适当的用户连接到mongod
,而无需--transitionToAuth
。
--cpu
强制
mongod
进程每四秒报告一次处于写锁状态的 CPU 时间百分比。
--cpu
强制
mongod
进程每四秒报告一次处于写锁状态的 CPU 时间百分比。
--notablescan
禁止需要集合扫描的操作。更多信息,请参阅
notablescan
。
--shutdown
--shutdown
选项可以完全、彻底地终止mongod
进程。使用此选项调用mongod
时,您必须直接或通过配置文件和--config
选项来设置--dbpath
选项。--shutdown
选项仅适用于 Linux 系统。有关关闭的其他方法,另请参阅 停止
mongod
进程。
--redactClientLogData
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
使用
--redactClientLogData
运行的mongod
会在登录之前编辑与给定日志事件相关的任何消息。这可以防止mongod
将数据库中存储的潜在敏感数据写入诊断日志。错误或操作代码、行号和源文件名等元数据在日志中仍然可见。将
--redactClientLogData
与静态加密和 TLS/SSL(传输加密)结合使用,以帮助符合监管要求。例如,MongoDB 部署可能会将个人身份信息 (PII) 存储在一个或多个集合中。
mongod
日志事件,例如与增删改查操作、分片元数据等。mongod
可能会公开 PII 作为这些日志记录操作的一部分。通过--redactClientLogData
运行的mongod
会在输出到日志之前删除与这些事件相关的任何消息,从而有效地删除了 PII。由于缺少与日志事件相关的数据,对使用
--redactClientLogData
运行的mongod
进行诊断可能会更加困难。有关--redactClientLogData
对日志输出影响的示例,请参阅进程日志记录手册页面。在运行中的
mongod
上,使用setParameter
与redactClientLogData
参数配置此设置。
--networkMessageCompressors <string>
Default: snappy,zstd,zlib
版本 3.4 中的新增功能。
指定默认压缩程序用于此
mongod
实例与以下对象之间的通信:部署的其他成员(如果实例是副本集或分片集群的一部分)
支持
OP_COMPRESSED
消息格式的驱动程序。
MongoDB 支持以下压缩程序:
注意
mongod
和mongos
实例按该顺序均默认为snappy,zstd,zlib
压缩器。要禁用网络压缩,请将值设置为
disabled
。重要
当双方都启用网络压缩时,消息就会被压缩。否则,各方之间的消息不会被压缩。
如果指定多个压缩程序,则列出压缩程序的顺序与通信发起者都很重要。例如,如果
mongosh
指定以下网络压缩程序zlib,snappy
且mongod
指定snappy,zlib
,则mongosh
与mongod
之间的消息使用zlib
。如果各方未分享至少一个通用压缩程序,则各方之间的消息将不会被压缩。例如,如果
mongosh
指定网络压缩程序zlib
且mongod
指定snappy
,则mongosh
与mongod
之间的消息将不会被压缩。
--timeZoneInfo <path>
加载时区数据库的完整路径。如果未提供此选项,则 MongoDB 将使用内置的时区数据库。
Linux 和 macOS 软件包中包含的配置文件默认将时区数据库设置为
/usr/share/zoneinfo
。内置时区数据库是 OLSON/IANA 时区数据库的副本。它随着 MongoDB 的发布而更新,但时区数据库的发布周期与 MongoDB 的发布周期不同。时区数据库的最新版本可在我们的下载网站上找到。
wget https://downloads.mongodb.org/olson_tz_db/timezonedb-latest.zip unzip timezonedb-latest.zip mongod --timeZoneInfo timezonedb-2017b/ 警告
MongoDB 使用第三方 timelib 库提供时区之间的准确转换。由于最近的更新,
timelib
可能会在旧版本的 MongoDB 中创建不准确的时区转换。要显式链接到 5.0 之前的 MongoDB 版本中的时区数据库,请下载时区数据库。并使用
timeZoneInfo
参数。
--outputConfig
将
mongod
实例的配置选项(采用 YAML 格式)输出到stdout
并退出mongod
实例。 对于使用来自外部的配置文件值进行自我管理的部署的配置选项,--outputConfig
返回这些选项的解析值。警告
这可能包括之前通过外部来源进行模糊处理的任何配置的密码或密钥。
有关用法示例,请参阅:
LDAP 身份验证或授权选项
--ldapServers <host1>:<port>,<host2>:<port>,...,<hostN>:<port>
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
特定 LDAP 服务器,
mongod
在该服务器上对用户进行身份验证或决定授权用户可对给定数据库执行哪些操作。如果指定的 LDAP 服务器有任何复制的实例,则可以在逗号分隔的列表中指定每个复制的服务器的主机和端口。如果您的 LDAP 基础架构将 LDAP 目录分区到多个 LDAP 服务器,请将一个LDAP 服务器或其任何复制实例指定为
--ldapServers
。 MongoDB 支持 RFC45114.1 中定义的以下 LDAP10 引用。 。请勿使用--ldapServers
列出基础架构中的每台 LDAP 服务器。可以在运行中的
mongod
上配置此设置,但需使用setParameter
。如果未设置,
mongod
无法使用 LDAP 身份验证或授权。
--ldapValidateLDAPServerConfig <boolean>
在 MongoDB Enterprise 中可用
一个标记,其确定
mongod
实例是否在启动时检查LDAP server(s)
的可用性:如果为
true
,则mongod
实例执行可用性检查,并且仅在 LDAP 服务器可用时才继续启动。如果为
false
,则mongod
实例将跳过可用性检查;也就是说,即使 LDAP 服务器不可用,实例也会启动。
--ldapQueryUser <string>
仅在 MongoDB Enterprise 中可用。
mongod
连接到 LDAP 服务器或在该服务器上执行查询时所绑定的身份。仅当满足以下任一条件时才需要:
使用 LDAP 授权。
将 LDAP 查询用于
username transformation
LDAP 服务器不允许匿名绑定
您必须使用
--ldapQueryUser
和--ldapQueryPassword
。如果未设置,则
mongod
不会尝试绑定到 LDAP 服务器。可以在运行中的
mongod
上配置此设置,但需使用setParameter
。注意
Windows MongoDB 部署可以使用
--ldapBindWithOSDefaults
而不是--ldapQueryUser
和--ldapQueryPassword
。不能同时指定--ldapQueryUser
和--ldapBindWithOSDefaults
。
仅在 MongoDB Enterprise 中可用。
使用 --ldapQueryUser
时用于绑定到 LDAP 服务器的密码。您必须使用 --ldapQueryPassword
与 --ldapQueryUser
。
如果未设置,则 mongod
不会尝试绑定到 LDAP 服务器。
您可以使用 setParameter
在运行中的 mongod
配置此设置。
ldapQueryPassword
setParameter
命令接受字符串或字符串数组。如果将 ldapQueryPassword
设置为数组,则 MongoDB 会按顺序尝试每个密码,直到成功为止。使用大量密码滚动 LDAP 帐户密码,无需停机。
注意
Windows MongoDB 部署可以使用 --ldapBindWithOSDefaults
而不是 --ldapQueryUser
和 --ldapQueryPassword
。不能同时指定 --ldapQueryPassword
和 --ldapBindWithOSDefaults
。
--ldapBindWithOSDefaults <bool>
默认:false
3.4 版本中的新增功能:仅在 Windows 平台上的 MongoDB Enterprise 中可用。
在连接 LDAP 服务器时,允许
mongod
使用您的 Windows 登录档案进行身份验证或绑定。仅在以下情况下才需要:
使用 LDAP 授权。
将 LDAP 查询用于
username transformation
LDAP 服务器不允许匿名绑定
使用
--ldapBindWithOSDefaults
替换--ldapQueryUser
和--ldapQueryPassword
。
--ldapBindMethod <string>
默认值:简单
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
mongod
用于对 LDAP 服务器进行身份验证的方法。与--ldapQueryUser
和--ldapQueryPassword
一起使用以连接到 LDAP 服务器。--ldapBindMethod
支持以下值:simple
-mongod
使用简单身份验证。sasl
mongod
使用 SASL 协议进行身份验证
如果指定
sasl
,则可以使用--ldapBindSaslMechanisms
配置可用的 SASL 机制。mongod
默认使用DIGEST-MD5
机制。
--ldapBindSaslMechanisms <string>
默认值:DIGEST-MD5
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
以逗号分隔的 SASL 机制列表,
mongod
可使用此列表向 LDAP 服务器进行身份验证。mongod
和 LDAP 服务器必须就至少一种机制达成一致。mongod
可在运行时动态加载主机上安装的任何 SASL 机制库。可在
mongod
主机以及远程 LDAP 服务器主机上安装和配置所选 SASL 机制的相应库。默认情况下,操作系统可能包含某些 SASL 库。请遵循与每个 SASL 机制相关的文档来获取有关安装和配置的指南。如果将
GSSAPI
SASL 机制与自托管部署上的Kerberos身份验证结合使用,请验证mongod
托管的以下内容:Linux
KRB5_CLIENT_KTNAME
环境变量会解析为主机客户端 Linux Keytab 文件的名称。有关 Kerberos 环境变量的更多信息,请参阅 Kerberos 文档。客户端密钥表包含供
mongod
连接到 LDAP 服务器并执行 LDAP 查询时使用的用户主体。
Windows
- 如果连接到 Active Directory 服务器,Windows Kerberos 配置会在用户登录系统时自动生成 Ticket-Granting-Ticket。将
--ldapBindWithOSDefaults
设置为true
以允许mongod
在连接到 Active Directory 服务器时使用生成的凭证并执行查询。
将
--ldapBindMethod
设置为sasl
以使用此选项。注意
有关 SASL 机制的完整列表,请参阅 IANA 列表。请参阅 LDAP 或 Active Directory 服务的文档来识别与该服务兼容的 SASL 机制。
MongoDB 不是 SASL 机制库的来源,MongoDB 文档也不是安装或配置任何给定 SASL 机制的权威来源。如需获得文档和支持,请咨询 SASL 机制库供应商或所有者。
有关 SASL 的更多信息,请参阅以下资源:
对于 Linux,请参阅 Cyrus SASL 文档。
对于 Windows,请参阅 Windows SASL 文档。
--ldapTransportSecurity <string>
默认值:tls
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
默认情况下,
mongod
会创建与 LDAP 服务器的 TLS/SSL 安全连接。对于 Linux 部署,必须在
/etc/openldap/ldap.conf
文件中配置相应的 TLS 选项。操作系统的程序包管理器通过libldap
依赖项创建此文件作为 MongoDB Enterprise 安装的一部分。有关更完整的说明,请参阅 ldap.conf OpenLDAP 文档中的TLS Options
。在 Windows 上部署时,必须将 LDAP 服务器 CA 证书添加到 Windows 证书管理工具中。该工具的确切名称和功能可能会因操作系统版本而异。有关证书管理的更多信息,请参阅您的 Windows 版本对应的文档。
将
--ldapTransportSecurity
设置为none
,可在mongod
与 LDAP 服务器之间禁用 TLS/SSL。警告
将
--ldapTransportSecurity
设置为none
可在mongod
和 LDAP 服务器之间传输纯文本信息,可能还传输凭证。
--ldapTimeoutMS <long>
默认值:10000
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
mongod
应等待 LDAP 服务器响应请求的时间,以毫秒为单位。如果失败的根源是连接超时,增加
--ldapTimeoutMS
的值可以防止 MongoDB 服务器和 LDAP 服务器之间的连接失败。降低--ldapTimeoutMS
的值会缩短 MongoDB 等待 LDAP 服务器响应的时间。可以在运行中的
mongod
上配置此设置,但需使用setParameter
。
--ldapUserToDNMapping <string>
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
将提供给
mongod
进行身份验证的用户名映射到 LDAP 标识名 (DN)。以下情况下,可能需要使用--ldapUserToDNMapping
将用户名转换为 LDAP DN:通过 LDAP 简单绑定进行 LDAP 身份验证,其中用户使用非完整 LDAP DN 的用户名向 MongoDB 进行身份验证。
使用需要 DN 的
LDAP authorization query template
。使用不同的身份验证机制(如 x.509、kerberos)将向 Mongo DB 进行身份验证的客户端的用户名转换为完整的 LDAP DN,以进行授权。
--ldapUserToDNMapping
需要一个用引号括住的 JSON 字符串,代表一个有序的文档数组。每个文档都包含正则表达式match
以及用于转换传入用户名的substitution
或ldapQuery
模板。数组中的每个文档均采用以下形式:
{ match: "<regex>" substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>" } 字段说明例子match
ECMAScript 格式的正则表达式 (regex),用于与提供的用户名进行匹配。每个括号括起来的部分表示substitution
或ldapQuery
使用的正则表达式捕获组。"(.+)ENGINEERING"
"(.+)DBA"
substitution
"cn={0},ou=engineering, dc=example,dc=com"
ldapQuery
LDAP 查询格式模板,该模板将匹配match
正则表达式的身份验证名称插入到按照 RFC4515 和 RFC4516 编码的 LDAP 查询 URI 中。每个大括号内的数值都替换为相应的正则表达式捕获组,这些捕获组是通过match
表达式从身份验证用户名中提取而来的。mongod
针对 LDAP 服务器执行查询,以检索经身份验证用户的 LDAP DN。mongod
要求只有一个返回结果才能转换成功,也可以通过mongod
跳过此转换。"ou=engineering,dc=example, dc=com??one?(user={0})"
对于数组中的每个文档,必须使用
substitution
或ldapQuery
。不能在同一文档中同时指定两者。执行身份验证或授权时,
mongod
按给定顺序遍历数组中的每个文档,对照match
筛选器检查身份验证用户名。如果发现匹配,mongod
就会进行转换,并使用输出结果对用户进行身份验证。mongod
不会检查数组中的其余文档。如果给定文档与提供的身份验证名称不匹配,
mongod
会继续浏览文档列表以查找其他匹配项。如果在任何文档中均未找到匹配项,或者文档描述的转换失败,mongod
将返回错误信息。mongod
也会返回错误(如果由于 LDAP 服务器网络或身份验证失败而无法评估某项转换)。mongod
会拒绝连接请求,不检查数组中的其余文档。从 MongoDB 5.0 开始,
--ldapUserToDNMapping
接受空字符串""
或空数组[ ]
来代替映射文档。如果向--ldapUserToDNMapping
提供空字符串或空数组,MongoDB 会将经过身份验证的用户名映射为 LDAP DN。在早期版本中,提供空映射文档会导致映射失败。例子
下面展示了两个转换文档。第一个文档匹配以
@ENGINEERING
结尾的任何字符串,将后缀前面的所有内容放入正则表达式捕获组中。第二个文档匹配以@DBA
结尾的任何字符串,将后缀前面的所有内容放入正则表达式捕获组中。重要
必须将数组作为字符串传递给 --ldapUserToDNMapping。
"[ { 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}
对应于字符串bob
。生成的输出是 LDAP 查询"ou=dba,dc=example,dc=com??one?(user=bob)"
。mongod
针对 LDAP 服务器执行此查询,并返回结果"cn=bob,ou=dba,dc=example,dc=com"
。如果未设置
--ldapUserToDNMapping
,则mongod
在尝试通过 LDAP 服务器对用户进行身份验证或授权时,不会对用户名进行转换。可以在运行中的
mongod
上配置此设置,但需使用setParameter
数据库命令。
--ldapAuthzQueryTemplate <string>
3.4 版本中的新增功能:仅在 MongoDB Enterprise 中可用。
格式符合 RFC4515 和 RFC4516 的相对 LDAP 查询 URL,
mongod
执行该 URL 可获取已验证用户所属的 LDAP 组。该查询相对于在--ldapServers
中指定的一台或多台主机。在 URL 中,可以使用以下替换令牌:
替换令牌说明{USER}
使用经过身份验证的用户名进行替换,或者,如果指定了username mapping
,则使用transformed
用户名进行替换。{PROVIDED_USER}
替换提供的用户名,即在身份验证或LDAP transformation
之前。构造查询 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。可以在运行中的
mongod
上配置此设置,但需使用setParameter
数据库命令。
存储选项
--storageEngine string
默认值:
wiredTiger
指定
mongod
数据库的存储引擎。可用值包括:值说明wiredTiger
指定 WiredTiger 存储引擎。inMemory
仅在 MongoDB Enterprise 中可用。
如果您尝试使用包含由除
--storageEngine
指定的存储引擎生成的数据文件的--dbpath
来启动mongod
,则mongod
不会启动。
--dbpath <path>
默认值:Linux 和 macOS 上为
/data/db
,Windows 上为\data\db
mongod
实例用于存储数据的目录。如果使用 MongoDB 包管理器安装文件中包含的默认配置文件,则相应的
storage.dbPath
设置使用不同的默认设置。--dbpath
中的文件必须对应于--storageEngine
中指定的存储引擎。如果数据文件与--storageEngine
不对应,则mongod
不会启动。
--directoryperdb
使用单独的目录来存储每个数据库的数据。这些目录位于
--dbpath
目录下,每个子目录的名称都与数据库名称相对应。从 MongoDB 5.0 开始,启用
--directoryperdb
时删除数据库中的最终集合(或删除数据库本身)会删除该数据库的新空子目录。要更改现有部署的
--directoryperdb
选项:对于独立运行的实例:
在现有的
mongod
实例上使用mongodump
来生成备份。停止
mongod
实例。添加
--directoryperdb
值并配置新的数据目录重新启动
mongod
实例。使用
mongorestore
填充新数据目录。
对于副本集:
停止从节点成员。
添加
--directoryperdb
值并为该从节点成员配置新的数据目录。重启该从节点。
使用初始同步填充新数据目录。
以同样的方式更新剩下的从节点。
降级主节点,并以相同的方式更新降级的成员。
--syncdelay <value>
默认:60
控制 MongoDB 将数据刷新到数据文件之前所需的时间。
请勿对生产系统设置此值。几乎在所有情况下,均应使用默认设置。
mongod
进程非常快速地将数据写入日志,并延迟写入数据文件。--syncdelay
对日志记录没有影响,但如果将--syncdelay
设置为0
,日志最终会消耗所有可用磁盘空间。为了提供持久性数据,WiredTiger 使用了检查点。 有关详细信息,请参阅《日志和 WiredTiger 存储引擎》。
--upgrade
如果需要,请将
--dbpath
指定的文件的磁盘数据格式升级到最新版本。如果数据文件采用旧格式,此选项仅影响
mongod
的操作。在大多数情况下,不应设置此值,以便最大限度控制升级过程。有关升级过程的更多信息,请参阅 MongoDB 发布说明。
--repair
对
mongod
实例的所有数据库运行修复例程。从 MongoDB 5.0 开始:
修复操作会验证集合以找到任何不一致之处并在可能的情况下进行修复,从免重建索引。
如果集合的数据文件已被挽救,或者如果集合有验证步骤无法修复的不一致之处,则将重建所有索引。
提示
如果您在启用日志记录功能的情况下运行,则几乎无需运行修复,因为服务器可以使用日志文件将数据文件自动恢复到干净状态。但是,如果需要从磁盘级数据损坏中恢复,则可能需要运行修复。
警告
仅当您没有其他选择时才使用
mongod --repair
。该操作会在修复过程中删除且不保存任何损坏的数据。避免对副本集节点运行
--repair
:要修复副本集成员,如果您有可用的完整数据副本(例如,最近的备份或副本集的完整成员),请从该完整副本中恢复。 要学习;了解更多信息,请参阅重新同步自管理副本集的成员。
如果您选择对副本集成员运行
mongod --repair
,并且该操作会修改数据或元数据,则仍须执行完全重新同步才能使该成员重新加入副本集。
如果因任何原因无法完成修复,您必须使用
--repair
选项重启实例。
--journal
启用持久性日志以确保数据文件保持有效且可恢复。 此选项仅在您指定
--dbpath
选项时适用。 默认情况下,mongod
会启用日志功能。如果副本集的任何有投票权成员使用内存存储引擎,则必须将
writeConcernMajorityJournalDefault
设为false
。从版本 4.2(以及 4.0.13 和 3.6.14)开始,如果某个副本集节点使用内存存储引擎(有投票权或无投票权),但副本集将
writeConcernMajorityJournalDefault
设置为 true,则该副本集节点会记录一个启动警告。
WiredTiger 选项
--wiredTigerCacheSizeGB <float>
定义 WiredTiger 用于所有数据的内部缓存的最大大小。索引构建消耗的内存(请参阅
maxIndexBuildMemoryUsageMegabytes
)与 WiredTiger 缓存内存是分开的。取值范围可以从
0.25
GB 到10000
GB 不等。默认 WiredTiger 内部缓存大小为以下两者中的较大者:
(RAM 大小 - 1 GB)的 50%,或
256 MB.
例如,在总 RAM 为 4GB 的系统上,WiredTiger 缓存使用 1.5GB RAM (
0.5 * (4 GB - 1 GB) = 1.5 GB
)。相反,在总 RAM 为 1.25GB 的系统上,WiredTiger 为 WiredTiger 缓存分配了 256 MB,因为这大于总 RAM 的一半减去 1 GB (0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB
)。注意
在某些情况下,比如在容器中运行时,数据库的内存约束可以低于系统总内存。在此类情况下,将此内存限制而非系统总内存用作最大可用 RAM。
如需查看内存限制,请参阅
hostInfo.system.memLimitMB
。避免将 WiredTiger 内部缓存大小增加到超过其默认值。
借助 WiredTiger,MongoDB 可同时利用 WiredTiger 内部缓存和文件系统缓存。
借助文件系统缓存,MongoDB 会自动使用 WiredTiger 缓存或其他进程未使用的所有空闲内存。
注意
--wiredTigerCacheSizeGB
限制了 WiredTiger 内部缓存的大小。操作系统使用可用的空闲内存进行文件系统缓存,这允许压缩的 MongoDB 数据文件保留在内存中。此外,操作系统使用任何空闲 RAM 来缓冲文件系统块和文件系统缓存。为了容纳额外的 RAM 用户,您可能必须减少 WiredTiger 的内部缓存大小。
默认 WiredTiger 内部缓存大小值假设每台计算机有一个
mongod
实例。如果一台计算机包含多个 MongoDB 实例,则应减少该设置以容纳其他mongod
实例。如果在容器(如
lxc
、cgroups
、Docker 等)中运行mongod
,而此容器无权访问系统提供的的所有可用 RAM,则必须将--wiredTigerCacheSizeGB
设为小于容器中可用 RAM 数量的值。确切的数量取决于容器中运行的其他进程。请参阅memLimitMB
。
--wiredTigerDirectoryForIndexes
如果使用
--wiredTigerDirectoryForIndexes
启动mongod
,mongod
会将索引和集合存储在数据(即--dbpath
) 目录下的不同子单独目录中。具体来说,mongod
将索引存储在名为index
的子目录中,并将集合数据存储在名为collection
的子目录中。您可以使用符号链接,为索引指定不同的位置。具体而言,当
mongod
实例未运行时,将index
子目录移至目标并在数据目录下创建一个名为index
的符号链接,指向新目标。
--wiredTigerCollectionBlockCompressor <compressor>
默认值:snappy
指定集合数据的默认压缩类型。创建集合时,您可以针对每个集合覆盖此设置。
可用的压缩类型有:
--wiredTigerCollectionBlockCompressor
会影响创建的所有集合。如果在现有 MongoDB 部署上更改--wiredTigerCollectionBlockCompressor
的值,则所有新集合都将使用指定的压缩程序。现有集合继续使用创建时指定的压缩程序,或当时的默认压缩程序。
--wiredTigerIndexPrefixCompression <boolean>
默认值:true
为索引数据启用或禁用前缀压缩。
为
--wiredTigerIndexPrefixCompression
指定true
可对索引数据启用前缀压缩,指定false
可为索引数据禁用前缀压缩。--wiredTigerIndexPrefixCompression
设置会影响创建的所有索引。如果在现有 MongoDB 部署上更改--wiredTigerIndexPrefixCompression
的值,则所有新索引都将使用前缀压缩。现有索引不受影响。
复制选项
--replSet <setname>
配置复制。指定副本集名称作为该副本集的参数。副本集中的所有主机必须具有相同的设置名称。
从 MongoDB 4.0 开始,
对于WiredTiger storage engine ,
--replSet
不能与--nojournal
一起使用。
如果您的应用程序连接到多个副本集,则每个副本集的名称必须不同。有些驱动程序会按副本集名称对副本集连接进行分组。
--oplogSize <value>
oplog 的最大大小(以兆字节为单位)。
oplogSize
设置将配置 oplog 的未压缩大小,而不是磁盘上的大小。注意
oplog 的大小可能会超过其配置的大小限制,从而避免删除
majority commit point
。默认情况下,
mongod
进程会根据最大可用空间量创建一个 oplog。对于 64 位系统,该 oplog 通常占可用磁盘空间的 5%。只要
mongod
首次创建了 oplog,更改--oplogSize
选项将不会影响 oplog 的大小。要在启动mongod
后更改 oplog 的最短保留期,请使用replSetResizeOplog
。replSetResizeOplog
使您能够动态调整 oplog 的大小,而无需重新启动mongod
进程。要在重启后保持使用replSetResizeOplog
所做的更改,请更新--oplogSize
的值。更多信息,请参阅 Oplog 大小。
--oplogMinRetentionHours <value>
指定保留 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
的值。
--enableMajorityReadConcern
默认值:true
配置对
"majority"
读关注的支持。从 MongoDB 5.0 开始,
--enableMajorityReadConcern
不可更改,并始终设置为true
。在早期版本的 MongoDB 中,--enableMajorityReadConcern
是可配置的。警告
如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:
如果从节点不可用或滞后,写关注
"majority"
可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。如果使用的全局默认值
"majority"
,并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。
分片集群选项
--configsvr
启动配置服务器时必需。
声明此
mongod
实例用作分片集群的配置服务器。客户端(即其他集群组件)在使用此选项运行时无法将数据写入除config
和admin
之外的任何数据库。除非指定,否则使用此选项的mongod
的默认端口为27019
,默认--dbpath
目录为/data/configdb
。重要
使用
--configsvr
启动 MongoDB Server 时,您还须指定--replSet
。不再支持将已弃用的镜像
mongod
实例用作配置服务器 (SCCC)。副本集配置服务器 (CSRS) 必须运行 WiredTiger 存储引擎。
--configsvr
选项会创建一个本地 oplog。请勿将
--configsvr
选项与--shardsvr
一起使用。配置服务器不能是分片服务器。请勿将
--configsvr
与skipShardingConfigurationChecks
参数一起使用。也就是说,如果您暂时以独立形式启动mongod
以进行维护操作,请加上参数skipShardingConfigurationChecks
并去掉--configsvr
。维护完成后,删除skipShardingConfigurationChecks
参数,然后使用--configsvr
重启。
--shardsvr
启动分片服务器时必需。
将此
mongod
实例配置为分片集群中的分片。这些实例的默认端口是27018
。请勿将
--shardsvr
与skipShardingConfigurationChecks
参数一起使用。也就是说,如果您暂时以独立形式启动mongod
以进行维护操作,请加上参数skipShardingConfigurationChecks
并去掉--shardsvr
。维护完成后,删除skipShardingConfigurationChecks
参数,然后使用--shardsvr
重启。
TLS 选项
--tlsMode <mode>
对所有网络连接启用 TLS 模式。
--tlsMode
选项的参数可以是以下之一:值说明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 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsCertificateKeyFile <filename>
指定同时包含 TLS/SSL 证书和密钥的
.pem
文件。在 macOS 或 Windows 上,可以使用
--tlsCertificateSelector
选项指定来自操作系统的安全证书存储区的证书,而不是 PEM 密钥文件。--tlsCertificateKeyFile
和--tlsCertificateSelector
选项是互斥的。您只能指定一个。在 Linux/BSD 上,当启用 TLS/SSL 时,您必须指定
--tlsCertificateKeyFile
。在 Windows 或 macOS 上,当启用 TLS/SSL 时,必须指定
--tlsCertificateKeyFile
或--tlsCertificateSelector
。重要
仅适用于 Windows,MongoDB 不支持加密的 PEM 文件。如果遇到加密 PEM 文件,则
mongod
无法启动。要在 Windows 上安全地存储和访问用于 TLS 的证书,请使用--tlsCertificateSelector
。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsCertificateKeyFilePassword <value>
指定解密证书密钥文件的密码(即
--tlsCertificateKeyFile
)。仅在证书密钥文件已加密的情况下使用--tlsCertificateKeyFilePassword
选项。在所有情况下,mongod
都会对所有日志记录和报告输出中的密码进行脱敏。在 Linux/BSD 上,如果 PEM 文件中的私钥已加密且您未指定
--tlsCertificateKeyFilePassword
选项,则 MongoDB 会提示您输入密码。请参阅 TLS/SSL 证书密码。在 macOS 上,如果 PEM 文件中的私钥已加密,则必须明确指定
--tlsCertificateKeyFilePassword
选项。或者,您可以使用安全系统存储中的证书(请参阅--tlsCertificateSelector
)而不是 PEM 文件,或者使用未加密的 PEM 文件。在 Windows 上,MongoDB 不支持加密证书。如果
mongod
遇到加密的 PEM 文件,则会失败。可以使用--tlsCertificateSelector
来代替。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--clusterAuthMode <option>
默认: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 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsClusterFile <filename>
指定包含 x.509 证书密钥文件的
.pem
文件,用于群集或副本集的成员身份验证。在 macOS 或 Windows 上,可以使用
--tlsClusterCertificateSelector
选项指定来自操作系统的安全证书存储区的证书,而不是 PEM 密钥文件。--tlsClusterFile
和--tlsClusterCertificateSelector
选项是互斥的。您只能指定一个。如果
--tlsClusterFile
没有为内部集群身份验证指定.pem
文件,或者未指定备选--tlsClusterCertificateSelector
,则集群使用在--tlsCertificateKeyFile
选项中指定的.pem
文件,或使用由--tlsCertificateSelector
返回的证书。如果使用 x.509 身份验证,则必须指定
--tlsCAFile
或tls.CAFile
,除非使用--tlsCertificateSelector
。如果显示的 x.509 证书在
mongod/mongos
主机系统时间后的30
天内过期,则mongod
/mongos
会在连接时记录警告。有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。重要
仅针对 Windows,MongoDB 不支持加密的 PEM 文件。如果遇到加密的 PEM 文件,
mongod
无法启动。如要安全地存储和访问用于 Windows 成员身份验证的证书,请使用--tlsClusterCertificateSelector
。
--tlsCertificateSelector <parameter>=<value>
注意
可在 Windows 和 macOS 上用作
--tlsCertificateKeyFile
的替代方案。指定证书属性,以便从操作系统的证书存储区中选择匹配的证书来用于 TLS。
--tlsCertificateKeyFile
和--tlsCertificateSelector
选项是互斥的。您只能指定一个。--tlsCertificateSelector
接受格式为<property>=<value>
的参数,其中属性可以是以下之一:属性值类型说明subject
ASCII 字符串证书上的主题名称或公用名thumbprint
十六进制字符串以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint
有时称为fingerprint
。在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。
mongod
搜索操作系统的安全证书存储区,查找验证指定 TLS 证书的完整证书链所需的 CA 证书。具体来说,安全证书存储区必须包含根 CA 以及构建 TLS 证书的完整证书链所需的任何中间 CA 证书。请勿使用--tlsCAFile
或--tlsClusterCAFile
指定根 CA 和中间 CA 证书例如,如果 TLS/SSL 证书是使用单个根 CA 证书签署的,则安全证书存储必须包含该根 CA 证书。如果 TLS/SSL 证书是使用中间 CA 证书签署的,则安全证书存储必须包含中间 CA 证书和根 CA 证书。
注意
当使用
net.tls.certificateSelector
或将--tlsCertificateSelector
设为thumbprint
时,无法使用rotateCertificates
命令或db.rotateCertificates()
Shell 方法
--tlsClusterCertificateSelector <parameter>=<value>
注意
可在 Windows 和 macOS 上用作
--tlsClusterFile
的替代方案。指定证书属性,以便从操作系统的证书存储区中选择匹配的证书,并用于内部 x.509 成员身份验证。
--tlsClusterFile
和--tlsClusterCertificateSelector
选项是互斥的。您只能指定一个。--tlsClusterCertificateSelector
接受格式为<property>=<value>
的参数,其中属性可以是以下之一:属性值类型说明subject
ASCII 字符串证书上的主题名称或公用名thumbprint
十六进制字符串以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint
有时称为fingerprint
。mongod
搜索操作系统的安全证书存储区,查找验证指定集群证书的完整证书链所需的 CA 证书。具体来说,安全证书存储区必须包含根 CA 以及构建集群证书的完整证书链所需的任何中间 CA 证书。请勿使用--tlsCAFile
或--tlsClusterCAFile
指定根 CA 和中间 CA 证书。例如,如果集群证书是使用单个根 CA 证书签署的,则安全证书存储区必须包含该根 CA 证书。如果集群证书是使用中间 CA 证书签署的,则安全证书存储区必须包含中间 CA 证书和根 CA 证书。
如果显示的 x.509 证书在
mongod/mongos
主机系统时间后的30
天内过期,则mongod
/mongos
会在连接时记录警告。
--tlsClusterPassword <value>
指定用于解密 x.509 证书密钥文件(由
--tlsClusterFile
指定)的密码。仅当证书密钥文件已加密时才能使用--tlsClusterPassword
选项。在所有情况下,mongod
都会对所有日志记录和报告输出中的密码进行脱敏。在 Linux/BSD 上,如果 x.509 文件中的私钥已加密且未指定
--tlsClusterPassword
选项,MongoDB 则会提示输入密码。请参阅 TLS/SSL 证书密码。在 macOS 上,如果 x.509 文件中的私钥已加密,则必须明确指定
--tlsClusterPassword
选项。另外,也可以使用安全系统存储区中的证书(请参阅--tlsClusterCertificateSelector
)而不是集群 PEM 文件,或者使用未加密的 PEM 文件。在 Windows 上,MongoDB 不支持加密证书。如果
mongod
遇到加密的 PEM 文件,则会失败。可以使用--tlsClusterCertificateSelector
来代替。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsCAFile <filename>
指定包含来自证书颁发机构的根证书链的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。重要
在启动启用了 TLS/SSL 的
mongod
实例时,必须指定--tlsCAFile
标记、net.tls.CAFile
配置选项或tlsUseSystemCA
参数的值。--tlsCAFile
、tls.CAFile
和tlsUseSystemCA
是互斥的。- 仅限 Windows/macOS
- 如果使用
--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
,请勿使用--tlsCAFile
来指定根和中间 CA 证书。将验证--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
证书的完整信任链所需的所有 CA 证书存储在安全证书存储区中。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsClusterCAFile <filename>
指定包含来自证书授权机构的根证书链的
.pem
文件,用于验证建立连接的客户端提供的证书。使用相对或绝对路径指定.pem
文件的文件名。--tlsClusterCAFile
要求设置--tlsCAFile
。如果
--tlsClusterCAFile
未指定.pem
文件来验证建立连接的客户端的证书,集群就会使用--tlsCAFile
选项中指定的.pem
文件。--tlsClusterCAFile
允许您使用单独的证书颁发机构来验证 TLS 握手的客户端到服务器和服务器到客户端部分。- 仅限 Windows/macOS
- 如果使用
--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
,请勿使用--tlsClusterCAFile
来指定根和中间 CA 证书。将验证--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
证书的完整信任链所需的所有 CA 证书存储在安全证书存储区中。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsCRLFile <filename>
指定包含证书吊销列表的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。注意
macOS 上无法指定 CRL 文件。但您可以使用系统 SSL 证书存储区,该存储区使用 OCSP(在线证书状态协议)来验证证书的吊销状态。如要使用系统 SSL 证书存储区,请参阅
--tlsCertificateSelector
。为了检查证书吊销状况,MongoDB 默认
enables
OCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。
有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsAllowInvalidCertificates
绕过对集群中其他服务器上的 TLS 证书进行验证检查,并允许使用无效证书进行连接。
注意
如果您在使用 x.509 身份验证时指定
--tlsAllowInvalidCertificates
或tls.allowInvalidCertificates: true
,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。使用
--tlsAllowInvalidCertificates
设置时,MongoDB 会记录有关使用无效证书的警告。有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsAllowInvalidHostnames
连接副本集或分片集群的其他成员以进行进程间身份验证时,禁用 TLS 证书中的主机名验证。这样即便其他成员的证书中的主机名与配置的主机名不匹配,
mongod
也能与这些成员连接。有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsAllowConnectionsWithoutCertificates
默认情况下,服务器会绕过客户端证书验证,除非将服务器配置为使用 CA 文件。如果提供了 CA 文件,则会应用以下规则:
对于提供证书的客户端,
mongod
会使用--tlsCAFile
指定的根证书链来执行证书验证,并拒绝证书无效的客户端。
如果您的混合部署包含不向或不能向
mongod
提供证书的客户端,请使用--tlsAllowConnectionsWithoutCertificates
选项。有关 TLS 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod
和mongos
以及客户端的 TLS/SSL 配置。
--tlsDisabledProtocols <protocol(s)>
防止使用 TLS 运行的 MongoDB Server 接受使用特定协议的传入连接。要指定多个协议,请使用逗号分隔的协议列表。
--tlsDisabledProtocols
可识别以下协议: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
指定为--tlsDisabledProtocols
。副本集和分片集群的成员必须至少使用一个共同协议。
--tlsFIPSMode
指示
mongod
使用 TLS 库的 FIPS 模式。系统必须有符合 FIPS 标准的库,才能使用--tlsFIPSMode
选项。注意
只有 MongoDB Enterprise 支持与 FIPS 兼容的 TLS/SSL。有关更多信息,请参阅为 FIPS 配置 MongoDB 。
分析器选项
--profile <level>
默认值:0
配置数据库分析器级别。以下分析器级别可用:
0
- 分析器已关闭,因此不收集任何数据。这是默认的分析器级别。
1
分析器会收集超过
slowms
阈值或与指定过滤匹配的操作的数据。设置筛选器后:
slowms
和sampleRate
选项不用于分析。分析器仅捕获与筛选器匹配的操作。
2
- 该分析器会收集所有操作的数据。
警告
分析会降低性能,并在系统日志中暴露未经加密的查询数据。在生产部署中配置和启用分析器之前,请仔细考虑对性能和安全的影响。
有关潜在性能下降的更多信息,请参阅分析器开销。
--slowms <integer>
默认值:100
慢速操作时长阈值(以毫秒为单位)。运行时长超过此阈值的操作被视为慢速操作。
当
logLevel
设置为0
时,MongoDB 会将慢速操作记录到诊断日志中,记录速度由slowOpSampleRate
确定。如果
logLevel
设置得较高,所有操作无论延迟如何,都会显示在诊断日志中,但从节点记录慢速 oplog 条目消息这项操作除外。从节点仅记录慢速 oplog 条目。增加logLevel
不会导致记录所有 oplog 条目。对于
mongod
实例,--slowms
会影响诊断日志,如果启用,它还会影响分析器。
--slowOpSampleRate <double>
默认值:1.0
应分析或记录的慢速操作的比例。
--slowOpSampleRate
接受 0 到 1(含)之间的值。--slowOpSampleRate
不影响副本集的从节点成员记录慢速 oplog 条目日志。从节点成员会记录所有用时超过慢速操作阈值的 oplog 条目,而不论--slowOpSampleRate
。对于
mongod
实例,--slowOpSampleRate
会影响诊断日志,如果启用,它还会影响分析器。
审核选项
--auditDestination
启用审核并指定
mongod
发送所有审核事件的位置。--auditDestination
可能的值:值说明syslog
将审核事件以 JSON 格式输出到系统日志中。在 Windows 上不可用。审核消息的系统日志严重性级别为
info
,设施级别为info
。系统日志消息限制可能会导致审核消息被截断。审核系统既不会检测此类截断,也不会在其出现时报错。
console
将审核事件以 JSON 格式输出到stdout
。file
以--auditFormat
中指定的格式将审核事件输出到--auditPath
中指定的文件。注意
仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。
--auditFormat
如果
--auditDestination
为file
,则指定用于审核的输出文件格式。--auditFormat
选项可为以下任一个值:值说明JSON
将 JSON 格式的审核事件输出到--auditPath
中指定的文件。BSON
以 BSON 二进制格式将审核事件输出到--auditPath
中指定的文件。与以 BSON 格式打印相比,将 Atlas 审核事件以 JSON 格式打印到文件更可能导致服务器性能下降。
注意
仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。
--auditPath
当
--auditDestination
的值为file
时,指定用于 审核 的输出文件。--auditPath
选项可以采用完整路径名或相对路径名。注意
仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。
--auditFilter
指定用于限制审核系统记录的操作类型的筛选器。该选项采用以下形式的查询文档的字符串表示形式:
{ <field1>: <expression1>, ... } <field>
可以是审核消息中的任意字段,包括参数文档中返回的字段。<expression>
是查询条件表达式。要指定 Atlas 审核过滤器,请将过滤器文档括在单引号 中,以将文档作为字符串传递。
要在配置文件中指定审核筛选器,必须使用配置文件的 YAML 格式。
注意
仅在 MongoDB Enterprise 和 MongoDB Atlas 中有用。
SNMP 选项
注意
由于 SERVER-29352 ,macOS 上的 MongoDB Enterprise 不 支持 SNMP。
--snmp-disabled
禁用对
mongod
的 SNMP 访问。 该选项与--snmp-subagent
和--snmp-master
不兼容。
--snmp-subagent
作为子代理运行 SNMP。 该选项与
--snmp-disabled
不兼容。
--snmp-master
以主节点方式运行 SNMP。 该选项与
--snmp-disabled
不兼容。
内存选项
--inMemorySizeGB <float>
默认值:物理 RAM 大小减去 1 GB 后的 50%。
为内存存储引擎数据分配的最大内存量,包括索引、oplog(如果
mongod
是副本集的一部分)、分片集群元数据等。值的范围可以从 256 MB 到 10 TB,并且可以是浮点数。
默认情况下,内存存储引擎使用物理 RAM 大小减去 1 GB 后的 50%。
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
加密密钥管理选项
--enableEncryption
默认:false
版本 3.2 中的新增功能。
对 WiredTiger 存储引擎启用加密。该选项必须启用,才能传递加密密钥和配置。
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--encryptionCipherMode <string>
默认值:AES256-CBC
版本 3.2 中的新增功能。
用于静态加密的密码模式:
模式说明AES256-CBC
采用密码分组链接模式的 256 位高级加密标准AES256-GCM
采用 Galois/Counter 模式的 256 位高级加密标准
仅在 Linux 上可用。
Windows 上的 MongoDB Enterprise 不再支持将
AES256-GCM
作为静态加密的分组密码算法。仅 Linux 版本支持此用法。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--encryptionKeyFile <string>
版本 3.2 中的新增功能。
通过 KMIP 以外的进程管理密钥时,本地密钥文件的路径。仅在通过 KMIP 以外的进程管理密钥时设置。如果已使用 KMIP 加密数据,则 MongoDB 会抛出错误。
该密钥文件只能包含一个密钥。密钥是一个 16 位或 32 位的字符串。
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipKeyIdentifier <string>
版本 3.2 中的新增功能。
KMIP 服务器中现有密钥的唯一 KMIP 标识符。包括该设置可将与该标识符关联的密钥作为系统密钥。只能在第一次为
mongod
实例启用加密时使用该设置。需要--enableEncryption
。如果未指定,MongoDB 会请求 KMIP 服务器创建新密钥用作系统密钥。
如果 KMIP 服务器找不到指定标识符的密钥或者数据已使用密钥加密,则 MongoDB 将报告错误
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipRotateMasterKey <boolean>
默认:false
版本 3.2 中的新增功能。
如果为 true,则轮换主密钥并对内部密钥库重新加密。
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipServerName <string>
版本 3.2 中的新增功能。
要连接的 KMIP 服务器的主机名或 IP 地址。需要
--enableEncryption
。您可以将多个 KMIP 服务器指定为逗号分隔的列表,例如:
server1.example.com,server2.example.com
。启动时,mongod
会尝试按列出的顺序与每台服务器建立连接,并选择可以成功建立连接的第一台服务器。KMIP 服务器选择仅在启动时进行。连接 KMIP 服务器时,
mongod
会验证指定的--kmipServerName
是否与 KMIP 服务器提供的证书中的主题备用名称SAN
(如果SAN
不存在,则为公用名 (CN
)相匹配。如果SAN
存在,则mongod
与CN
不匹配。如果主机名与SAN
(或CN
)不匹配,则mongod
将无法连接。从 MongoDB 4.2 开始,在比较 SAN 时,MongoDB 可以比较 DNS 名称或 IP 地址。在之前的版本中,MongoDB 仅能比较 DNS 名称。
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipPort <number>
默认:5696
版本 3.2 中的新增功能。
用于与 KMIP 服务器通信的端口号。需要
--kmipServerName
。需要--enableEncryption
。如果使用
--kmipServerName
指定多个 KMIP 服务器,则mongod
将对所有提供的 KMIP 服务器使用通过--kmipPort
指定的端口。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipConnectRetries <number>
默认值:0
与 KMIP 服务器初次连接时的重试次数。与
--kmipConnectTimeoutMS
一起使用可控制mongod
在两次重试之间等待响应的时长。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipConnectTimeoutMS <number>
默认值:5000
等待 KMIP 服务器响应的超时时间(以毫秒为单位)。如果指定了
--kmipConnectRetries
设置,mongod
会在两次重试之间等待指定的间隔。取值不得小于
1000
。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipClientCertificateSelector <string>
5.0 版本中的新增功能:可在 Windows 和 macOS 上作为
--kmipClientCertificateFile
的替代方案。--kmipClientCertificateFile
和--kmipClientCertificateSelector
选项是互斥的。您只能指定一个。指定证书属性,以便从操作系统的证书存储区中选择匹配的证书来在 KMIP 服务器上对 MongoDB 进行身份验证。
--kmipClientCertificateSelector
接受格式为<property>=<value>
的参数,其中属性可以是以下之一:属性值类型说明subject
ASCII 字符串证书上的主题名称或公用名thumbprint
十六进制字符串以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint
有时称为fingerprint
。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipClientCertificateFile <string>
版本 3.2 中的新增功能。
用于在 KMIP 服务器上对 MongoDB 进行身份验证的
.pem
文件的路径。指定的.pem
文件必须包含 TLS/SSL 证书和密钥。要使用该选项,还须指定
--kmipServerName
选项。注意
在 macOS 或 Windows 上,您可以使用操作系统安全存储区中的证书而不是 PEM 密钥文件。请参阅
--kmipClientCertificateSelector
。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipClientCertificatePassword <string>
版本 3.2 中的新增功能。
用于解密连接到 KMIP服务器的客户端证书的私钥的密码。此选项向 KMIP服务器对MongoDB进行身份验证,并要求您提供 。
--kmipClientCertificateFile
注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。
--kmipServerCAFile <string>
版本 3.2 中的新增功能。
CA 文件的路径。用于验证客户端与 KMIP 服务器的连接是否安全。
注意
在 macOS 或 Windows 上,您可以使用操作系统安全存储区中的证书而不是 PEM 密钥文件。请参阅
--kmipClientCertificateSelector
。使用安全存储区时,您不需要(但也可以)指定--kmipServerCAFile
。
--eseDatabaseKeyRollover
滚动使用
AES256-GCM
密码配置的加密存储引擎数据库密钥。使用此选项启动
mongod
实例时,该实例会轮换密钥并退出。注意
Enterprise 版功能
仅在 MongoDB Enterprise 中可用。