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

mongos

本页面内容

  • 概要
  • 注意事项
  • 选项
  • 核心选项
  • 分片集群选项
  • TLS 选项
  • 审计选项
  • 分析器选项
  • LDAP 身份验证和授权选项
  • 附加选项

对于分片集群mongos实例提供客户端应用程序与分片集群之间的接口。这些mongos实例将查询和写操作路由到分片上。从应用程序的角度来看,一个mongos实例的行为与其他MongoDB实例相同。

  • 切勿更改mongos二进制文件的名称。

  • MongoDB在TLS 1.1+可用的情况下,禁用了对TLS 1.0加密的支持。

  • 二进制文件mongos无法连接到其mongod实例的功能兼容版本 (fCV)高于mongos的实例。例如,您不能将MongoDB5.0版本8.0mongos连接到一个8.0分片集群,其fCV设置为5.0版本8.0mongos连接到一个5.0.

  • 。但是,您可以连接一个MongoDB

提示

另请参阅

注意

注意

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

--help, -h

返回有关 mongos 选项及其使用的详细信息。

--version

返回 mongos 的版本号。

--config <filename>, -f <filename>

指定运行时配置选项的配置文件。配置文件是配置 mongos 的首选方法。这些选项等同于命令行配置选项。有关更多信息,请参阅自管理配置文件选项

确保配置文件使用 ASCII 编码。mongos 实例不支持使用非 ASCII 编码的配置文件,包括 UTF-8。

--configExpand <none|rest|exec>

默认值: none

启用配置文件中使用展开指令。展开指令允许您为配置文件选项设置外部源值。

--configExpand 支持以下展开指令

描述
none
默认。 mongos 不展开展开指令。如果任何配置文件设置使用展开指令,mongos 启动失败。
rest
mongos 在解析配置文件时展开 __rest 展开指令。
exec
当解析配置文件时,mongos 会展开 __exec 扩展指令。

您可以将多个扩展指令指定为逗号分隔的列表,例如: rest, exec。如果配置文件包含未在 --configExpand 中指定的扩展指令,则 mongos 将返回错误并终止。

有关扩展指令的更多信息,请参阅 自托管部署的外部配置文件值

--verbose, -v

增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含选项来增加详细程度,例如: -vvvvv

--quiet

以静默模式运行 mongos,尝试限制输出量。

此选项抑制

--port <端口号>

默认值: 27017

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

--port 选项接受从 065535 的值范围。将端口设置为 0 将使 mongos 使用操作系统分配的任意端口。

--bind_ip <主机名|IP地址|Unix域套接字路径>

默认值: localhost

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

示例

localhost,/tmp/mongod.sock

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

示例

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

注意

如果指定 IPv6 地址 解析为 IPv6 地址的主机名到 --bind_ip,您必须使用 --ipv6 启用 IPv6 支持。指定 IPv6 地址到 --bind_ip 不会启用 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 或星号 "*"(将星号放在引号内以避免文件名模式扩展)。或者,使用 net.bindIpAll 设置。

注意

  • --bind_ip--bind_ip_all 是互斥的。指定这两个选项会导致 mongos 抛出错误并终止。

  • 命令行选项 --bind 覆盖了配置文件设置 net.bindIp

--bind_ip_all

如果指定了,mongos 实例将绑定到所有IPv4地址(即 0.0.0.0)。如果 mongos--ipv6 启动,则 --bind_ip_all 也会绑定到所有IPv6地址(即 ::)。

mongos 仅在以 --ipv6 启动时支持IPv6。仅指定 --bind_ip_all 不能启用IPv6支持。

警告

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

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

或者,您可以将 --bind_ip 选项设置为 ::,0.0.0.0 或星号 "*"(将星号放在引号内以避免文件名模式扩展)。

注意

--bind_ip--bind_ip_all 是互斥的。也就是说,您可以指定其中一个,但不能同时指定两个。

--listenBacklog <number>

默认:目标系统 SOMAXCONN 常量

监听队列中可以存在的最大连接数。

警告

在使用此参数之前,请咨询您当地系统的文档,了解限制和配置要求。

重要

