mongos

在本页面

Synopsis

“ MongoDB Shard”的mongos是用于 MongoDB Shard 配置的路由服务,该服务处理来自应用程序层的查询,并确定该数据在sharded cluster中的位置,以完成这些操作。从应用程序的角度来看,mongos实例的行为与任何其他 MongoDB 实例相同。

Considerations

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

Options

  • mongos

Core Options

  • --help `,` `-h`

    • 返回有关 mongos 选项和用法的信息。
  • --version ``

    • 返回 mongos 版本号。
  • --config <filename> , -f <filename>

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

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

  • --verbose `,` `-v`

    • 增加在标准输出或日志文件中返回的内部报告的数量。通过多次包含该选项(例如-vvvvv)来提高-v形式的详细程度。
  • --quiet ``

    • 在安静模式下运行 mongos ,以尝试限制输出量。

此选项禁止显示:

  • database commands的输出

  • replication activity

  • 连接接受的事件

  • 连接关闭事件

  • --port <port>

    • 默认:27017

mongos实例在其上侦听 Client 端连接的 TCP 端口。

  • --bind_ip <ip address>
    • 默认:localhost

Note

从 MongoDB 3.6 开始,默认情况下, mongos 绑定到 localhost(127.0.0.1)。参见默认绑定到 localhost

“ mongos”应在其上侦听 Client 端连接的 IP 地址和/或完整的 Unix 域套接字路径。您可以将 mongos 附加到任何接口。要绑定到多个地址,请 Importing 一个用逗号分隔的值的列表。

Example

localhost,/tmp/mongod.sock

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

Example

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

Note

如果指定 IPv6 地址或将解析为 IPv6 地址的主机名设置为--bind_ip,则必须以--ipv6开头 mongos 以启用 IPv6 支持。将 IPv6 地址指定为--bind_ip不会启用 IPv6 支持。

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

Example

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

Tip

为避免停机,请为每个配置服务器指定一个逻辑 DNS 名称(与服务器的物理或虚拟主机名无关)。如果没有逻辑 DNS 名称,移动或重命名配置服务器需要关闭分片群集中的每个mongodmongos实例。

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

要绑定到所有 IPv4 地址,请 Importing0.0.0.0

要绑定到所有 IPv4 和 IPv6 地址,请 Importing0.0.0.0,::,或者使用net.bindIpAll设置。

Note

--bind_ip--bind_ip_all是互斥的。同时指定这两个选项会导致 mongos 引发错误并终止。

  • --bind_ip_all ``
    • 3.6 版的新功能。

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

mongos 仅支持以--ipv6开头的 IPv6.仅指定--bind_ip_all不会启用 IPv6 支持。

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

或者,您可以将--bind_ip选项设置为0.0.0.0,::以绑定到所有 IP 地址。

Note

--bind_ip--bind_ip_all是互斥的。也就是说,您可以指定一个或另一个,但不能两个都指定。

  • --maxConns <number>
    • mongos 将接受的最大同时连接数。如果此设置高于 os 配置的最大连接跟踪阈值,则该设置无效。

请勿为此选项分配太低的值,否则在正常的应用程序操作过程中会遇到错误。

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

在这种情况下,请将maxIncomingConnections设置为稍高于 Client 端创建的最大连接数或连接池的最大大小的值。

此设置可防止mongos引起各个shards的连接尖峰。这样的尖峰可能会破坏sharded cluster的操作和内存分配。

Note

在 2.6 版中进行了更改:MongoDB 删除了maxIncomingConnections设置的上限。

  • --syslog ``
    • 将所有日志记录输出发送到主机的syslog系统,而不是标准输出或日志文件。 ,例如--logpath

Windows 上不支持--syslog选项。

Warning

syslog守护程序在记录消息时(而不是在 MongoDB 发出消息时)会生成时间戳。这会导致误导日志条目的时间戳,尤其是在系统负载沉重的情况下。我们建议对生产系统使用--logpath选项,以确保准确的时间戳。

  • --syslogFacility <string>
    • 默认:用户

