mongos
摘要
对于分片集群,mongos
实例提供客户端应用程序与分片集群之间的接口。这些mongos
实例将查询和写操作路由到分片上。从应用程序的角度来看,一个mongos
实例的行为与其他MongoDB实例相同。
注意事项
切勿更改
mongos
二进制文件的名称。MongoDB在TLS 1.1+可用的情况下,禁用了对TLS 1.0加密的支持。
二进制文件
mongos
无法连接到其mongod
实例的功能兼容版本 (fCV)高于mongos
的实例。例如,您不能将MongoDB5.0版本8.0的mongos
连接到一个8.0分片集群,其fCV
设置为5.0版本8.0的mongos
连接到一个5.0.。但是,您可以连接一个MongoDB
选项
注意
MongoDB 废弃了 SSL 选项,并添加了相应的新的 TLS 选项。
MongoDB 添加了
--tlsClusterCAFile
或net.tls.clusterCAFile
。
注意
MongoDB 5.0 删除了命令行选项
--serviceExecutor
和相应的配置选项net.serviceExecutor
。
核心选项
--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
将返回错误并终止。有关扩展指令的更多信息,请参阅 自托管部署的外部配置文件值。
--quiet
以静默模式运行
mongos
,尝试限制输出量。此选项抑制
数据库命令 的输出
复制活动
连接接受事件
连接关闭事件
--port <端口号>
默认值: 27017
mongos
实例监听客户端连接的 TCP 端口号。--port
选项接受从0
到65535
的值范围。将端口设置为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地址(如
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绑定文档。
要绑定到所有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绑定文档。
或者,您可以将
--bind_ip
选项设置为::,0.0.0.0
或星号"*"
(将星号放在引号内以避免文件名模式扩展)。注意
--bind_ip
和--bind_ip_all
是互斥的。也就是说,您可以指定其中一个,但不能同时指定两个。
--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>
mongos
接受的最大同时连接数。如果此值高于您的操作系统配置的最大连接跟踪阈值,则此设置将不起作用。不要为此选项分配过低的值,否则您将在正常应用操作期间遇到错误。
如果您有一个创建多个连接并允许它们超时而不是关闭它们的客户端,这对于
mongos
特别有用。在这种情况下,将
maxIncomingConnections
设置为一个略高于客户端创建的最大连接数或连接池最大大小的值。
--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
命令的行为。指定rename
或reopen
rename
将日志文件重命名。reopen
依照典型的 Linux/Unix 日志旋转行为关闭并重新打开日志文件。当使用 Linux/Unix logrotate 工具时使用reopen
以避免日志丢失。如果您指定了
reopen
,则还必须使用--logappend
--redactClientLogData
仅适用于 MongoDB 企业版。
在带有
--redactClientLogData
的mongos
上运行时,在记录之前会删除与给定的日志事件一起的消息。这阻止了mongos
将存储在数据库中的潜在敏感数据写入诊断日志。元数据,如错误或操作代码、行号和源文件名仍在日志中可见。与 静态加密 和 TLS/SSL(传输加密) 结合使用
--redactClientLogData
以协助符合监管要求。例如,MongoDB 部署可能在一个或多个集合中存储个人身份信息(PII)。
mongos
记录与 CRUD 操作、分片元数据等相关的事件。可能存在mongos
将 PII 作为这些日志操作的一部分暴露出来的情况。带有--redactClientLogData
的mongos
在输出到日志之前删除伴随这些事件的消息,从而有效地删除 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)的文件位置。运行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
表示客户端授权
。有关更多信息,请参阅 自我管理内部/成员身份认证。用于内部成员身份验证的密钥文件使用 YAML 格式,允许在密钥文件中包含多个密钥。YAML 格式接受以下任一形式:
单个密钥字符串(与早期版本相同)
一系列密钥字符串
YAML 格式与使用文本文件格式的现有单个密钥密钥文件兼容。
--setParameter <options>
指定 MongoDB 自托管部署服务器参数 中描述的 MongoDB 参数之一。您可以指定多个
setParameter
字段。
--noscripting
禁用脚本引擎。禁用后,您不能使用执行服务器端 JavaScript 代码的操作,如
$where
查询运算符、mapReduce
命令、$accumulator
和$function
。如果您不使用这些操作,请禁用服务器端脚本。
--nounixsocket
禁用在UNIX域套接字上监听。
--nounixsocket
仅适用于基于Unix的系统。除非以下情况之一为真,否则
mongos
进程始终监听UNIX套接字:--nounixsocket
被设置net.bindIp
未设置net.bindIp
未指定localhost
或其相关IP地址
--unixSocketPrefix <path>
默认: /tmp
UNIX套接字的路径。
--unixSocketPrefix
仅适用于基于Unix的系统。如果此选项没有值,则
mongos
进程以/tmp
作为前缀创建套接字。MongoDB创建并监听UNIX套接字,除非以下情况之一为真:net.unixDomainSocket.enabled
设置为false
--nounixsocket
被设置net.bindIp
未设置net.bindIp
未指定localhost
或其相关IP地址
--filePermissions <路径>
默认:
0700
设置UNIX域套接字文件的权限。
--filePermissions
仅适用于基于Unix的系统。
--fork
启用守护进程模式,使
mongos
进程在后台运行。在Windows上不支持--fork
选项。默认情况下,
mongos
不以守护进程方式运行。您可以通过使用--fork
或控制守护进程化的进程(如upstart
或systemd
)来以守护进程方式运行mongos
。使用
--fork
选项需要您配置以下之一以用于mongos
的日志输出
--transitionToAuth
允许
mongos
接受并创建从其他mongod
和mongos
实例到部署中的认证和非认证连接。用于将副本集或分片集群从无认证配置切换到 内部认证。需要指定 内部认证 机制,如--keyFile
.例如,如果使用 密钥文件 进行 内部认证,则
mongos
使用匹配的密钥文件与部署中的任何mongod
或mongos
建立认证连接。如果安全机制不匹配,则mongos
将使用非认证连接。使用
--transitionToAuth
运行的mongos
不强制执行 用户访问控制。用户可以连接到您的部署而无需进行任何访问控制检查并执行读、写和行政操作。注意
运行带有 内部认证 和 不 带有
--transitionToAuth
的mongos
需要客户端使用 用户访问控制 连接。在重启mongos
而不使用--transitionToAuth
之前,更新客户端以使用适当的 用户 连接到mongos
。
--networkMessageCompressors <string>
默认值: snappy,zstd,zlib
指定用于此
mongos
实例与其他分片集群成员以及支持
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 <路径>
指定从该路径加载时区数据库的完整路径。如果未提供此选项,则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 重新计算平均值。
TLS 选项
--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文件。
在Linux/BSD上,启用TLS时,您必须指定
--tlsCertificateKeyFile
。在Windows或macOS上,启用TLS时,您必须指定
--tlsCertificateKeyFile
或--tlsCertificateSelector
。
有关TLS和MongoDB的更多信息,请参阅配置`mongod`和`mongos`以使用TLS/SSL和客户端TLS/SSL配置。
--tlsCertificateKeyFilePassword <value>
指定解密证书密钥文件(即
--tlsCertificateKeyFile
)的密码。只有当证书密钥文件被加密时,才使用--tlsCertificateKeyFilePassword
选项。在任何情况下,mongos
都会将密码从所有日志和报告输出中删除。在Linux/BSD上,如果PEM文件中的私钥被加密且您未指定
--tlsCertificateKeyFilePassword
选项,MongoDB 将提示输入密码。请参阅 TLS/SSL 证书密码。在macOS或Windows上,如果PEM文件中的私钥被加密,您必须明确指定
--tlsCertificateKeyFilePassword
选项。或者,您可以使用来自安全系统存储的证书(见--tlsCertificateSelector
)而不是PEM文件,或者使用未加密的PEM文件。
有关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
将从所有日志和报告输出中擦除密码。在 Linux/BSD 上,如果 x.509 文件中的私钥被加密且未指定
--tlsClusterPassword
选项,MongoDB 会提示输入密钥短语。请参阅 TLS/SSL 证书密钥短语。在 macOS 或 Windows 上,如果 x.509 文件中的私钥被加密,则必须明确指定
--tlsClusterPassword
选项。或者,您可以使用来自安全系统存储的证书(请参阅--tlsClusterCertificateSelector
)而不是集群 PEM 文件,或者使用未加密的 PEM 文件。
有关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”。
--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 文件,则以下规则适用
对于提供证书的客户端,
mongos
使用由--tlsCAFile
指定的根证书链进行证书验证,并拒绝无效证书的客户端。
如果您有混合部署,其中包含无法或不能向
mongos
提供证书的客户端,请使用--tlsAllowConnectionsWithoutCertificates
选项。有关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证书中的主机名验证。这允许
mongos
连接到其他成员,即使其证书中的主机名与配置的主机名不匹配。有关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
指示
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 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 架构审计消息。
分析器选项
--slowms <integer>
默认值: 100
慢操作时间阈值,单位为毫秒。运行时间超过此阈值的操作被视为慢操作。
当
logLevel
设置为0
时,MongoDB 以由slowOpSampleRate
确定的速率将慢操作记录到诊断日志中。在更高的
logLevel
设置下,所有操作都会出现在诊断日志中,无论它们的延迟如何。对于
mongos
实例,只会影响诊断日志,而不会影响分析器,因为在mongos
上不可用。
--slowOpSampleRate <double>
默认值: 1.0
应记录的慢操作的比率。命令行选项
--slowOpSampleRate
接受介于0和1之间的值(包含0和1)。对于
mongos
实例,命令行选项--slowOpSampleRate
仅影响诊断日志,不会影响分析器,因为mongos
上没有分析器。
LDAP身份验证和授权选项
注意
从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的更多信息,请参阅以下资源
对于Linux,请参阅Cyrus SASL文档。
对于Windows,请参阅Windows 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
进行配置。
--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
以及用于转换传入用户名的substitution
或ldapQuery
模板。数组中的每个文档具有以下形式
{ match: "<regex>" substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>" } 字段描述示例match
一个用于与提供的用户名匹配的 ECMAScript 格式的正则表达式 (regex)。每个括号包裹的部分代表一个正则表达式捕获组,用于substitution
或ldapQuery
。"(.+)ENGINEERING"
"(.+)DBA"
替换
"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资源。
对于数组中的每个文档,您必须使用
substitution
或ldapQuery
之一。您不能在同一个文档中同时指定两者。在执行身份验证或授权时,
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
。