为防止未定义的行为,请为此参数指定一个介于 1 和当地系统 SOMAXCONN 常量之间的值。

listenBacklog 参数的默认值在编译时设置为目标系统 SOMAXCONN 常量。SOMAXCONNlisten 系统调用 backlog 参数记录的最大有效值。

某些系统可能将 SOMAXCONN 符号化解释,而另一些系统则数值化解释。实际应用的 listen backlog 可能与 SOMAXCONN 常量或 --listenBacklog 参数的数值解释不同,也可能受到系统设置(如 Linux 上的 net.core.somaxconn)的限制。

listenBacklog 参数的值传递超过当地系统 SOMAXCONN 常量,按照标准规定是未定义的行为。更高的值可能会被静默地截断为整数,可能会被忽略,可能会导致意外的资源消耗,或者有其他不良后果。

对于具有连接峰值的工作负载的系统,已知当地系统可以接受比 SOMAXCONN 常量更高的 backlog 参数值,将 listenBacklog 参数设置为更高的值可能会减少客户端观察到的操作延迟,通过减少被强制进入回退状态的连接数量。

--maxConns <number>

mongos 接受的最大同时连接数。如果此值高于您的操作系统配置的最大连接跟踪阈值,则此设置将不起作用。

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

如果您有一个创建多个连接并允许它们超时而不是关闭它们的客户端,这对于 mongos 特别有用。

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

此设置可以防止 mongos 在单个 分片 上造成连接峰值。这样的峰值可能会干扰 分片集群 的运行和内存分配。

--logpath <路径>

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

默认情况下,MongoDB 将移动任何现有的日志文件,而不是覆盖它。要追加到日志文件,请设置 --logappend 选项。

--syslog

将所有日志输出发送到主机上的 syslog 系统,而不是发送到标准输出或到日志文件(--logpath)。

--syslog 选项在 Windows 上不受支持。

警告

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

MongoDB将其日志消息中的组件包含在syslog中。

... ACCESS [repl writer worker 5] Unsupported modification to roles collection ...
--syslogFacility <字符串>

默认值:用户

指定将消息记录到syslog时使用的设施级别。您指定的值必须得到您的操作系统syslog实现的支撑。要使用此选项,您必须启用--syslog选项。

--logappend

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

--logRotate <字符串>

默认:重命名

确定在旋转服务器日志和/或审计日志时对 logRotate 命令的行为。指定 renamereopen

  • rename 将日志文件重命名。

  • reopen 依照典型的 Linux/Unix 日志旋转行为关闭并重新打开日志文件。当使用 Linux/Unix logrotate 工具时使用 reopen 以避免日志丢失。

    如果您指定了 reopen,则还必须使用 --logappend

--redactClientLogData

仅适用于 MongoDB 企业版。

在带有 --redactClientLogDatamongos 上运行时,在记录之前会删除与给定的日志事件一起的消息。这阻止了 mongos 将存储在数据库中的潜在敏感数据写入诊断日志。元数据,如错误或操作代码、行号和源文件名仍在日志中可见。

静态加密TLS/SSL(传输加密) 结合使用 --redactClientLogData 以协助符合监管要求。

例如,MongoDB 部署可能在一个或多个集合中存储个人身份信息(PII)。mongos 记录与 CRUD 操作、分片元数据等相关的事件。可能存在 mongos 将 PII 作为这些日志操作的一部分暴露出来的情况。带有 --redactClientLogDatamongos 在输出到日志之前删除伴随这些事件的消息,从而有效地删除 PII。

在运行带有 --redactClientLogData 选项的 mongos 上的诊断可能由于缺乏与日志事件相关的数据而更加困难。请参阅 日志记录过程 手册页面,以了解 --redactClientLogData 对日志输出的影响示例。

在运行的 mongos 上,使用 setParameter 命令和 redactClientLogData 参数来配置此设置。

--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 <路径>

指定用于存储 mongos 进程进程ID(PID)的文件位置。运行 mongodmongos 进程的用户必须能够写入此路径。如果没有指定 --pidfilepath 选项,则进程不会创建 PID 文件。此选项通常仅与 --fork 选项一起使用。

注意