指定将消息记录到 syslog 时使用的工具级别。os 的 syslog 实现必须支持您指定的值。要使用此选项,必须启用--syslog选项。

  • --logpath <path>
    • 将所有诊断日志记录信息发送到日志文件,而不是标准输出或主机的syslog系统。 MongoDB 在您指定的路径上创建日志文件。

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

  • --logappend ``

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

    • 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

运行--redactClientLogDatamongos 将在记录之前删除伴随给定日志事件的任何消息。这样可以防止 mongos 将存储在数据库中的潜在敏感数据写入诊断日志。错误或操作代码,行号和源文件名等元数据仍在日志中可见。

--redactClientLogData静态加密TLS/SSL(传输加密)结合使用可帮助遵守法规要求。

例如,MongoDB 部署可能在一个或多个集合中存储个人身份信息(PII)。 mongos 记录事件,例如与 CRUD 操作,分片元数据等相关的事件。 mongos 可能会将 PII 公开为这些记录操作的一部分。与--redactClientLogData一起运行的 mongos 会删除所有伴随这些事件的消息,然后再输出到日志中,从而有效地删除了 PII。

由于缺少与日志事件相关的数据,使用--redactClientLogData运行的 mongos 的诊断可能会更加困难。有关--redactClientLogData对日志输出的影响的示例,请参见process logging手册页。

在运行中的 mongos 上,将setParameterredactClientLogData参数一起使用以配置此设置。

  • --timeStampFormat <string>
    • 默认:iso8601-local

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

ValueDescription
ctime将时间戳显示为Wed Dec 31 18:17:54.811
iso8601-utc以世界标准时间(UTC)以 ISO-8601 格式显示时间戳。例如,对于大纪元开始时的纽约:1970-01-01T00:00:00.000Z
iso8601-local以 ISO-8601 格式显示本地时间的时间戳。例如,对于大纪元开始时的纽约:1969-12-31T19:00:00.000-0500
  • --pidfilepath <path>
    • 指定一个文件位置来存储 mongos 进程的进程 ID(PID)。运行mongodmongos进程的用户必须能够写入此路径。如果未指定--pidfilepath选项,则该过程不会创建 PID 文件。此选项通常仅与--fork选项结合使用。

Linux

在 Linux 上,PID 文件 Management 通常由发行版的 init 系统负责:通常是/etc/init.d目录中的服务文件,或者是已systemctl注册的 systemd 单位文件。如果您未使用这些初始化系统之一,则仅使用--pidfilepath选项。有关更多信息,请参见适用于您的 os 的Installation Guide

macOS

在 macOS 上,PID 文件 Management 通常由brew处理。如果您不在 macOS 系统上使用brew,请仅使用--pidfilepath选项。有关更多信息,请参见适用于您的 os 的Installation Guide

  • --keyFile <file>

  • --setParameter <options>

  • --nounixsocket ``

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

除非下列条件之一成立,否则 mongos 进程始终在 UNIX 套接字上侦听:

2.6 版中的新功能:从官方.deb.rpm软件包安装的 mongosbind_ip配置默认设置为127.0.0.1

  • --unixSocketPrefix <path>
    • 默认:/ tmp

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

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

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

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

  • --fork ``
    • 启用daemon模式,该模式在后台运行 mongos 进程。默认情况下, mongos 不会作为守护程序运行:通常,您将通过使用--fork或使用处理守护进程的控制进程(例如upstartsystemd)将 mongos 作为守护程序运行。 。

Windows 上不支持--fork选项。

  • --transitionToAuth ``

例如,如果将keyfiles用作internal authentication,则 mongos 使用匹配的密钥文件与部署中的任何mongodmongos创建经过身份验证的连接。如果安全机制不匹配,则 mongos 将使用未经身份验证的连接。

--transitionToAuth一起运行的 mongos 不会强制用户访问控制。用户可以在不进行任何访问控制检查的情况下连接到您的部署,并执行读取,写入和 Management 操作。

Note

internal authentication --transitionToAuth一起运行的 mongos 要求 Client 端使用用户访问控制进行连接。在重新启动不带--transitionToAuthmongos 之前,先使用适当的user更新 Client 端以连接到 mongos

  • --networkMessageCompressors <string>
    • 默认:活泼

