mongod
摘要
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 版本
考虑因素
mongod
包含一个 全时诊断数据捕获 机制,以协助 MongoDB 工程师进行部署故障排除。如果此线程失败,它将终止源进程。为了避免最常见的失败,请确认运行进程的用户有权限创建 FTDCdiagnostic.data
目录。对于mongod
,该目录位于storage.dbPath
内。对于mongos
,它与systemLog.path
平行。
选项
已更改在版本6.1:
MongoDB 总是启用日志记录。因此,MongoDB 移除了
storage.journal.enabled
选项以及相应的--journal
和--nojournal
命令行选项。
已更改在版本5.2:
MongoDB 移除了
--cpu
命令行选项。
已更改在版本5.0:
MongoDB 移除了
--serviceExecutor
命令行选项以及相应的net.serviceExecutor
配置选项。
核心选项
--config <filename>, -f <filename>
指定运行时配置选项的配置文件。配置文件是运行时配置
mongod
的首选方法。这些选项等同于命令行配置选项。有关更多信息,请参阅自管理配置文件选项。确保配置文件使用ASCII编码。
mongod
实例不支持非ASCII编码的配置文件,包括UTF-8。
--configExpand <none|rest|exec>
默认值: none
启用配置文件中使用展开指令。展开指令允许您为配置文件选项设置外部源值。
--configExpand
支持以下展开指令值描述none
默认。不展开mongod
的展开指令。如果任何配置文件设置使用展开指令,则mongod
将无法启动。rest
mongod
在解析配置文件时展开__rest
展开指令。exec
mongod
在解析配置文件时展开__exec
展开指令。您可以将多个展开指令指定为逗号分隔的列表,例如:
rest, exec
。如果配置文件包含未指定给--configExpand
的展开指令,则mongod
将返回错误并终止。有关展开指令的更多信息,请参阅自管理部署的外部源配置文件值。
--verbose, -v
增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含选项来增加详细程度,例如:
-vvvvv
。注意
从版本4.2开始,MongoDB在日志消息中包含调试详细级别(1-5)。例如,如果详细程度为2,MongoDB日志记录
D2
。在之前的版本中,MongoDB日志消息仅指定D
为调试级别。
--quiet
以静默模式运行
mongod
,尝试限制输出量。此选项抑制
数据库命令的输出
复制活动
连接接受事件
连接关闭事件
--port <port>
默认:
如果
mongod
不是分片成员或配置服务器成员,则为27017如果
mongod
是shard member
,则为27018如果
mongod
是一个配置服务器成员
MongoDB 实例监听客户端连接的 TCP 端口。
--port
选项接受从0
到65535
的值范围。将端口设置为0
将使mongod
使用操作系统分配的任意端口。
--bind_ip <hostnames|ipaddresses|Unix domain socket paths>
默认值: localhost
在
mongod
应该监听客户端连接的主机名和/或 IP 地址和/或完整的 Unix 域套接字路径。您可以连接到任何接口。要绑定到多个地址,请输入以逗号分隔的值列表。示例
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地址尤为重要。
从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
仅在以--ipv6
启动时支持 IPv6。单独指定--bind_ip_all
并不会启用 IPv6 支持。有关IP绑定的更多信息,请参阅自托管部署中的IP绑定文档。
或者,您可以将
--bind_ip
选项设置为::,0.0.0.0
或星号"*"(将星号放在引号中,以避免文件名模式扩展)。
注意
--bind_ip
和--bind_ip_all
是互斥的。也就是说,您可以指定其中一个,但不能同时指定两个。
--clusterIpSourceAllowlist <string>
新功能在版本5.0.
IP地址/CIDR(无类别域间路由(Classless Inter-Domain Routing))列表,用于验证来自副本集其他成员的mongod身份验证请求,如果是分片集群的一部分,还包括
mongos
实例。如果IP地址既不在列表中,也不属于列表中的CIDR范围,则服务器不会验证mongod或mongos
。--clusterIpSourceAllowlist
对于未启用身份验证的mongod没有作用。--clusterIpSourceAllowlist
接受多个以逗号分隔的IPv4/6地址或无类别域间路由(CIDR(Classless Inter-Domain Routing))范围。mongod --clusterIpSourceAllowlist 192.0.2.0/24,127.0.0.1,::1 重要
请确保
--clusterIpSourceAllowlist
包括部署中每个副本集成员或mongos
的IP地址或CIDR范围,以确保集群组件之间通信正常。
--clusterIpSourceWhitelist <字符串>
自版本 5.0 已弃用: 使用
--clusterIpSourceAllowlist
代替。IP地址/CIDR(无类别域间路由(Classless Inter-Domain Routing))列表,用于验证来自副本集其他成员的mongod身份验证请求,如果是分片集群的一部分,还包括
mongos
实例。如果IP地址既不在列表中,也不属于列表中的CIDR范围,则服务器不会验证mongod或mongos
。--clusterIpSourceWhitelist
在未启用 身份验证 的mongod
上不起作用。--clusterIpSourceWhitelist
接受多个以逗号分隔的 IPv4/6 地址或无类别域间路由 (CIDR) 范围。mongod --clusterIpSourceWhitelist 192.0.2.0/24,127.0.0.1,::1 重要
确保
--clusterIpSourceWhitelist
包括每个副本集成员或mongos
在部署中的 IP 地址或 CIDR 范围,以确保集群组件之间的通信正常。
--ipv6
启用 IPv6 支持。默认情况下,
mongod
禁用 IPv6 支持。设置
--ipv6
不会将mongod
指向监听任何本地 IPv6 地址或接口。为了配置mongod
在 IPv6 接口上监听,您必须使用一个或多个解析为 IPv6 地址的 IPv6 地址或主机名配置
--bind_ip
,或者将
--bind_ip_all
设置为true
。
--listenBacklog <number>
默认值:目标系统
SOMAXCONN
常量在监听队列中可以存在的最大连接数。
警告
在使用此参数之前,请查阅本地系统文档以了解限制和配置要求。
重要
为了防止未定义的行为,请为此参数指定一个介于
1
和本地系统SOMAXCONN
常量之间的值。listenBacklog
参数的默认值在编译时设置为目标系统SOMAXCONN
常量。SOMAXCONN
是对 listen 系统调用的 backlog 参数文档化的最大有效值。一些系统可能将
SOMAXCONN
符号化解释,而另一些系统则数值化解释。实际应用的 listen backlog 可能与SOMAXCONN
常量或--listenBacklog
参数的任何数值解释不同,并且可能还受系统设置(如 Linux 上的net.core.somaxconn
)的限制。如果为
listenBacklog
参数传递的值超过本地系统的SOMAXCONN
常量,根据标准,这是未定义的行为。更高的值可能被静默地整除,可能被忽略,可能引起意外的资源消耗,或者有其他不利后果。对于显示连接峰值的工作负载系统,已知本地系统可以尊重比
SOMAXCONN
常量更高的 backlog 参数值,将listenBacklog
参数设置为更高的值可能通过减少被迫进入回退状态的连接数量来减少客户端观察到的操作延迟。
--maxConns <number>
mongod
能接受的并发连接数最大值。如果这个值高于操作系统配置的最大连接跟踪阈值,则此设置无效。请不要为此选项分配过低的值,否则您会在正常应用程序操作期间遇到错误。
--logpath <path>
将所有诊断日志信息发送到日志文件,而不是发送到标准输出或主机的syslog系统。MongoDB会在您指定的路径创建日志文件。
默认情况下,MongoDB会移动任何现有的日志文件,而不是覆盖它。要改为追加到日志文件,请设置
--logappend
选项。
--syslog
将所有日志输出发送到主机的 syslog 系统而不是标准输出或日志文件(
--logpath
)。在 Windows 上不支持
--syslog
选项。警告
syslog 守护进程在记录消息时生成时间戳,而不是在 MongoDB 发布消息时。这可能导致日志条目的时间戳误导,尤其是在系统负载较重时。我们建议对于生产系统使用
--logpath
选项以确保准确的时间戳。MongoDB 在其日志消息中包含 组件 以记录到
syslog
。... ACCESS [repl writer worker 5] Unsupported modification to roles collection ...
--syslogFacility <string>
默认值:用户
指定将消息记录到 syslog 时使用的设施级别。您指定的值必须得到操作系统对 syslog 的实现支持。要使用此选项,您必须启用
--syslog
选项。
--logRotate <string>
默认值:rename
确定在旋转服务器日志和/或审计日志时,
logRotate
命令的行为。指定rename
或reopen
rename
重命名日志文件。reopen
关闭并重新打开日志文件,遵循典型的Linux/Unix日志旋转行为。在使用Linux/Unix日志旋转工具时使用reopen
以避免日志丢失。如果指定
reopen
,则还必须使用--logappend
--timeStampFormat <string>
默认值: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 文件管理通常是您发行版的 init 系统的责任:通常是位于
/etc/init.d
目录中的服务文件,或使用systemctl
注册的 systemd 单元文件。如果您不使用这些 init 系统,则仅使用--pidfilepath
选项。有关更多信息,请参阅您操作系统的相应 安装指南。注意
macOS
在 macOS 上,PID 文件管理通常由
brew
处理。如果您不使用 macOS 系统上的brew
,则仅使用--pidfilepath
选项。有关更多信息,请参阅您操作系统的相应安装指南。
--keyFile <文件>
指定存储MongoDB实例之间在分片集群或副本集中相互认证的共享密钥的密钥文件的路径。使用
--keyFile
将隐式启用--auth
。有关更多信息,请参阅自管理内部/成员身份认证。内部成员身份认证的密钥文件使用YAML格式,允许在密钥文件中包含多个密钥。YAML格式接受以下格式:
单个密钥字符串(与早期版本相同)
密钥字符串的序列
YAML格式与使用文本文件格式的现有单密钥密钥文件兼容。
--setParameter <选项>
指定MongoDB服务器参数中描述的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
为false
--nounixsocket
已设置net.bindIp
未设置net.bindIp
未指定localhost
或其相关IP地址
--filePermissions <路径>
默认值:
0700
设置UNIX域套接字文件的权限。
--filePermissions
仅适用于基于Unix的系统。
--fork
启用守护进程模式,在后台运行
mongod
进程。Windows上不支持--fork
选项。默认情况下,
mongod
不以守护进程方式运行。您可以通过使用--fork
或控制守护进程化的进程(如upstart
或systemd
)来以守护进程方式运行mongod
。要使用
--fork
,请使用以下方式之一配置mongod
的日志输出:
--auth
启用授权以控制用户对数据库资源和操作的访问。启用授权后,MongoDB要求所有客户端先进行身份验证,以确定客户端的访问权限。
要配置用户,请使用
mongosh
客户端。如果没有用户存在,本地接口将访问数据库,直到您创建第一个用户。有关更多信息,请参阅安全。
--transitionToAuth
允许
mongod
接受并创建与部署中其他mongod
和mongos
实例的认证和非认证连接。用于执行副本集或分片集群从无认证配置到 内部认证 的滚动过渡。需要指定一个 内部认证 机制,例如--keyFile
。例如,如果使用 密钥文件 进行 内部认证,则
mongod
使用匹配的密钥文件与部署中的任何mongod
或mongos
创建认证连接。如果安全机制不匹配,则mongod
将使用非认证连接。使用
--transitionToAuth
运行的mongod
不强制执行 用户访问控制。用户可以连接到您的部署而无需进行任何访问控制检查,并执行读取、写入和管理操作。注意
运行 内部认证 且 没有 使用
--transitionToAuth
的mongod
要求客户端使用 用户访问控制 连接。在重启mongod
而不带--transitionToAuth
之前,更新客户端以使用适当的 用户 连接到mongod
。
--notablescan
禁止需要进行集合扫描的操作。有关更多信息,请参阅
notablescan
。
--shutdown
--shutdown
选项可以干净且安全地终止mongod
进程。当使用此选项调用mongod
时,必须通过直接设置或通过配置文件和--config
选项设置--dbpath
选项。选项
--shutdown
仅在 Linux 系统上可用。有关其他关闭方式,请参阅停止
mongod
进程。
--redactClientLogData
仅适用于 MongoDB 企业版。
在带有
--redactClientLogData
的mongod
运行时,会抹去与特定日志事件伴随的消息,然后在记录之前。这可以防止mongod
将存储在数据库中的可能敏感数据写入诊断日志。元数据(如错误或操作代码、行号和源文件名)在日志中仍然可见。请将
--redactClientLogData
与 静态加密 和 TLS/SSL(传输加密) 结合使用,以帮助符合监管要求。例如,MongoDB 部署可能会在其中一个或多个集合中存储个人身份信息(PII)。
mongod
记录事件,如与 CRUD 操作、分片元数据等相关的事件。可能的情况是,mongod
可能会将 PII 作为这些日志操作的一部分暴露出来。带有--redactClientLogData
的mongod
在输出到日志之前会抹去伴随这些事件的任何消息,从而有效地抹去 PII。带有
--redactClientLogData
的mongod
的诊断可能由于与日志事件相关的数据的缺失而更加困难。请参阅进程日志手册页面,了解--redactClientLogData
对日志输出的影响。在运行的
mongod
上,使用带有setParameter
命令和redactClientLogData
参数来配置此设置。
--networkMessageCompressors <字符串>
默认值: snappy,zstd,zlib
指定此
mongod
实例与副本集或分片集群中的其他成员之间通信所使用的默认压缩器(如果该实例是副本集或分片集群的一部分)
支持
OP_COMPRESSED
消息格式的驱动程序
MongoDB 支持以下压缩器
注意
both
mongod
和mongos
实例默认使用snappy,zstd,zlib
压缩器,顺序依次为这些。要禁用网络压缩,将值设置为
disabled
。重要
当双方都启用网络压缩时,消息会被压缩。否则,双方之间的消息不会被压缩。
如果您指定了多个压缩器,则压缩器的顺序以及通信发起者也很重要。例如,如果
mongosh
指定了以下网络压缩器zlib,snappy
,而mongod
指定snappy,zlib
,则mongosh
和mongod
之间的消息使用zlib
。如果各方不共享至少一个共同的压缩器,则各方之间的消息不会被压缩。例如,如果
mongosh
指定网络压缩器zlib
,而mongod
指定snappy
,则mongosh
和mongod
之间的消息不会被压缩。
--timeZoneInfo <路径>
加载时区数据库的完整路径。如果未提供此选项,则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 的旧版本中产生不准确的时区转换。为了在 MongoDB 5.0 之前的版本中明确链接到时区数据库,请下载 时区数据库,并使用
timeZoneInfo
参数。
--outputConfig
将
mongod
实例的配置选项以 YAML 格式输出到stdout
并退出mongod
实例。对于使用 自管理部署的外部配置文件值 的配置选项,--outputConfig
返回这些选项的解析值。警告
这可能包括之前通过外部来源混淆的任何配置密码或机密信息。
有关使用示例,请参阅
LDAP身份验证或授权选项
注意
从MongoDB 8.0开始,LDAP身份验证和授权已弃用。LDAP在MongoDB 8.0的生命周期内将继续可用且不受影响。在未来的一个主要版本中,LDAP将被移除。
有关详细信息,请参阅LDAP弃用。
--ldapServers <host1>:<port>,<host2>:<port>,...,<hostN>:<port>
仅适用于 MongoDB 企业版。
mongod
认证用户或确定用户在特定数据库上可执行的操作的LDAP服务器。如果指定的LDAP服务器有任何副本实例,您可以在逗号分隔的列表中指定每个副本服务器的主机名和端口号。如果您的LDAP基础设施将LDAP目录分布在多个LDAP服务器上,请指定一个LDAP服务器或其任何副本实例到
--ldapServers
。MongoDB支持以下LDAP引用,如RFC 4511 4.1.10 中定义。不要使用--ldapServers
来列出您基础设施中的每个LDAP服务器。此设置可以在运行的
mongod
上使用setParameter
进行配置。如果未设置,
mongod
将无法使用 LDAP身份验证或授权。
--ldapValidateLDAPServerConfig <布尔值>
仅适用于MongoDB企业版
一个标志,用于确定
mongod
实例是否在启动过程中检查LDAP服务器
的可用性。如果
true
,则mongod
实例执行可用性检查,并且只有在LDAP服务器可用的情况下才会继续启动。如果
false
,则mongod
实例跳过可用性检查;即实例即使LDAP服务器不可用也会启动。
--ldapQueryUser <字符串>
仅适用于 MongoDB 企业版。
当连接到或对LDAP服务器执行查询时,
mongod
绑定的身份。如果以下任何一项为真,则需要
必须使用
--ldapQueryUser
与--ldapQueryPassword
。如果未设置,
mongod
不会尝试绑定到LDAP服务器。此设置可以在运行的
mongod
上使用setParameter
进行配置。注意
Windows MongoDB部署可以使用
--ldapBindWithOSDefaults
而不是--ldapQueryUser
和--ldapQueryPassword
。不能同时指定--ldapQueryUser
和--ldapBindWithOSDefaults
。
仅适用于 MongoDB 企业版。
使用 --ldapQueryUser
绑定到LDAP服务器时使用的密码。必须使用 --ldapQueryPassword
与 --ldapQueryUser
。
如果没有设置,mongod
不会尝试绑定到LDAP服务器。
您可以在运行的 mongod
上使用 setParameter
命令来配置此设置。
ldapQueryPassword
setParameter
命令接受一个字符串或字符串数组。如果将 ldapQueryPassword
设置为数组,MongoDB 将按顺序尝试每个密码,直到成功。使用密码数组可以无停机地滚动 LDAP 帐户密码。
注意
Windows MongoDB 部署可以使用 --ldapBindWithOSDefaults
而不是使用 --ldapQueryUser
和 --ldapQueryPassword
。您不能同时指定 --ldapQueryPassword
和 --ldapBindWithOSDefaults
。
--ldapBindWithOSDefaults <bool>
默认值:false
仅在 Windows 平台的 MongoDB Enterprise 中可用。
允许
mongod
在连接到 LDAP 服务器时使用您的 Windows 登录凭据进行身份验证或绑定。仅在以下情况下需要
使用
--ldapBindWithOSDefaults
来替换--ldapQueryUser
和--ldapQueryPassword
。
--ldapBindMethod <string>
默认值:simple
仅适用于 MongoDB 企业版。
方法
mongod
用于对 LDAP 服务器进行身份验证。与--ldapQueryUser
和--ldapQueryPassword
一起使用,以连接到 LDAP 服务器。--ldapBindMethod
支持以下值simple
-mongod
使用简单身份验证。sasl
-mongod
使用 SASL 协议进行身份验证
如果您指定了
sasl
,您可以使用--ldapBindSaslMechanisms
配置可用的 SASL 机制。mongod
默认使用DIGEST-MD5
机制。
--ldapBindSaslMechanisms <string>
默认值: DIGEST-MD5
仅适用于 MongoDB 企业版。
一个逗号分隔的 SASL 机制列表,
mongod
在身份验证 LDAP 服务器时可以使用。mongod
和 LDAP 服务器必须至少同意一种机制。mongod
在运行时动态加载主机机器上安装的任何 SASL 机制库。在
mongod
主机和远程 LDAP 服务器主机上安装和配置所选 SASL 机制(们)的适当库。您的操作系统可能默认包含某些 SASL 库。请参阅每个 SASL 机制的文档以获取安装和配置的指导。如果您使用的是
GSSAPI
SASL 机制与 自托管部署上的 Kerberos 身份验证 一起使用,请验证mongod
主机机器上的以下内容Linux
KRB5_CLIENT_KTNAME
环境变量解析为主机机器的客户端 Linux Keytab 文件 的名称。有关 Kerberos 环境变量的更多信息,请参阅 Kerberos 文档。客户端 keytab 包含一个用于在连接到 LDAP 服务器和执行 LDAP 查询时使用的 用户主体。
Windows
- 如果连接到 Active Directory 服务器,则在用户登录系统时,Windows Kerberos 配置会自动生成一个 票证授予票证。将
--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
仅适用于 MongoDB 企业版。
默认情况下,
mongod
会创建一个TLS/SSL加密连接到LDAP服务器。对于Linux部署,您必须在
/etc/openldap/ldap.conf
文件中配置适当的TLS选项。操作系统包管理器在通过libldap
依赖项安装MongoDB企业版时创建此文件。请参阅ldap.conf OpenLDAP文档以获取更完整的说明。对于Windows部署,您必须将LDAP服务器CA证书添加到Windows证书管理工具中。该工具的确切名称和功能可能因操作系统版本而异。请参阅您版本的Windows文档,了解有关证书管理的更多信息。
将
--ldapTransportSecurity
设置为none
以禁用mongod
与LDAP服务器之间的TLS/SSL。警告
将
--ldapTransportSecurity
设置为none
会将明文信息和可能的凭据在mongod
和 LDAP 服务器之间传输。
--ldapTimeoutMS <int>
默认: 10000
仅适用于 MongoDB 企业版。
指定
mongod
等待 LDAP 服务器响应请求的时间(以毫秒为单位)。增加
--ldapTimeoutMS
的值可以防止 MongoDB 服务器和 LDAP 服务器之间的连接失败,如果失败的原因是连接超时。减少--ldapTimeoutMS
的值可以减少 MongoDB 等待 LDAP 服务器响应的时间。此设置可以在运行的
mongod
上使用setParameter
进行配置。
--ldapUserToDNMapping <string>
仅适用于 MongoDB 企业版。
将提供给
mongod
用于身份验证的用户名映射到 LDAP 的区分名称 (DN)。在以下情况下,您可能需要使用--ldapUserToDNMapping
将用户名转换为 LDAP DN:使用简单的LDAP绑定进行LDAP身份验证,用户使用非完整的LDAP DNs的用户名来认证MongoDB。
使用需要DN的
LDAP授权查询模板
。将使用不同身份验证机制(如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
正则表达式匹配的认证名称插入到LDAP查询URI编码中,符合RFC4515和RFC4516。每个花括号包围的数字值将被从认证用户名中通过match
表达式提取的相应的正则表达式捕获组替换。mongod
执行查询以针对LDAP服务器检索认证用户的LDAP DN。mongod
需要恰好一个返回结果才能成功转换,否则mongod
将跳过此转换。"ou=engineering,dc=example, dc=com??one?(user={0})"
对于数组中的每个文档,您必须使用
substitution
或ldapQuery
中的一种。您不能在同一个文档中指定两者。在进行身份验证或授权时,
mongod
会按照给定顺序遍历数组中的每个文档,将认证用户名与match
过滤器进行匹配。如果找到匹配项,mongod
将应用转换并使用输出进行用户认证。mongod
不会检查数组中的剩余文档。如果给定的文档与提供的认证名称不匹配,
mongod
将继续遍历文档列表以查找更多匹配项。如果在任何文档中都没有找到匹配项,或者文档描述的转换失败,mongod
将返回错误。如果由于网络或与LDAP服务器的身份验证失败而无法评估转换,
mongod
也会返回错误。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服务器进行用户认证或授权时不会对用户名进行任何转换。此设置可以通过使用数据库命令
setParameter
在运行中的mongod
上进行配置。
--ldapAuthzQueryTemplate <字符串>
仅适用于 MongoDB 企业版。
一个相对的LDAP查询URL,格式遵循RFC4515和RFC4516规范,该规范用于执行由
mongod
执行的查询以获取认证用户所属的LDAP组。查询相对于在--ldapServers
.中指定的主机或主机。在URL中,您可以使用以下替换令牌
构建查询URL时,确保LDAP参数的顺序遵循RFC4516
[ dn [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ] 如果您的查询包含一个属性,
mongod
假设查询检索的是该实体所属的 DNs。如果您的查询不包含属性,
mongod
假设查询检索的是用户所属的所有实体。对于查询返回的每个 LDAP DN,
mongod
将授权用户分配到admin
数据库的相应角色。如果admin
数据库中的角色与 DN 完全匹配,mongod
将授予该角色分配的角色和权限。有关创建角色的更多信息,请参阅db.createRole()
方法。示例
此 LDAP 查询返回 LDAP 用户对象
memberOf
属性中列出的任何组。"{USER}?memberOf?base" 您的 LDAP 配置可能不包含
memberOf
属性作为用户模式的一部分,可能具有不同的属性来报告组成员身份,或者可能不通过属性跟踪组成员身份。请根据您独特的 LDAP 配置配置您的查询。如果未设置,
mongod
无法使用 LDAP 授权用户。此设置可以通过使用数据库命令
setParameter
在运行中的mongod
上进行配置。
存储选项
--storageEngine string
默认值:
wiredTiger
指定
mongod
数据库的存储引擎。可用值包括值描述wiredTiger
inMemory
仅适用于 MongoDB 企业版。
如果您尝试启动一个包含由除由
--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 <值>
默认: 60
控制MongoDB将数据刷新到数据文件之前可以过去多长时间。
不要在生产系统上设置此值。在几乎所有情况下,您都应该使用默认设置。
mongod
进程会非常快地将数据写入日志并懒写入数据文件。--syncdelay
对日志记录没有影响,但如果将--syncdelay
设置为0
,则日志最终会消耗所有可用磁盘空间。为了提供持久数据,WiredTiger使用检查点。有关更多信息,请参阅日志记录和WiredTiger存储引擎。
--upgrade
在需要时,将
--dbpath
指定的文件的磁盘数据格式升级到最新版本。此选项仅影响旧格式数据文件的
mongod
操作。在大多数情况下,您不应该设置此值,这样您可以更好地控制升级过程。有关升级过程的信息,请参阅MongoDB发布说明。
--repair
在 mongod 实例的所有数据库上运行修复例程。
从 MongoDB 5.0 开始
修复操作验证集合以查找任何不一致性,并在可能的情况下修复它们,从而避免重建索引。
如果集合的数据文件已恢复或集合存在验证步骤无法修复的不一致性,则将重新构建所有索引。
提示
如果启用了 日志记录,则几乎不需要运行修复,因为服务器可以使用日志文件自动将数据文件恢复到干净状态。但是,在某些需要从磁盘级别数据损坏中恢复的情况下,您可能需要运行修复。
警告
只有在没有其他选择时才使用
mongod --repair
。此操作在修复过程中会删除并保存任何损坏的数据。避免对副本集成员运行
--repair
要修复 副本集 成员,如果您有数据的完整副本(例如,最近的备份或 副本集 的完整成员),请从该完整副本恢复。有关更多信息,请参阅同步自管理的副本集成员。
如果您选择对副本集成员运行
mongod --repair
,并且操作修改了数据或元数据,则必须执行完全同步,以便成员重新加入副本集。
如果修复因任何原因失败,您必须使用
--repair
选项重新启动实例。
WiredTiger选项
--wiredTigerCacheSizeGB <浮点数>
定义WiredTiger用于所有数据的内部缓存的最大大小。索引构建消耗的内存(见
maxIndexBuildMemoryUsageMegabytes
)与WiredTiger缓存内存是分开的。值范围从
0.25
GB 到10000
GB。默认的WiredTiger内部缓存大小是以下两者中的较大者:
(RAM - 1 GB)的50%,或
256 MB。
例如,在一个总共有4GB RAM的系统上,WiredTiger缓存使用1.5GB RAM(
0.5 * (4 GB - 1 GB) = 1.5 GB
)。相反,在一个总共有1.25GB RAM的系统上,WiredTiger将256 MB分配给WiredTiger缓存,因为这是总RAM减去1GB后的一半以上的值(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等)没有访问系统所有可用RAM的容器中运行mongod
,您必须将--wiredTigerCacheSizeGB
设置为小于容器中可用RAM的值。确切的金额取决于容器中运行的其他进程。见memLimitMB
.
--wiredTigerDirectoryForIndexes
当你使用
mongod
与--wiredTigerDirectoryForIndexes
启动时,mongod
将在数据目录(即--dbpath
)下存储索引和集合到单独的子目录中。具体来说,mongod
将索引存储在名为index
的子目录中,并将集合数据存储在名为collection
的子目录中。通过使用符号链接,您可以指定索引的不同位置。具体来说,当
mongod
实例没有运行时,将index
子目录移动到目标位置,并在数据目录下创建一个名为index
的符号链接到新目标。
--wiredTigerCollectionBlockCompressor <compressor>
默认值: snappy
指定集合数据的默认压缩方式。在创建集合时,您可以根据每个集合覆盖此设置。
可用的压缩器有
--wiredTigerCollectionBlockCompressor
影响所有创建的集合。如果您在现有的 MongoDB 部署中更改--wiredTigerCollectionBlockCompressor
的值,所有新集合将使用指定的压缩器。现有集合将继续使用创建时指定的压缩器或当时的默认压缩器。
--wiredTigerIndexPrefixCompression <boolean>
默认值: true
启用或禁用索引数据的 前缀压缩。
指定
true
为--wiredTigerIndexPrefixCompression
以启用索引数据的前缀压缩,或指定false
以禁用索引数据的前缀压缩。--wiredTigerIndexPrefixCompression
设置影响所有创建的索引。如果您在现有的 MongoDB 部署中更改--wiredTigerIndexPrefixCompression
的值,所有新索引将使用前缀压缩。现有索引不受影响。
复制选项
--replSet <setname>
配置复制。将副本集名称作为参数指定给此集合。副本集内的所有主机都必须具有相同的集合名称。
如果您的应用程序连接到多个副本集,则每个集合都必须具有不同的名称。一些驱动程序根据副本集名称对副本集连接进行分组。
--oplogSize <value>
oplog 的最大大小(以兆字节为单位)。
oplogSize
设置配置了 oplog 的未压缩大小,而不是磁盘上的大小。注意
为了避免删除
majority commit point
,oplog 可以增长超过其配置的大小限制。默认情况下,
mongod
进程根据可用空间的最大量创建 oplog。对于 64 位系统,oplog 通常为可用磁盘空间的 5%。mongod
第一次创建 oplog 后,更改--oplogSize
选项不会影响 oplog 的大小。要在启动mongod
后更改最小 oplog 保留期,请使用replSetResizeOplog
。使用replSetResizeOplog
可以动态调整 oplog 的大小,而无需重新启动mongod
进程。要使使用replSetResizeOplog
所做的更改在重启时持久化,请更新--oplogSize
的值。有关更多信息,请参阅Oplog Size。
--oplogMinRetentionHours <value>
指定保留操作日志条目所需的最小小时数,其中小数表示小时的小数部分。例如,
1.5
表示一小时三十分钟。该值必须大于或等于
0
。值为0
表示mongod
应截断操作日志,从最旧的条目开始,以保持配置的最大操作日志大小。默认值为
0
。使用
--oplogMinRetentionHours
启动的mongod
仅在以下情况下删除操作日志条目操作日志达到配置的最大操作日志大小
操作日志条目根据主机系统时钟,比配置的小时数更早
当配置最小操作日志保留期时,
mongod
具有以下行为操作日志可以无限制地增长,以保留配置的小时数的操作日志条目。这可能导致由于高写入量和大的保留期而减少或耗尽系统磁盘空间。
如果操作日志超过其最大大小,即使操作日志返回到其最大大小或配置为更小的最大大小,
mongod
也可能继续保留该磁盘空间。有关如何减少操作日志大小而不立即返回磁盘空间的信息,请参阅Reducing Oplog Size Does Not Immediately Return Disk Space.在执行操作日志条目保留时,
mongod
将系统墙钟与操作日志条目创建墙钟时间进行比较。集群组件之间的时钟漂移可能导致意外的操作日志保留行为。有关集群成员之间时钟同步的更多信息,请参阅Clock Synchronization。
在启动
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 服务器时,还必须指定--replSet
。不再支持使用已弃用的镜像
mongod
实例作为配置服务器(SCCC)。副本集配置服务器(CSRS)必须运行 WiredTiger 存储引擎。
--configsvr
选项创建一个本地 操作日志。不要将
--configsvr
选项与--shardsvr
一起使用。配置服务器不能是分片服务器。请勿与
--configsvr
参数一起使用skipShardingConfigurationChecks
。也就是说,如果您暂时以独立模式启动mongod
进行维护操作,请包括参数skipShardingConfigurationChecks
并排除--configsvr
。维护完成后,请移除skipShardingConfigurationChecks
参数,并使用--configsvr
重启。
--shardsvr
启动分片服务器时必须使用。
将此
mongod
实例配置为分片集群中的分片。这些实例的默认端口为27018
。重要
使用
--shardsvr
启动MongoDB服务器时,还必须指定--replSet
。请勿与
--shardsvr
参数一起使用skipShardingConfigurationChecks
。也就是说,如果您暂时以独立模式启动mongod
进行维护操作,请包括参数skipShardingConfigurationChecks
并排除--shardsvr
。维护完成后,请移除skipShardingConfigurationChecks
参数,并使用--shardsvr
重启。
TLS 选项
--tlsMode <mode>
启用所有网络连接使用的 TLS。
--tlsMode
选项的参数可以是以下之一值描述禁用
服务器不使用 TLS。允许 TLS
服务器之间的连接不使用 TLS。对于传入连接,服务器接受 TLS 和非 TLS。偏好 TLS
服务器之间的连接使用 TLS。对于传入连接,服务器接受 TLS 和非 TLS。要求 TLS
服务器使用并仅接受 TLS 加密的连接。如果未指定
--tlsCAFile
或tls.CAFile
,并且您未使用 x.509 认证,则必须将tlsUseSystemCA
参数设置为true
。这使 MongoDB 在连接到启用了 TLS 的服务器时使用系统范围内的 CA 证书存储。如果使用 x.509 认证,则必须指定
--tlsCAFile
或tls.CAFile
,除非使用--tlsCertificateSelector
。有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsCertificateKeyFile <filename>
指定包含TLS证书和私钥的.pem文件。
在macOS或Windows上,您可以使用
--tlsCertificateSelector
选项,从操作系统的安全证书存储中指定证书,而不是PEM密钥文件。--tlsCertificateKeyFile
和--tlsCertificateSelector
选项互斥。您只能指定其中一个。在Linux/BSD上,当启用TLS/SSL时,必须指定
--tlsCertificateKeyFile
。在Windows或macOS上,当启用TLS/SSL时,必须指定
--tlsCertificateKeyFile
或--tlsCertificateSelector
。重要
仅限Windows,MongoDB不支持加密的PEM文件。如果mongod遇到加密的PEM文件,将无法启动。要在Windows上安全存储和访问用于TLS的证书,请使用
--tlsCertificateSelector
。
有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 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 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 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 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 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
。mongod
或mongos
如果连接的 x.509 证书在30
天内到期,则会记录一个警告。有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。重要
仅限 Windows,MongoDB 不支持加密的 PEM 文件。如果
mongod
遇到加密的 PEM 文件,则无法启动。要在 Windows 上安全地存储和访问用于成员身份验证的证书,请使用--tlsClusterCertificateSelector
。
--tlsCertificateSelector <parameter>=<value>
注意
在 Windows 和 macOS 上可用,作为
--tlsCertificateKeyFile
的替代方案。指定一个属性以从操作系统的证书存储中选择匹配的证书用于 TLS。
选项
--tlsCertificateKeyFile
和--tlsCertificateSelector
是互斥的。您只能指定其中一个。--tlsCertificateSelector
接受格式为<property>=<value>
的参数,其中属性可以是以下之一属性值类型描述subject
ASCII 字符串证书上的主题名称或常见名称指纹
十六进制字符串一系列字节,以十六进制形式表示,用于通过其SHA-1摘要识别公钥。
指纹
有时也被称为指纹
。当使用系统SSL证书存储时,OCSP(在线证书状态协议)用于验证证书的吊销状态。
mongod
在操作系统的安全证书存储中搜索用于验证指定TLS证书完整证书链的CA证书。具体来说,安全证书存储必须包含根CA证书以及构建到TLS证书的完整证书链所需的任何中间CA证书。请不要使用--tlsCAFile
或--tlsClusterCAFile
来指定根和中间CA证书例如,如果TLS/SSL证书由单个根CA证书签名,则安全证书存储必须包含该根CA证书。如果TLS/SSL证书由中间CA证书签名,则安全证书存储必须包含中间CA证书和根CA证书。
注意
当使用
net.tls.certificateSelector
或--tlsCertificateSelector
设置为指纹
时,您不能使用rotateCertificates
命令或db.rotateCertificates()
shell方法
--tlsClusterCertificateSelector <参数>=<值>
注意
Windows和macOS上提供,作为
--tlsClusterFile
的替代方案。指定一个证书属性,以从操作系统的证书存储中选择匹配的证书,用于内部x.509成员身份认证。
--tlsClusterFile
和--tlsClusterCertificateSelector
选项是互斥的。您只能指定一个。--tlsClusterCertificateSelector
接受格式为<属性>=<值>
的参数,其中属性可以是以下之一属性值类型描述subject
ASCII 字符串证书上的主题名称或常见名称指纹
十六进制字符串一系列字节,以十六进制形式表示,用于通过其SHA-1摘要识别公钥。
指纹
有时也被称为指纹
。mongod
在操作系统的安全证书存储中搜索用于验证指定集群证书完整证书链的CA证书。具体来说,安全证书存储必须包含根CA证书以及构建到集群证书的完整证书链所需的任何中间CA证书。**不要**使用--tlsCAFile
或--tlsClusterCAFile
来指定根和中间CA证书。例如,如果集群证书由单个根CA证书签名,则安全证书存储必须包含该根CA证书。如果集群证书由中间CA证书签名,则安全证书存储必须包含中间CA证书**和**根CA证书。
--tlsClusterPassword <值>
指定用于解密与
--tlsClusterFile
指定的x.509证书-密钥文件的密码。只有当证书-密钥文件被加密时才使用--tlsClusterPassword
选项。在任何情况下,mongod
都会将密码从所有日志和报告输出中删除。在Linux/BSD上,如果x.509文件中的私钥被加密且未指定
--tlsClusterPassword
选项,MongoDB会提示输入密码短语。请参阅 TLS/SSL 证书密码短语。在macOS上,如果x.509文件中的私钥被加密,则必须明确指定
--tlsClusterPassword
选项。或者,您可以使用安全系统存储中的证书(请参阅--tlsClusterCertificateSelector
)而不是集群PEM文件,或者使用未加密的PEM文件。在Windows上,MongoDB不支持加密证书。如果
mongod
遇到加密的PEM文件,将失败。请使用--tlsClusterCertificateSelector
。
有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsCAFile <filename>
指定包含证书颁发机构根证书链的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。重要
当使用 TLS/SSL 启用的
mongod
实例时,必须指定--tlsCAFile
标志、TLS/SSL 配置 选项或net.tls.CAFile
配置选项的值。--tlsCAFile
、tls.CAFile
和tlsUseSystemCA
互斥。- 仅限 Windows/macOS
- 如果使用
--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
,请不要使用--tlsCAFile
来指定根和中间 CA 证书。将所有用于验证--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
证书完整信任链所需的 CA 证书存储在安全的证书存储中。
有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsClusterCAFile <filename>
指定包含用于验证客户端建立连接时提交的证书的证书颁发机构(root CA)的根证书链的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。使用--tlsClusterCAFile
需要设置--tlsCAFile
。如果
--tlsClusterCAFile
没有指定用于验证客户端建立连接的证书的.pem
文件,则集群将使用--tlsCAFile
选项中指定的.pem
文件。--tlsClusterCAFile
允许您使用不同的证书颁发机构来验证 TLS 握手的客户端到服务器和服务器到客户端部分。- 仅限 Windows/macOS
- 如果使用
--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
,请勿使用--tlsClusterCAFile
来指定根和中间 CA 证书。将所有用于验证--tlsCertificateSelector
和/或--tlsClusterCertificateSelector
证书完整信任链所需的 CA 证书存储在安全的证书存储中。
有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsCRLFile <filename>
指定包含证书吊销列表的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。注意
在 macOS 上无法指定 CRL 文件。相反,您可以使用系统 SSL 证书存储,该存储使用 OCSP(在线证书状态协议)来验证证书的吊销状态。有关使用系统 SSL 证书存储的信息,请参阅
--tlsCertificateSelector
。要检查证书吊销,MongoDB 默认启用 OCSP(在线证书状态协议)的使用,作为指定 CRL 文件或使用系统 SSL 证书存储的替代方案。
有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsAllowInvalidCertificates
跳过对集群中其他服务器的 TLS 证书的验证检查,并允许使用无效证书进行连接。
注意
当使用 x.509 认证并指定
--tlsAllowInvalidCertificates
或tls.allowInvalidCertificates: true
时,无效证书仅足以建立 TLS 连接,但对于认证来说是 不足的。使用
--tlsAllowInvalidCertificates
设置时,MongoDB 会记录关于使用无效证书的警告。有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsAllowInvalidHostnames
在连接到副本集或分片集群的其他成员以进行进程间身份验证时,禁用 TLS 证书中主机名的验证。这允许
mongod
连接到其他成员,即使它们的证书中的主机名与它们的配置主机名不匹配。有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsAllowConnectionsWithoutCertificates
默认情况下,服务器会绕过客户端证书验证,除非服务器配置为使用CA文件。如果提供了CA文件,则适用以下规则
对于提供证书的客户端,
mongod
使用由--tlsCAFile
指定的根证书链进行证书验证,并拒绝无效证书的客户端。
如果您有一个包含未向
mongod
提供或无法提供证书的客户端的混合部署,请使用--tlsAllowConnectionsWithoutCertificates
选项。有关 TLS 和 MongoDB 的更多信息,请参阅 配置
mongod
和mongos
以使用 TLS/SSL 和 客户端的 TLS/SSL 配置。
--tlsDisabledProtocols <protocol(s)>
防止运行TLS的MongoDB服务器接受使用特定协议或协议的传入连接。要指定多个协议,请使用逗号分隔的协议列表。
--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
选项。注意
兼容FIPS的TLS/SSL仅在MongoDB Enterprise中可用。有关更多信息,请参阅为FIPS配置MongoDB。
分析器选项
--profile <level>
默认: 0
配置数据库分析器的级别。以下分析器级别可用:
0
- 分析器已关闭,不收集任何数据。这是默认的分析器级别。
1
分析器收集超过
slowms
阈值或匹配指定 过滤器 的操作数据。当设置过滤器时
不使用
slowms
和sampleRate
选项进行分析。分析器仅捕获匹配 过滤器 的操作。
2
- 分析器收集所有操作的数据。
警告
分析可能会降低性能并在系统日志中暴露未加密的查询数据。在生产部署上配置和启用分析器之前,请仔细考虑任何性能和安全影响。
有关性能降低的更多信息,请参阅 分析器开销。
--slowms <integer>
默认: 100
慢操作时间阈值,以毫秒为单位。运行时间超过此阈值的操作被认为是 慢操作。
基于
workingMillis
记录慢操作,这是 MongoDB 在该操作上花费的时间量。这意味着等待锁和流量控制等因素不影响操作是否超过慢操作阈值。当
logLevel
设置为0
时,MongoDB 以slowOpSampleRate
确定的速率将 慢操作 记录到诊断日志中。在高
logLevel
设置下,所有操作都显示在诊断日志中,除非以下例外:次级仅记录慢操作日志条目;提高logLevel
并不记录所有操作日志条目。对于
mongod
实例,--slowms
影响诊断日志,如果启用,则影响分析器。
--slowOpSampleRate <double>
默认: 1.0
应该进行性能分析或记录的 慢 操作的比例。
--slowOpSampleRate
接受 0 和 1 之间的值,包括 0 和 1。--slowOpSampleRate
不会影响副本集次要成员的慢操作日志条目记录。次要成员会记录所有耗时超过慢操作阈值的操作日志条目,无论是否设置了--slowOpSampleRate
。对于
mongod
实例,--slowOpSampleRate
影响诊断日志,如果启用,则影响性能分析器。
审计选项
--auditCompressionMode
新功能在版本5.3.
指定审计日志加密的压缩模式。您还必须通过使用以下任一选项来启用审计日志加密:
--auditEncryptionKeyUID
或--auditLocalKeyFile
。--auditCompressionMode
可以设置为以下值之一值描述zstd
使用 zstd 算法压缩审计日志。none
(默认)不压缩审计日志。注意
仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。
--auditDestination
启用 审计 并指定
mongod
将所有审计事件发送到何处。--auditDestination
可以有以下值之一值描述syslog
以 JSON 格式将审计事件输出到 syslog。在 Windows 上不可用。审计消息具有
info
的 syslog 严重级别和user
的设施级别。syslog 消息限制可能导致审计消息被截断。审计系统不会检测截断,也不会在截断发生时出错。
console
以 JSON 格式将审计事件输出到stdout
。file
以指定在--auditPath
的文件中,并按照--auditFormat
指定的格式输出审计事件。注意
仅适用于 MongoDB Enterprise 和 MongoDB Atlas。
--auditEncryptionKeyUID
新功能在版本6.0.
指定用于审计日志加密的密钥管理互操作性协议(KMIP)密钥的唯一标识符。
不能同时使用
--auditEncryptionKeyUID
和--auditLocalKeyFile
。注意
仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。
--auditFormat
当
--auditDestination
设置为file
时,指定审计输出文件的格式。选项--auditFormat
可以有以下值之一值描述JSON
以JSON格式将审计事件输出到由--auditPath
指定的文件。BSON
以BSON二进制格式将审计事件输出到由--auditPath
指定的文件。将审计事件以JSON格式输出到文件会降低服务器性能,比以BSON格式输出到文件降低更多。
注意
仅适用于 MongoDB Enterprise 和 MongoDB Atlas。
--auditLocalKeyFile
新功能在版本5.3.
指定用于审计日志加密的本地密钥文件的路径和文件名。
注意
仅用于测试时使用
--auditLocalKeyFile
,因为密钥未得到安全保护。为了保护密钥,请使用--auditEncryptionKeyUID
和外部密钥管理系统互操作性协议(KMIP)服务器。不能同时使用
--auditLocalKeyFile
和--auditEncryptionKeyUID
。注意
仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。
--auditPath
如果
--auditDestination
的值为file
,则指定审计输出的文件。选项--auditPath
可以接受完整路径名或相对路径名。注意
仅适用于 MongoDB Enterprise 和 MongoDB Atlas。
--auditFilter
指定用于限制操作类型的审计系统记录的过滤器。该选项接受以下形式的查询文档的字符串表示:
{ <field1>: <expression1>, ... } <field>
可以是审计消息中的任何字段,包括param文档中返回的字段。<expression>
是一个查询条件表达式。要指定审计过滤器,请将过滤器文档放在单引号内,以将文档作为字符串传递。
要在配置文件中指定审计过滤器,必须使用配置文件的YAML格式。
注意
仅适用于 MongoDB Enterprise 和 MongoDB Atlas。
--auditSchema
默认值:
mongo
新功能在版本8.0.
指定用于审计日志的格式。对于
--auditSchema
,您可以指定以下值之一:值描述mongo
日志以MongoDB设计的格式编写。
例如,有关日志消息的详细信息,请参阅Mongo Schema Audit Messages。
OCSF
日志以OCSF格式编写。此选项提供与日志处理器兼容的标准格式日志。
例如,有关日志消息的详细信息,请参阅OCSF Schema Audit Messages。
内存选项
加密密钥管理选项
--encryptionCipherMode <string>
默认值: AES256-CBC
用于静态加密的加密模式
模式描述AES256-CBC
256位高级加密标准在密文块链模式AES256-GCM
256位高级加密标准在Galois/Counter模式
仅在Linux上可用。
MongoDB企业版在Windows上不再支持
AES256-GCM
作为静态加密的块加密。此用法仅在Linux上受支持。注意
企业级特性
仅适用于 MongoDB 企业版。
--encryptionKeyFile <string>
当通过除KMIP以外的进程管理密钥时,指定本地密钥文件的路径。仅在通过除KMIP以外的进程管理密钥时设置。如果数据已使用KMIP加密,MongoDB会抛出错误。
密钥文件只能包含一个密钥。密钥是一个16或32字符的字符串。
注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipKeyIdentifier <string>
KMIP服务器中现有密钥的唯一标识符。包含以使用与标识符关联的密钥作为系统密钥。您只能在首次为
mongod
实例启用加密时使用此设置。需要--enableEncryption
。如果未指定,MongoDB将请求KMIP服务器创建一个新密钥来作为系统密钥使用。
如果KMIP服务器无法找到指定标识符的密钥或数据已经使用密钥加密,MongoDB将抛出错误。
注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipServerName <string>
连接到的KMIP服务器的主机名或IP地址。需要
--enableEncryption
。您可以指定多个KMIP服务器,以逗号分隔的列表形式,例如:
server1.example.com,server2.example.com
。在启动时,mongod
将按照列表顺序尝试连接到每个服务器,并选择第一个能够成功建立连接的服务器。KMIP服务器选择仅在启动时发生。当连接到KMIP服务器时,
mongod
会验证指定的--kmipServerName
是否与KMIP服务器提供的证书中的主题备用名称(Subject Alternative Name, SAN)匹配(或者如果不存在SAN,则匹配通用名称Common Name, CN)。如果存在SAN,mongod
不会与CN匹配。如果主机名与SAN(或CN)不匹配,mongod
将无法连接。从MongoDB 4.2版本开始,在比较SAN时,MongoDB支持DNS名称或IP地址的比较。在之前的版本中,MongoDB仅支持DNS名称的比较。
注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipPort <number>
默认: 5696
用于与KMIP服务器通信的端口号。需要
--kmipServerName
。需要--enableEncryption
。如果使用
--kmipServerName
指定多个KMIP服务器,mongod
将使用--kmipPort
指定的端口号连接所有提供的KMIP服务器。注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipConnectRetries <数字>
默认: 0
重试连接 KMIP 服务器初始连接的次数。与
--kmipConnectTimeoutMS
结合使用,以控制 mongod 在每次重试之间等待响应的时间。注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipConnectTimeoutMS <数字>
默认: 5000
等待 KMIP 服务器响应的超时时间(毫秒)。如果指定了
--kmipConnectRetries
设置,则 mongod 在重试之间等待指定的时间间隔。值必须为 1000 或更大。
注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipClientCertificateSelector <字符串>
新功能在版本5.0: 在 Windows 和 macOS 上可用,作为
--kmipClientCertificateFile
的替代方案。--kmipClientCertificateFile
和--kmipClientCertificateSelector
选项互斥。您只能指定一个。指定证书属性以从操作系统的证书存储中选择匹配的证书,用于对KMIP服务器进行MongoDB身份验证。
--kmipClientCertificateSelector
接受格式为<属性>=<值>
的参数,其中属性可以是以下之一属性值类型描述subject
ASCII 字符串证书上的主题名称或常见名称指纹
十六进制字符串一系列字节,以十六进制形式表示,用于通过其SHA-1摘要识别公钥。
指纹
有时也被称为指纹
。注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipClientCertificateFile <字符串>
用于对KMIP服务器进行MongoDB身份验证的
.pem
文件的路径。指定的.pem
文件必须同时包含TLS/SSL证书和密钥。要使用此选项,您还必须指定
--kmipServerName
选项。重要
当使用
--kmipClientCertificateFile
且KMIP服务器强制执行TLS 1.2时,在Windows上启用使用KMIP服务器的加密将失败。要在Windows上使用KMIP启用静态加密,您必须
将客户端证书导入Windows证书存储。
注意
在macOS或Windows上,您可以使用操作系统安全存储中的证书而不是PEM密钥文件。请参阅
--kmipClientCertificateSelector
。注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipClientCertificatePassword <字符串>
解密连接到KMIP服务器的客户端证书私钥的密码。此选项用于验证MongoDB对KMIP服务器的身份验证,并要求您提供
--kmipClientCertificateFile
。注意
企业级特性
仅适用于 MongoDB 企业版。
--kmipServerCAFile <string>
CA文件路径。用于验证安全客户端连接到KMIP服务器。
注意
在macOS或Windows上,您可以使用操作系统安全存储中的证书,而不是PEM密钥文件。参见
--kmipClientCertificateSelector
。在使用安全存储时,您不需要,但也可以指定--kmipServerCAFile
。
--kmipActivateKeys <boolean>
默认值: true
新功能在版本5.3.
在创建时激活所有新创建的KMIP密钥,然后定期检查这些密钥是否处于活动状态。
当
--kmipActivateKeys
设置为true
且您在KMIP服务器上已有现有密钥时,必须首先激活该密钥,否则mongod
节点将无法启动。如果mongod使用的密钥转换为非活动状态,则
mongod
节点将关闭,除非kmipActivateKeys
设置为false。为确保您有一个活动的密钥,请使用--kmipRotateMasterKey
旋转KMIP主密钥。
--kmipKeyStatePollingSeconds <整数>
默认值: 900秒
新功能在版本5.3.
以秒为单位的频率,在哪个频率上
mongod
查询 KMIP 服务器以获取活动密钥。要禁用轮询,请将值设置为
-1
。
--kmipUseLegacyProtocol <布尔值>
默认值:false
新功能在版本7.0: (和 6.0.6)
当设置为
true
时,mongod
使用 KMIP 协议版本 1.0 或 1.1,而不是默认版本。默认 KMIP 协议版本为 1.2。要使用 KMIP 版本 1.0 或 1.1 的审计日志加密,必须在启动时指定
auditEncryptKeyWithKMIPGet
。
--eseDatabaseKeyRollover
轮换使用
AES256-GCM
加密配置的 加密存储引擎 数据库密钥。当以此选项启动
mongod
实例时,实例将轮换密钥并退出。注意
企业级特性
仅适用于 MongoDB 企业版。