Linux

在 Linux 上,PID 文件管理通常是您发行版的 init 系统的责任:通常是在 /etc/init.d 目录中的服务文件,或使用 systemctl 注册的 systemd 单元文件。只有在不使用这些 init 系统的情况下才使用 --pidfilepath 选项。有关更多信息,请参阅您操作系统的相应 安装指南

注意

macOS

在 macOS 上,PID 文件管理通常由 brew 处理。只有在不使用 macOS 系统上的 brew 的情况下才使用 --pidfilepath 选项。有关更多信息,请参阅您操作系统的相应安装指南。

--keyFile <文件>

指定存储 MongoDB 实例在分片集群或副本集中互相认证所使用的共享秘密的密钥文件的路径。使用 --keyFile 表示 客户端授权。有关更多信息,请参阅 自我管理内部/成员身份认证

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

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

  • 一系列密钥字符串

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

--setParameter <options>

指定 MongoDB 自托管部署服务器参数 中描述的 MongoDB 参数之一。您可以指定多个 setParameter 字段。

--noscripting

禁用脚本引擎。禁用后,您不能使用执行服务器端 JavaScript 代码的操作,如 $where 查询运算符、mapReduce 命令、$accumulator$function

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

--nounixsocket

禁用在UNIX域套接字上监听。 --nounixsocket 仅适用于基于Unix的系统。

除非以下情况之一为真,否则 mongos 进程始终监听UNIX套接字:

从官方 .deb.rpm 软件包安装的 mongos 默认将 bind_ip 配置设置为 127.0.0.1

--unixSocketPrefix <path>

默认: /tmp

UNIX套接字的路径。 --unixSocketPrefix 仅适用于基于Unix的系统。

如果此选项没有值,则 mongos 进程以 /tmp 作为前缀创建套接字。MongoDB创建并监听UNIX套接字,除非以下情况之一为真:

--filePermissions <路径>

默认: 0700

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

--filePermissions 仅适用于基于Unix的系统。

--fork

启用守护进程模式,使mongos进程在后台运行。在Windows上不支持--fork选项。

默认情况下,mongos不以守护进程方式运行。您可以通过使用--fork或控制守护进程化的进程(如upstartsystemd)来以守护进程方式运行mongos

使用--fork选项需要您配置以下之一以用于mongos的日志输出

--transitionToAuth

允许 mongos 接受并创建从其他 mongodmongos 实例到部署中的认证和非认证连接。用于将副本集或分片集群从无认证配置切换到 内部认证。需要指定 内部认证 机制,如 --keyFile.

例如,如果使用 密钥文件 进行 内部认证,则 mongos 使用匹配的密钥文件与部署中的任何 mongodmongos 建立认证连接。如果安全机制不匹配,则 mongos 将使用非认证连接。

使用 --transitionToAuth 运行的 mongos 不强制执行 用户访问控制。用户可以连接到您的部署而无需进行任何访问控制检查并执行读、写和行政操作。

注意

运行带有 内部认证 带有 --transitionToAuthmongos 需要客户端使用 用户访问控制 连接。在重启 mongos 而不使用 --transitionToAuth 之前,更新客户端以使用适当的 用户 连接到 mongos

--networkMessageCompressors <string>

默认值: snappy,zstd,zlib

指定用于此 mongos 实例与其他分片集群成员

  • 以及支持 OP_COMPRESSED 消息格式的驱动程序之间通信的默认压缩程序。

  • mongosh

  • 驱动程序

MongoDB 支持以下压缩程序

默认情况下,mongodmongos 实例默认使用 snappy,zstd,zlib 压缩程序,顺序如下。

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

重要

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

如果您指定了多个压缩程序,则压缩程序的顺序以及通信发起者也很重要。例如,如果 mongosh 指定以下网络压缩程序 zlib,snappy,而 mongod 指定 snappy,zlib,则 mongoshmongod 之间的消息使用 zlib

如果双方没有共享至少一个共同的压缩程序,则双方之间的消息将不会被压缩。例如,如果 mongosh 指定网络压缩程序 zlib,而 mongod 指定 snappy,则 mongoshmongod 之间的消息不会被压缩。