3.4 版的新功能。

指定用于在此 mongos 实例与以下对象之间进行通信的默认压缩器:

  • 分片集群的其他成员

  • mongoShell

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

MongoDB 支持以下压缩器:

  • snappy

  • zlib(在 MongoDB 3.6 或更高版本中可用)

从 3.6 版本开始mongodmongos默认启用snappy作为压缩器来启用网络压缩。

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

Important

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

如果指定多个压缩器,则列出压缩器的 Sequences 以及通信启动器都很重要。例如,如果mongo shell 指定以下网络压缩器zlib,snappy,而mongod指定snappy,zlib,则mongo shell 和mongod之间的消息将使用zlib

如果各方不共享至少一个公共压缩器,则各方之间的消息将不被压缩。例如,如果mongo shell 指定了网络压缩器zlib,而mongod指定了snappy,则mongo shell 和mongod之间的消息不会被压缩。

  • --transportLayer <string>
    • 默认:asio

3.6 版的新功能。

mongos 使用的网络实现。要恢复到 3.6 版之前的实现,请将此选项更改为legacy

Warning

除非 MongoDB 支持团队要求您更改它,否则请不要更改此设置。

  • --serviceExecutor <string>
    • 默认:同步

3.6 版的新功能。

确定 mongos 用于执行 Client 端请求的线程和执行模型。 --serviceExecutor选项接受以下值之一:

ValueDescription
synchronousmongos 使用同步网络并在每个连接的基础上 Management 其网络线程池。 MongoDB 的早期版本以这种方式 Management 线程。
adaptivemongos 使用新的实验性异步联网模式和自适应线程池,该线程池根据每个请求 Management 线程。当活动连接数多于数据库请求数时,此模式应具有更一致的性能,并使用更少的资源。


Important





使用adaptive要求将--transportLayer设置为asio



|

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

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

内置时区数据库是Olson/IANA 时区数据库的副本。它随 MongoDB 版本一起更新,但是时区数据库的发布周期与 MongoDB 的发布周期不同。可以从https://downloads.mongodb.org/olson_tz_db/timezonedb-latest.zip下载时区数据库的最新版本的副本。

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

分片群集选项

  • --configdb <replicasetName>/<config1>,<config2>...
    • 在版本 3.2 中更改。

sharded cluster指定configuration servers

从 MongoDB 3.2 开始,可将分片群集的配置服务器部署为replica set。副本集配置服务器必须运行WiredTiger 存储引擎。 MongoDB 3.2 不赞成将三个镜像mongod实例用于配置服务器。

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

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

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

  • --localThreshold ``
    • 默认:15

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

mongos收到允许读取secondary成员的请求时,mongos将:

  • 查找时间最短的集合中的成员。

  • 构造一个副本集成员列表,该列表在该集合中最合适的成员的 ping 时间(15 毫秒)内。

如果您为--localThreshold选项指定一个值,则mongos将构造在此值所允许的延迟内的副本成员列表。

  • 从此列表中选择一个成员以从中随机读取。

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

有关更多信息,请参见read preference文档的读取副本集的首选项部分。

TLS/SSL Options

See

为 TLS/SSL 配置 mongod 和 mongos获取 MongoDB 支持的完整文档。

为**启用 TLS/SSL。

使用--sslOnNormalPorts时, mongos 要求对默认 MongoDB 端口或--port指定的端口上的所有连接进行 TLS/SSL 加密。默认情况下,禁用--sslOnNormalPorts

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslMode <mode>
    • 2.6 版的新功能。

启用用于所有网络连接的 TLS/SSL 或混合 TLS/SSL。 --sslMode选项的参数可以是以下之一:

ValueDescription
disabled服务器不使用 TLS/SSL。
allowSSL服务器之间的连接不使用 TLS/SSL。对于传入连接,服务器同时接受 TLS/SSL 和非 TLS /非 SSL。
preferSSL服务器之间的连接使用 TLS/SSL。对于传入连接,服务器同时接受 TLS/SSL 和非 TLS /非 SSL。
requireSSL服务器仅使用并接受 TLS/SSL 加密的连接。