--timeZoneInfo <路径>

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

随Linux和macOS软件包提供的配置文件默认将时区数据库路径设置为/usr/share/zoneinfo

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

wget https://downloads.mongodb.org/olson_tz_db/timezonedb-latest.zip
unzip timezonedb-latest.zip
mongos --timeZoneInfo timezonedb-2017b/

警告

MongoDB 使用第三方库 timelib 来提供时区之间准确的转换。由于最近的一次更新,timelib 在 MongoDB 的旧版本中可能导致时区转换不准确。

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

--outputConfig

mongos 实例的配置选项以 YAML 格式输出到 stdout 并退出 mongos 实例。对于使用 自托管部署的外部配置文件值 的配置选项,--outputConfig 返回这些选项的解析值。

警告

这可能包括任何配置的密码或通过外部源之前混淆的秘密。

有关使用示例,请参阅

--configdb <replicasetName>/<config1>,<config2>...

指定分片集群的配置服务器

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

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

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

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

--localThreshold

默认值: 15

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

当 mongos 收到允许从 辅助 成员读取的请求时,它

  • 找到具有最低 ping 时间的集合成员。

  • 构建一个列表,其中包含距离集合最近合适成员 ping 时间为 15 毫秒的副本集成员。

    如果您指定了 --localThreshold 选项的值,mongos 将构建一个列表,其中包含在此延迟允许范围内的副本集成员。

  • 从这个列表中随机选择一个成员进行读取。

--localThreshold 设置比较的成员的 ping 时间是最近 ping 时间的移动平均值,最多每 10 秒计算一次。因此,某些查询可能达到阈值以上的成员,直到 mongos 重新计算平均值。

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

提示

查看

配置 mongodmongos 以支持 TLS/SSL 以获取 MongoDB 支持的完整文档。

--tlsMode <模式>

启用所有网络连接使用的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 <文件名>

注意

在macOS或Windows上,您可以使用操作系统的安全存储中的证书而不是指定PEM文件。请参阅--tlsCertificateSelector

指定包含TLS证书和私钥的.pem文件。

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsCertificateKeyFilePassword <value>

指定解密证书密钥文件(即 --tlsCertificateKeyFile)的密码。只有当证书密钥文件被加密时,才使用 --tlsCertificateKeyFilePassword 选项。在任何情况下,mongos 都会将密码从所有日志和报告输出中删除。

有关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>

注意

在 macOS 或 Windows 上,您可以使用操作系统的安全存储中的证书,而不是 PEM 文件。请参阅--tlsClusterCertificateSelector

指定包含集群或副本集成员认证的 x.509 证书-密钥文件的 .pem 文件。

如果--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配置

--tlsClusterPassword <value>

指定用于解密使用 --tlsClusterFile 指定的 x.509 证书密钥文件的密码。只有在证书密钥文件被加密时才使用 --tlsClusterPassword 选项。在所有情况下,mongos 将从所有日志和报告输出中擦除密码。

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsCAFile <filename>

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

在 macOS 或 Windows 上,您可以使用操作系统的安全存储中的证书而不是 PEM 密钥文件。请参阅 --tlsCertificateSelector。当使用安全存储时,您不需要,但也可以指定 --tlsCAFile

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsClusterCAFile <filename>

指定包含用于验证客户端建立连接时提交的证书的证书颁发机构(CA)根证书链的 .pem 文件。使用相对路径或绝对路径指定 .pem 文件名。

如果未指定 --tlsClusterCAFile 以验证客户端建立连接时提交的证书,则集群使用 --tlsCAFile 选项中指定的 .pem 文件。

--tlsClusterCAFile 允许您使用不同的证书颁发机构来验证 TLS 握手的客户端到服务器和服务器到客户端部分。

在 macOS 或 Windows 上,您可以使用操作系统安全存储库中的证书而不是 PEM 密钥文件。请参阅 --tlsClusterCertificateSelector。当使用安全存储库时,您不需要,但可以指定 --tlsClusterCAFile

需要设置 --tlsCAFile

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsCertificateSelector <parameter>=<value>

注意