从 3.4 版开始,如果未指定--sslCAFilessl.CAFile并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslPEMKeyFile <filename>
    • 指定同时包含 TLS/SSL 证书和密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

启用 TLS/SSL 时,必须指定--sslPEMKeyFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslPEMKeyPassword <value>
    • 指定用于解密证书密钥文件的密码(即--sslPEMKeyFile)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongos 都会从所有日志记录和报告输出中删除密码。

在 2.6 版中进行了更改:如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword选项,则 mongos 将提示您 Importing 密码。参见TLS/SSL 证书密码短语

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --clusterAuthMode <option>
    • 默认:keyFile

2.6 版的新功能。

用于集群认证的认证方式。如果您使用内部 x.509 身份验证,请在此处指定。此选项可以具有以下值之一:

ValueDescription
keyFile使用密钥文件进行身份验证。仅接受密钥文件。
sendKeyFile用于滚动升级。发送密钥文件进行身份验证,但可以接受密钥文件和 x.509 证书。
sendX509用于滚动升级。发送 x.509 证书进行身份验证,但可以接受密钥文件和 x.509 证书。
x509推荐的。发送 x.509 证书进行身份验证,并且仅接受 x.509 证书。

从 3.4 版开始,如果未指定--sslCAFilessl.CAFile并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslClusterFile <filename>
    • 2.6 版的新功能。

指定.pem文件,该文件包含群集或副本集的membership authentication的 x.509 证书密钥文件。

如果--sslClusterFile没有为内部群集身份验证指定.pem文件,则群集将使用--sslPEMKeyFile选项中指定的.pem文件。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslClusterPassword <value>
    • 2.6 版的新功能。

指定用于解密用--sslClusterFile指定的 x.509 证书密钥文件的密码。仅当证书密钥文件已加密时,才使用--sslClusterPassword选项。在所有情况下, mongos 都会从所有日志记录和报告输出中删除密码。

如果 x.509 密钥文件已加密,并且您未指定--sslClusterPassword选项,则 mongos 将提示您 Importing 密码。参见TLS/SSL 证书密码短语

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslCAFile <filename>
    • 指定包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

从 3.4 版开始,如果未指定--sslCAFilessl.CAFile并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslClusterCAFile <filename>
    • 3.6.9 版中的新功能。

指定.pem文件,该文件包含来自证书颁发机构的根证书链,用于验证构建连接的 Client 端提供的证书。使用相对或绝对路径指定.pem文件的文件名。

如果--sslClusterCAFile未指定.pem文件来验证来自构建连接的 Client 端的证书,则群集将使用--sslCAFile选项中指定的.pem文件。

--sslClusterCAFile使您可以使用单独的证书颁发机构来验证 TLS 握手的 Client 端到服务器和服务器到 Client 端部分。

要求设置--sslCAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

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

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslAllowConnectionsWithoutCertificates ``
    • 对于不提供证书的 Client 端, mongos 在构建连接时会绕过 TLS/SSL 证书验证。

但是,对于提供证书的 Client 端, mongos 使用--sslCAFile指定的根证书链执行证书验证,并拒绝具有无效证书的 Client 端。

如果您的混合部署中包含不存在或无法向 mongos 颁发证书的 Client 端,请使用--sslAllowConnectionsWithoutCertificates选项。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslAllowInvalidCertificates ``
    • 绕过群集中其他服务器上的 TLS/SSL 证书的验证检查,并允许使用无效的证书进行连接。

Note

从 MongoDB 3.6.6 开始,如果在使用 x.509 身份验证时指定--sslAllowInvalidCertificatesssl.allowInvalidCertificates: true,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。

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

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslAllowInvalidHostnames ``
    • 3.0 版中的新功能。

连接到副本集或分片群集的其他成员以进行进程间身份验证时,请禁用 TLS/SSL 证书中的主机名验证。如果其证书中的主机名与配置的主机名不匹配,这将使 mongos 连接到其他成员。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

  • --sslDisabledProtocols <protocol(s)>
    • 3.0.7 版中的新功能。

防止运行 TLS/SSL 的 MongoDB 服务器接受使用一个或多个特定协议的传入连接。 --sslDisabledProtocols识别以下协议:TLS1_0TLS1_1TLS1_2,并且从版本 3.6.9 TLS1_3开始。

指定无法识别的协议将阻止服务器启动。

要指定多个协议,请使用逗号分隔的协议列表。

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

  • --sslFIPSMode ``
    • 指示**使用安装的 OpenSSL 库的 FIPS 模式。您的系统必须具有符合 FIPS 的 OpenSSL 库,才能使用--sslFIPSMode选项。

Note

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

Audit Options

  • --auditDestination ``
    • 启用auditing并指定 mongos 将所有审核事件发送到何处。

--auditDestination可以具有以下值之一:

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


syslog 消息限制可能导致审计消息被截断。审计系统不会在发生截断时检测到截断或错误。
| console |以 JSON 格式将审核事件输出到stdout
| file |以--auditFormat指定的格式将审核事件输出到--auditPath指定的文件。

Note

仅在MongoDB Enterprise中可用。

  • --auditFormat ``
    • 2.6 版的新功能。

如果--auditDestinationfile,则指定auditing的输出文件格式。 --auditFormat选项可以具有以下值之一:

ValueDescription
JSON将审核事件以 JSON 格式输出到--auditPath中指定的文件。
BSON将 BSON 二进制格式的审核事件输出到--auditPath中指定的文件。

与将审计事件打印为 BSON 格式的文件相比,将审计事件打印为 JSON 格式的文件会使服务器性能下降更多。

Note

仅在MongoDB Enterprise中可用。

  • --auditPath ``
    • 2.6 版的新功能。

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

Note

仅在MongoDB Enterprise中可用。

  • --auditFilter ``
    • 2.6 版的新功能。

指定用于限制操作类型audit system记录的过滤器。该选项采用以下形式的查询文档的字符串表示形式:

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

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

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

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

Note

仅在MongoDB Enterprise中可用。

LDAP 身份验证和授权选项

  • --ldapServers <host1>:<port>,<host2>:<port>,...,<hostN>:<port>
    • 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

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

如果您的 LDAP 基础结构将 LDAP 目录划分为多个 LDAP 服务器,则将* one * LDAP 服务器或其任何复制实例指定为--ldapServers。 MongoDB 支持RFC 4511 4.1.10中定义的以下 LDAP 引用。不要使用--ldapServers列出基础结构中的每个 LDAP 服务器。

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

如果未设置, mongos 不能使用LDAP 认证或授权

  • --ldapValidateLDAPServerConfig <boolean>
    • 在 MongoDB Enterprise 中可用

一个标志,用于确定mongos实例是否在启动时检查LDAP server(s)的可用性:

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

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

版本 3.6.3 中的新功能。

  • --ldapQueryUser <string>
    • 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

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

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

您必须将--ldapQueryUser--ldapQueryPassword结合使用。

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

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

Note

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

  • --ldapQueryPassword <string>
    • 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

使用--ldapQueryUser时用于绑定到 LDAP 服务器的密码。您必须将--ldapQueryPassword--ldapQueryUser结合使用。

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

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

Note

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

  • --ldapBindWithOSDefaults <bool>
    • 默认:false

3.4 版中的新增功能:MongoDB Enterprise 中仅适用于 Windows 平台。

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

仅在以下情况下需要:

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

  • --ldapBindMethod <string>
    • 默认:简单

3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

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

--ldapBindMethod支持以下值:

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

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

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

  • --ldapBindSaslMechanisms <string>
    • 默认:DIGEST-MD5

3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

对 LDAP 服务器进行身份验证时,可以使用逗号分隔的 SASL 机制 mongos 列表。 mongos 和 LDAP 服务器必须在至少一种机制上达成共识。 mongos **在运行时动态加载主机上安装的所有 SASL 机制库。

mongos 主机和远程 LDAP 服务器主机上,为选定的 SASL 机制安装并配置适当的库。您的 os 可能默认包括某些 SASL 库。遵循与每个 SASL 机制相关的文档,以获取有关安装和配置的指导。