在 Windows 和 macOS 上可用,作为 --tlsCertificateKeyFile 的替代方案。

选项 --tlsCertificateKeyFile--tlsCertificateSelector 是互斥的。您只能指定其中一个。

指定一个证书属性以从操作系统的证书存储中选取匹配的证书。

--tlsCertificateSelector 接受格式为 <属性>=<值> 的参数,其中属性可以是以下之一:

属性
值类型
描述
subject
ASCII 字符串
证书上的主题名称或常用名称
thumbprint
十六进制字符串

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

“thumbprint”有时被称为“fingerprint”。

当使用系统 SSL 证书存储时,OCSP(在线证书状态协议)用于验证证书的撤销状态。

注意

当使用 net.tls.certificateSelector--tlsCertificateSelector 设置为 thumbprint 时,您不能使用 rotateCertificates 命令或 db.rotateCertificates() 脚本方法。

--tlsClusterCertificateSelector <参数>=<值>

注意

在 Windows 和 macOS 上可用,作为 --tlsClusterFile 的替代方案。

选项 --tlsClusterFile--tlsClusterCertificateSelector 是互斥的。您只能指定其中一个。

指定一个证书属性以从操作系统的证书存储中选取匹配的证书,用于内部身份验证。

--tlsClusterCertificateSelector 接受格式为 <属性>=<值> 的参数,其中属性可以是以下之一:

属性
值类型
描述
subject
ASCII 字符串
证书上的主题名称或常用名称
thumbprint
十六进制字符串

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

“thumbprint”有时被称为“fingerprint”。

mongod / mongos在连接时如果提供的 x.509 证书在 30 天内过期,将记录一条警告信息。

--tlsCRLFile <filename>

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

注意

  • 在 macOS 上无法指定 CRL 文件。相反,您可以使用系统 SSL 证书存储,该存储使用 OCSP(在线证书状态协议)来验证证书的吊销状态。要使用系统 SSL 证书存储,请参阅 --tlsCertificateSelector

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

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsAllowConnectionsWithoutCertificates

默认情况下,服务器将跳过客户端证书验证,除非服务器配置为使用 CA 文件。如果提供了 CA 文件,则以下规则适用

  • 对于不提供证书的客户端,mongodmongos 将加密 TLS/SSL 连接,假设连接成功建立。

  • 对于提供证书的客户端,mongos 使用由 --tlsCAFile 指定的根证书链进行证书验证,并拒绝无效证书的客户端。

如果您有混合部署,其中包含无法或不能向 mongos 提供证书的客户端,请使用 --tlsAllowConnectionsWithoutCertificates 选项。

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsAllowInvalidCertificates

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

注意

当使用 x.509 认证并指定 --tlsAllowInvalidCertificatestls.allowInvalidCertificates: true 时,无效证书仅足以建立TLS连接,但对于认证是 不足够的

当使用 --tlsAllowInvalidCertificates 设置时,MongoDB 会记录有关使用无效证书的警告。

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsAllowInvalidHostnames

禁用连接到副本集或分片集群中其他成员时TLS证书中的主机名验证。这允许 mongos 连接到其他成员,即使其证书中的主机名与配置的主机名不匹配。

有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL客户端TLS/SSL配置

--tlsDisabledProtocols <protocol(s)>

防止运行TLS的MongoDB服务器接受使用特定协议或多个协议的传入连接。要指定多个协议,请使用逗号分隔的协议列表。

--tlsDisabledProtocols 识别以下协议:TLS1_0TLS1_1TLS1_2TLS1_3

  • 在macOS上,您不能禁用 TLS1_1 而同时启用 TLS1_0TLS1_2。您必须禁用这两个中的至少一个,例如,TLS1_0,TLS1_1

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

  • 指定一个未知协议将阻止服务器启动。

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

如果系统上提供了TLS 1.1+,MongoDB将禁用TLS 1.0。要启用禁用的TLS 1.0,指定 none 选项 --tlsDisabledProtocols

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

提示

另请参阅

--tlsFIPSMode

指示 mongos 使用TLS库的FIPS模式。您的系统必须有一个符合FIPS的库才能使用 --tlsFIPSMode 选项。

注意

FIPS兼容的TLS/SSL仅在 MongoDB Enterprise 中可用。有关更多信息,请参阅 为FIPS配置MongoDB

--auditCompressionMode

新增版本5.3.

指定审计日志加密的压缩模式。您还必须使用--auditEncryptionKeyUID--auditLocalKeyFile 启用审计日志加密。

--auditCompressionMode 可以设置为以下值之一

描述
zstd
使用 zstd 算法压缩审计日志。
none (默认)
不压缩审计日志。

注意

仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。

--auditDestination

启用 审计 并指定 mongos 将所有审计事件发送到何处。

--auditDestination 可以有以下值之一

描述
syslog

以 JSON 格式将审计事件输出到 syslog。Windows 上不可用。审计消息具有 info 的 syslog 严重性级别和 user 的设施级别。

syslog 消息限制可能导致审计消息截断。审计系统既不会检测截断,也不会在发生错误时出现错误。

console
以 JSON 格式将审计事件输出到 stdout
file
将审计事件输出到由 --auditPath 指定的文件中,格式按照 --auditFormat 指定的格式。

注意

仅在 MongoDB EnterpriseMongoDB Atlas 中可用。

--auditEncryptionKeyUID

新增版本6.0.

指定用于审计日志加密的密钥管理互操作协议(KMIP)密钥的唯一标识符。

您不能同时使用 --auditEncryptionKeyUID--auditLocalKeyFile

注意

仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。

--auditFormat

指定在 --auditDestinationfile 的情况下,审计输出的文件格式。以下值之一可以是 --auditFormat 选项的值:

描述
JSON
将审计事件以 JSON 格式输出到由 --auditPath 指定的文件。
BSON
将审计事件以 BSON 二进制格式输出到由 --auditPath 指定的文件。

将审计事件以 JSON 格式输出到文件中比以 BSON 格式输出到文件中对服务器性能的降低更明显。

注意

仅在 MongoDB EnterpriseMongoDB Atlas 中可用。

--auditLocalKeyFile

新增版本5.3.

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

注意

仅用于测试时使用--auditLocalKeyFile,因为密钥没有安全性。要保护密钥,请使用--auditEncryptionKeyUID和一个外部密钥管理互操作性协议(KMIP)服务器。

不能同时使用--auditLocalKeyFile--auditEncryptionKeyUID

注意

仅适用于 MongoDB Enterprise。MongoDB Enterprise 和 Atlas 的配置要求不同。

--auditPath

如果--auditDestination的值为file,则指定审计输出的文件。选项--auditPath可以接受完整路径名或相对路径名。

注意

仅在 MongoDB EnterpriseMongoDB Atlas 中可用。

--auditFilter

指定用于限制审计系统记录的操作类型的过滤器。该选项接受一个查询文档的字符串表示形式

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

<field>可以是审计消息中的任何字段,包括在param文档中返回的字段。 <expression>是一个查询条件表达式

要指定审计过滤器,请将过滤器文档用单引号括起来,以字符串形式传递文档。

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

注意

仅在 MongoDB EnterpriseMongoDB Atlas 中可用。

--auditSchema

类型: 字符串

默认值: mongo

新增版本8.0.

指定用于审计日志的格式。对于--auditSchema,您可以指定以下值之一

描述
mongo

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

例如,有关日志消息的示例,请参阅mongo Schema Audit Messages。

OCSF

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

例如,日志消息,请参阅 OCSF 架构审计消息。

--slowms <integer>

默认值: 100

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

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

在更高的 logLevel 设置下,所有操作都会出现在诊断日志中,无论它们的延迟如何。

对于 mongos 实例,只会影响诊断日志,而不会影响分析器,因为在 mongos 上不可用。

--slowOpSampleRate <double>

默认值: 1.0

应记录的慢操作的比率。命令行选项 --slowOpSampleRate 接受介于0和1之间的值(包含0和1)。

对于 mongos 实例,命令行选项 --slowOpSampleRate 仅影响诊断日志,不会影响分析器,因为 mongos 上没有分析器。

注意