如果使用GSSAPI SASL 机制与Kerberos Authentication一起使用,请对 mongos 主机验证以下内容:

  • Linux

  • Client 端密钥标签包含一个User Principal,供 mongos 在连接到 LDAP 服务器并执行 LDAP 查询时使用。

    • Windows

      • 如果连接到 Active Directory 服务器,则 Windows Kerberos 配置会在用户登录到系统时自动生成Ticket-Granting-Ticket。将--ldapBindWithOSDefaults设置为true,以允许 mongos 在连接到 Active Directory 服务器并执行查询时使用生成的凭据。

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

Note

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

MongoDB 不是 SASL 机制库的来源,MongoDB 文档也不是用于安装或配置任何给定 SASL 机制的 Authority 来源。有关文档和支持,请遵循 SASL 机制库的供应商或所有者。

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

  • --ldapTransportSecurity <string>
    • 默认:tls

3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

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

对于 Linux 部署,必须在/etc/openldap/ldap.conf文件中配置适当的 TLS 选项。os 的程序包 Management 器通过libldap依赖关系在 MongoDB Enterprise 安装中创建此文件。有关更完整的说明,请参见ldap.conf OpenLDAP 文档中的TLS Options文档。

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

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

Warning

--ldapTransportSecurity设置为none会在 mongos 和 LDAP 服务器之间传输纯文本信息以及凭据。

  • --ldapTimeoutMS <long>
    • 默认:10000

3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

“ mongos”(毫秒)应 awaitLDAP 服务器响应请求的时间(以毫秒为单位)。

如果失败的根源是连接超时,则增大--ldapTimeoutMS的值可以防止 MongoDB 服务器与 LDAP 服务器之间的连接失败。减小--ldapTimeoutMS的值可减少 MongoDBawaitLDAP 服务器响应的时间。

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

  • --ldapUserToDNMapping <string>
    • 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。

将提供给 mongos 的用户名 Map 到 LDAP 专有名称(DN)。在以下情况下,您可能需要使用--ldapUserToDNMapping将用户名转换为 LDAP DN:

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

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

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

--ldapUserToDNMapping期望用引号括起来的 JSON 字符串表示文档的有序数组。每个文档都包含一个正则表达式match和用于转换传入用户名的substitutionldapQuery模板。

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

{
  match: "<regex>"
  substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>"
}
FieldDescriptionExample
matchECMAScript 格式的正则表达式(regex)以与提供的用户名匹配。每个括号括起来的部分代表substitutionldapQuery使用的正则表达式捕获组。"(.+)ENGINEERING" "(.+)DBA"
substitutionLDAP 专有名称(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})"

Note

RFC4514RFC4515RFC4516或 LDAP 查询的说明超出了 MongoDB 文档的范围。请直接查看 RFC 或使用您首选的 LDAP 资源。

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

执行身份验证或授权时, mongos 以给定的 Sequences 遍历数组中的每个文档,并根据match过滤器检查身份验证用户名。如果找到匹配项, mongos 将应用转换并使用输出来认证用户。 mongos 不会检查数组中的其余文档。

如果给定文档与提供的身份验证名称不匹配,或者文档描述的转换失败,则 mongos continue 浏览文档列表以查找其他匹配项。如果在任何文档中都找不到匹配项,则 mongos 将返回错误。

Example

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

Important

您必须将数组作为字符串传递给--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,则在尝试对 LDAP 服务器进行身份验证或授权时, mongos 不会对用户名进行任何转换。

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

Additional Options

  • --ipv6 ``
    • 启用 IPv6 支持。 mongos 默认禁用 IPv6 支持。

设置--ipv6不会使 mongos 侦听任何本地 IPv6 地址或接口。要将 mongos 配置为在 IPv6 接口上侦听,您必须:

  • --bind_ip配置一个或多个可解析为 IPv6 地址的 IPv6 地址或主机名,

  • --bind_ip_all设置为true

  • --noscripting ``

    • 禁用脚本引擎。