从MongoDB 8.0开始,LDAP身份验证和授权已弃用。LDAP将在MongoDB 8.0的整个生命周期中可用且不改变。在未来的一次主要版本中,LDAP将被删除。

有关详细信息,请参阅LDAP弃用。

--ldapServers <host1>:<port>,<host2>:<port>,...,<hostN>:<port>

仅适用于 MongoDB 企业版。

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

如果您的LDAP基础设施将LDAP目录分割到多个LDAP服务器中,请指定一个LDAP服务器或其任何副本实例到 --ldapServers。MongoDB支持以下LDAP引用,如定义在RFC 4511 4.1.10。不要使用 --ldapServers 列出您基础设施中的每个LDAP服务器。

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

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

--ldapValidateLDAPServerConfig <boolean>

在MongoDB Enterprise中可用

一个标志,用于确定mongos实例是否在启动时检查LDAP服务器的可用性。

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

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

--ldapQueryUser <string>

仅适用于 MongoDB 企业版。

当连接到或对LDAP服务器执行查询时,mongos所使用的身份。

以下任一条件为真时,则必须使用

您必须与--ldapQueryUser--ldapQueryPassword一起使用。

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

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

注意

Windows MongoDB部署可以使用--ldapBindWithOSDefaults代替--ldapQueryUser--ldapQueryPassword。您不能同时指定--ldapQueryUser--ldapBindWithOSDefaults

--ldapQueryPassword <string>

仅适用于 MongoDB 企业版。

使用--ldapQueryUser时绑定到LDAP服务器所使用的密码。您必须与--ldapQueryPassword--ldapQueryUser一起使用。

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

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

注意

Windows MongoDB部署可以使用--ldapBindWithOSDefaults代替--ldapQueryPassword--ldapQueryPassword。您不能同时指定--ldapQueryPassword--ldapBindWithOSDefaults

--ldapBindWithOSDefaults <bool>

默认值: false

仅在MongoDB企业版Windows平台中可用。

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

仅在以下情况下需要

使用--ldapBindWithOSDefaults来替换--ldapQueryUser--ldapQueryPassword

--ldapBindMethod <string>

默认值: simple

仅适用于 MongoDB 企业版。

mongos用于连接到LDAP服务器进行身份验证的方法。与--ldapQueryUser--ldapQueryPassword一起使用。

--ldapBindMethod支持以下值

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

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

如果您指定了 sasl,您可以使用 --ldapBindSaslMechanisms 配置可用的 SASL 机制。默认情况下,mongos 使用 DIGEST-MD5 机制。

--ldapBindSaslMechanisms <string>

默认值: DIGEST-MD5

仅适用于 MongoDB 企业版。

一个逗号分隔的 SASL 机制列表,当 mongos 验证 LDAP 服务器时可以使用。必须至少有一个机制,mongos 和 LDAP 服务器必须达成一致。在运行时,mongos 会动态加载主机机器上安装的任何 SASL 机制库。

mongos 主机和远程 LDAP 服务器主机上安装和配置所选 SASL 机制的相应库。您的操作系统可能默认包含某些 SASL 库。请参阅每个 SASL 机制的文档以获取有关安装和配置的指南。

如果使用 GSSAPI SASL 机制与 自托管部署上的 Kerberos 验证 一起使用,请对 mongos 主机机器执行以下操作

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

  • 客户端 keytab 包含 mongos 连接到 LDAP 服务器并执行 LDAP 查询时要使用的 用户主体

Windows
如果连接到Active Directory服务器,当用户登录系统时,Windows Kerberos配置将自动生成一个票据授予票据。将--ldapBindWithOSDefaults设置为true,允许mongos在连接到Active Directory服务器和执行查询时使用生成的凭据。

--ldapBindMethod设置为sasl以使用此选项。

注意

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

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

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

--ldapTransportSecurity <string>

默认:tls

仅适用于 MongoDB 企业版。

默认情况下,mongos会创建一个TLS/SSL加密的LDAP服务器连接。

对于Linux部署,您必须配置/etc/openldap/ldap.conf文件中的适当TLS选项。您的操作系统包管理器通过libldap依赖项创建此文件,作为MongoDB企业版安装的一部分。有关TLS选项的文档,请参阅ldap.conf OpenLDAP文档以获取更完整的说明。

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

--ldapTransportSecurity设置为none以禁用mongos与LDAP服务器之间的TLS/SSL。

警告

--ldapTransportSecurity设置为none会在mongos和LDAP服务器之间传输明文信息和可能的凭证。

--ldapTimeoutMS <int>

默认值: 10000

仅适用于 MongoDB 企业版。

mongos等待LDAP服务器响应请求的毫秒数。

增加--ldapTimeoutMS的值可以防止MongoDB服务器和LDAP服务器之间的连接失败,如果失败的原因是连接超时。减少--ldapTimeoutMS的值可以减少MongoDB等待LDAP服务器响应的时间。

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

--ldapRetryCount <int>

新增版本6.1.

默认值: 0

仅适用于 MongoDB 企业版。

服务器LDAP管理器在网络错误后尝试操作的次数。

--ldapUserToDNMapping <string>

仅适用于 MongoDB 企业版。

将提供给 mongos 用于身份验证的用户名映射到 LDAP Distinguished Name (DN)。在以下场景中,您可能需要使用 --ldapUserToDNMapping 将用户名转换为 LDAP DN:

  • 执行具有简单 LDAP 绑定的 LDAP 身份验证,其中用户使用不是完整 LDAP DN 的用户名对 MongoDB 进行身份验证。

  • 使用需要 DN 的 LDAP 授权查询模板

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

--ldapUserToDNMapping 期望一个引号包裹的 JSON 字符串,表示一个有序文档数组。每个文档包含一个用于匹配提供的用户名的 ECMAScript 格式的正则表达式 match 以及用于转换传入用户名的 substitutionldapQuery 模板。

数组中的每个文档具有以下形式

{
match: "<regex>"
substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>"
}
字段
描述
示例
match
一个用于与提供的用户名匹配的 ECMAScript 格式的正则表达式 (regex)。每个括号包裹的部分代表一个正则表达式捕获组,用于 substitutionldapQuery
"(.+)ENGINEERING" "(.+)DBA"
替换

一个LDAP唯一名称(DN)格式模板,它将匹配 match 正则表达式的认证名称转换为LDAP DN。每个花括号包围的数值将被通过 match 正则表达式从认证用户名中提取的相应的正则表达式捕获组 替换。

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

"cn={0},ou=engineering, dc=example,dc=com"
ldapQuery
一个LDAP查询格式化模板,该模板将匹配正则表达式match的认证名称插入到遵守RFC4515和RFC4516的LDAP查询URI编码中。每个花括号括起来的数值将被通过match表达式从认证用户名中提取出的对应正则表达式捕获组替换。mongos在LDAP服务器上执行查询以检索认证用户的LDAP DN。如果mongos返回的结果正好有一个,转换才会成功,否则mongos将跳过此转换。
"ou=engineering,dc=example, dc=com??one?(user={0})"

注意

RFC4514、RFC4514或LDAP查询不属于MongoDB文档的范畴。请直接查看RFC文档或使用您偏好的LDAP资源。

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

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

如果给定的文档与提供的认证名称不匹配,mongos将继续遍历文档列表以查找更多匹配项。如果在任何文档中找不到匹配项,或者文档描述的转换失败,mongos将返回一个错误。

如果由于网络或认证失败导致无法评估某些转换,mongos也会返回一个错误。mongos拒绝连接请求,并且不会检查数组中剩余的文档。

从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)"mongos执行此查询以对LDAP服务器进行查询,返回结果"cn=bob,ou=dba,dc=example,dc=com"

如果未设置--ldapUserToDNMapping,则mongos在尝试对LDAP服务器进行用户认证或授权时不会对用户名进行任何转换。

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

--ipv6

启用IPv6支持。默认情况下,mongos禁用IPv6支持。

设置--ipv6不会直接让mongos监听任何本地IPv6地址或接口。要配置mongos以监听IPv6接口,您必须:

  • 配置--bind_ip为至少一个IPv6地址或解析为IPv6地址的主机名,或者

  • --bind_ip_all设置为true

返回

mongod