1.配置文件
您可以使用配置文件在启动时配置mongod和mongos实例。配置文件包含mongod与 mongos命令行选项等效的设置。请参阅配置文件设置和命令行选项映射 Configuration File Settings and Command-Line Options Mapping。
使用配置文件可以更轻松地管理mongod和 mongos选择,尤其是对于大规模部署。您还可以向配置文件添加注释以解释服务器的设置。
默认配置文件:
在Linux上,/etc/mongod.conf使用程序包管理器安装MongoDB时会包含默认配置文件。
在Windows上, 安装期间包含默认配置文件。<install directory>/bin/mongod.cfg
在macOS上,/usr/local/etc/mongod.conf从MongoDB的官方Homebrew tap安装时会包含一个默认配置文件。
(1).文件格式
在2.6版中更改: MongoDB 2.6引入了基于YAML的配置文件格式。2.4配置文件的格式仍是向后兼容性。
MongoDB配置文件使用YAML格式 [1]。
以下示例配置文件包含mongod 您可以适应本地配置的几个设置:
注意:YAML不支持缩进的制表符:使用空格代替。
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
...
包括在官方的MongoDB包的Linux软件包init脚本依赖于特定的值systemLog.path,storage.dbPath和 processManagement.fork。如果在默认配置文件中修改这些设置,则mongod可能无法启动。
注意:YAML是JSON的超集。
(2).外部来源值
版本4.2中的新增功能: MongoDB支持在配置文件中使用 扩展指令来加载外部源值。扩展指令可以加载特定配置文件选项的 值 或加载整个配置文件。
可以使用以下扩展指令:
要启用解析扩展指令,请启动 mongod/ mongos --configExpand选项以及配置文件中包含的任何扩展指令的逗号分隔列表。
如果配置文件包含扩展指令,并且启动mongod/ mongos而未使用该--configExpand 选项指定该指令,则mongod/ mongos无法启动。
有关完整文档,请参阅外部源配置文件值。
(3).使用配置文件
要配置mongod或mongos使用配置文件,请使用--config选项或 -f选项指定配置文件,如以下示例所示:
例如,以下用途:mongod --config <configuration file> mongos --config <configuration file>
mongod --config /etc/mongod.conf
mongos --config /etc/mongos.conf
您还可以使用-f别名指定配置文件,如下所示:
mongod -f /etc/mongod.conf
mongos -f /etc/mongos.conf
如果您从软件包安装并使用系统的init脚本启动了MongoDB ,那么您已经在使用配置文件。
如果 在配置文件中使用扩展指令,则必须--configExpand在启动mongod或时包含该 选项mongos。
2.核心选项
(1).systemLog选项
systemLog:
verbosity: <int>
quiet: <boolean>
traceAllExceptions: <boolean>
syslogFacility: <string>
path: <string>
logAppend: <boolean>
logRotate: <string>
destination: <string>
timeStampFormat: <string>
component:
accessControl:
verbosity: <int>
command:
verbosity: <int>
systemLog.verbosity
Type: integer
默认值:0
在3.0版中更改。
默认的日志信息 冗长级别的组件。详细级别确定MongoDB输出的信息和调试消息的数量。[2]
日志级别为0到5:
a.0是MongoDB的默认日志详细级别,包括 信息性消息。
b.1到5增加详细级别,以包括 Debug 消息。
要对命名组件使用不同的详细级别,请使用组件的详细程度设置。例如,使用 systemLog.component.accessControl.verbosity专门为ACCESS组件设置详细级别。
从4.2版开始,MongoDB在日志消息中包含Debug verbosity level(1-5)。例如,如果详细级别为2,则MongoDB会记录D2。在以前的版本中,仅为D调试级别指定的MongoDB日志消息。
systemLog.quiet
Type: boolean
运行mongos或mongod处于试图限制输出量的安静模式。
systemLog.quiet是不建议用于生产系统,因为它可以使在特定的连接变得更加困难跟踪问题。
systemLog.traceAllExceptions
Type: boolean
打印详细信息以进行调试。用于支持相关故障排除的其他日志记录。
systemLog.syslogFacility
Type: string
默认值:user
将消息记录到syslog时使用的设施级别。您指定的值必须由操作系统的syslog实现支持。要使用此选项,您必须设置 systemLog.destination为syslog。
systemLog.path
Type: string
日志文件的路径,mongod或者mongos应该发送所有诊断日志记录信息,而不是标准输出或主机的 syslog。MongoDB在指定的路径上创建日志文件。
Linux软件包init脚本不希望systemLog.path更改默认值。如果使用Linux软件包并进行更改systemLog.path,则必须使用自己的init脚本并禁用内置脚本。
systemLog.logAppend
Type: boolean
默认值:False
如果为true,则当mongos或mongod实例重新启动时,mongos或mongod会在现有日志文件的结尾追加新条目。如果没有这个选项,mongod将备份现有日志并创建一个新文件。
systemLog.logRotate
Type: string
默认值:rename
3.0.0版中的新功能。
该logRotate命令的行为。指定rename或reopen:
systemLog.destination
Type: string
MongoDB发送所有日志输出的目标。指定 file或syslog。如果指定file,则还必须指定 systemLog.path。
如果未指定systemLog.destination,MongoDB会将所有日志输出发送到标准输出。
警告:在syslog当它将消息记录,还不时的MongoDB发出消息后台生成时间戳。这可能导致日志条目的误导时间戳,尤其是在系统负载较重时。
我们建议使用file生产系统选项来确保准确的时间戳。
systemLog.timeStampFormat
Type: string
默认值:iso8601-local
日志消息中时间戳的时间格式。指定以下值之一
(2).systemLog.component选项
systemLog:
component:
accessControl:
verbosity: <int>
command:
verbosity: <int>
# COMMENT some component verbosity settings omitted for brevity
replication:
verbosity: <int>
election:
verbosity: <int>
heartbeats:
verbosity: <int>
initialSync:
verbosity: <int>
rollback:
verbosity: <int>
storage:
verbosity: <int>
journal:
verbosity: <int>
recovery:
verbosity: <int>
write:
verbosity: <int>
注意:从4.2版开始,MongoDB在日志消息中包含Debug verbosity level(1-5)。例如,如果详细级别为2,则MongoDB会记录D2。在以前的版本中,仅为D调试级别指定的MongoDB日志消息。
systemLog.component.accessControl.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与访问控制相关的组件的日志消息详细级别。见ACCESS组件。
详细程度可以0是5:
systemLog.component.command.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与命令相关的组件的日志消息详细级别。见COMMAND组件。
详细程度可以0是5:
systemLog.component.control.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与控制操作相关的组件的日志消息详细级别。见CONTROL组件。
详细程度可以0是5:
systemLog.component.ftdc.verbosity
Type: integer
默认值:0
版本3.2中的新功能。
与诊断数据收集操作相关的组件的日志消息详细级别。见FTDC组件。
详细程度可以0是5:
systemLog.component.geo.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与地理空间解析操作相关的组件的日志消息详细级别。见GEO组件。
详细程度可以0是5:
systemLog.component.index.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与索引操作相关的组件的日志消息详细级别。见INDEX组件。
详细程度可以0是5:
systemLog.component.network.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与网络操作相关的组件的日志消息详细级别。见NETWORK组件。
详细程度可以0是5:
systemLog.component.query.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与查询操作相关的组件的日志消息详细级别。见QUERY组件。
详细程度可以0是5:
systemLog.component.replication.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与复制相关的组件的日志消息详细级别。见REPL组件。
详细程度可以0是5:
systemLog.component.replication.election.verbosity
Type: integer
默认值:0
版本4.2中的新功能。
与选举相关的组件的日志消息详细级别。见ELECTION组件。
如果systemLog.component.replication.election.verbosity未设置,则 systemLog.component.replication.verbosity 也适用于选举组件。
详细程度可以0是5:
systemLog.component.replication.heartbeats.verbosity
Type: integer
默认值:0
版本3.6中的新功能。
与心跳相关的组件的日志消息详细级别。见REPL_HB组件。
如果systemLog.component.replication.heartbeats.verbosity未设置,则 systemLog.component.replication.verbosity也适用于心跳组件。
详细程度可以0是5:
systemLog.component.replication.initialSync.verbosity
Type: integer
默认值:0
版本4.2中的新功能。
与initialSync相关的组件的日志消息详细级别。见INITSYNC组件。
如果systemLog.component.replication.initialSync.verbosity未设置,则 systemLog.component.replication.verbosity也适用于initialSync组件。
详细程度可以0是5:
systemLog.component.replication.rollback.verbosity
Type: integer
默认值:0
版本3.6中的新功能。
与回滚相关的组件的日志消息详细级别。见ROLLBACK组件。
如果systemLog.component.replication.rollback.verbosity未设置,则 systemLog.component.replication.verbosity也适用于回滚组件。
详细程度可以0是5:
systemLog.component.sharding.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与分片相关的组件的日志消息详细级别。见SHARDING组件。
详细程度可以0是5:
systemLog.component.storage.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与存储相关的组件的日志消息详细级别。见STORAGE组件。
如果systemLog.component.storage.journal.verbosity未设置,则 systemLog.component.storage.verbosity也适用于日记组件。
详细程度可以0是5:
systemLog.component.storage.journal.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与日记相关的组件的日志消息详细级别。见JOURNAL组件。
如果systemLog.component.storage.journal.verbosity未设置,则日记记录组件具有与父存储组件相同的详细级别:即systemLog.component.storage.verbosity设置的 级别或默认的详细级别。
详细程度可以0是5:
systemLog.component.storage.recovery.verbosity
Type: integer
默认值:0
4.0版中的新功能。
与恢复相关的组件的日志消息详细级别。见RECOVERY组件。
如果systemLog.component.storage.recovery.verbosity未设置,则 systemLog.component.storage.verbosity也适用于恢复组件。
详细程度可以0是5:
systemLog.component.transaction.verbosity
Type: integer
默认值:0
版本4.0.2中的新功能。
与事务相关的组件的日志消息详细级别。见TXN组件。
详细程度可以0是5:
systemLog.component.write.verbosity
Type: integer
默认值:0
3.0版中的新功能。
与写入操作相关的组件的日志消息详细级别。见WRITE组件。
详细程度可以0是5:
(3).processManagement选项
processManagement:
fork: <boolean>
pidFilePath: <string>
timeZoneInfo: <string>
processManagement.fork
Type: boolean
默认值:False
启用后台运行mongos或mongod进程的守护进程模式。默认情况下,mongos或mongod不作为守护进程运行:通常,您将作为守护进程运行mongos或mongod,
方法是使用processmanagement.fork或使用处理守护进程的控制进程(例如,使用upstart和systemd)。
Linux包init脚本不希望processmanagement.fork从默认值更改。如果使用Linux包并更改processmanagement.fork,则必须使用自己的init脚本并禁用内置脚本。
processManagement.pidFilePath
Type: string
指定一个文件位置来保存的进程ID mongos或mongod 过程,其中mongos或mongod将写入其PID。这对于结合设置跟踪mongos或mongod处理 非常有用processManagement.fork。
如果没有指定processManagement.pidFilePath选项,则进程不会创建PID文件。
processManagement.timeZoneInfo
Type: string
加载时区数据库的完整路径。如果未提供此选项,则MongoDB将使用其内置时区数据库。
Linux和macOS软件包附带的配置文件/usr/share/zoneinfo默认设置时区数据库路径。
内置时区数据库是Olson / IANA时区数据库的副本。它与MongoDB版本一起更新,但时区数据库的发布周期与MongoDB的发布周期不同。
(4).cloud选项
4.0版中的新功能。
cloud:
monitoring:
free:
state: <string>
tags: <string>
cloud.monitoring.free.state
Type: string
4.0版中的新功能:适用于MongoDB Community Edition。
启用或禁用免费的MongoDB云监控。cloud.monitoring.free.state接受以下值:
启用后,自由监控状态将保持启用状态,直到明确禁用。也就是说,每次启动服务器时都不需要重新启用。
cloud.monitoring.free.tags
Type: string
4.0版中的新功能:适用于MongoDB Community Edition。
用于描述环境上下文的可选标记 标签可以在启动时作为免费MongoDB云监控注册的一部分发送。
(5).net选项
net:
port: <int>
bindIp: <string>
bindIpAll: <boolean>
maxIncomingConnections: <int>
wireObjectCheck: <boolean>
ipv6: <boolean>
unixDomainSocket:
enabled: <boolean>
pathPrefix: <string>
filePermissions: <int>
tls:
certificateSelector: <string>
clusterCertificateSelector: <string>
mode: <string>
certificateKeyFile: <string>
certificateKeyFilePassword: <string>
clusterFile: <string>
clusterPassword: <string>
CAFile: <string>
clusterCAFile: <string>
CRLFile: <string>
allowConnectionsWithoutCertificates: <boolean>
allowInvalidCertificates: <boolean>
allowInvalidHostnames: <boolean>
disabledProtocols: <string>
FIPSMode: <boolean>
compression:
compressors: <string>
serviceExecutor: <string>
net.port
Type: integer
默认值:
27017 mongod(如果不是分片成员或配置服务器成员)或mongos实例
27018如果mongod是shard member
27019如果mongod是config server member
MongoDB实例侦听客户端连接的TCP端口。
net.bindIp
Type: string
默认值:localhost
注意:从MongoDB 3.6开始,mongos或mongod默认绑定到localhost。请参见默认绑定到Localhost。
该主机名和/或IP地址和/或完整的Unix域套接字的路径上mongos还是mongod应该监听客户端连接。您可以附加mongos或mongod任何界面。要绑定到多个地址,请输入逗号分隔值列表。
例:localhost,/tmp/mongod.sock
您可以指定解析为IPv4或IPv6地址的IPv4和IPv6地址或主机名。
例:localhost, 2001:0DB8:e132:ba26:0d5c:2774:e7f9:d513
注意:如果指定IPv6地址或解析为IPv6地址为主机名net.bindIp,您必须启动mongos或mongod与 启用IPv6支持。指定IPv6地址不启用IPv6支持。net.ipv6 : truenet.bindIp
如果指定 链接本地IPv6地址 (fe80::/10),则必须将区域索引附加 到该地址(即fe80::<address>%<adapter-name>)。
例:localhost,fe80::a00:27ff:fee0:1fcf%enp0s3
小技巧:如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片集群成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
警告:在绑定到非本地主机(例如可公开访问的)IP地址之前,请确保已保护您的群集免受未经授权的访问。有关安全建议的完整列表,请参阅 安全检查表。
至少考虑 启用身份验证(enabling authentication)和 强化网络基础架构( hardening network infrastructure)。
要绑定到所有IPv4地址,请输入0.0.0.0。
要绑定到所有IPv4和IPv6地址,请::,0.0.0.0在MongoDB 4.2中输入或启动星号"*"(将星号括在引号中以区分YAML别名节点)。或者,使用该net.bindIpAll设置。
注意:net.bindIp并且net.bindIpAll是相互排斥的。也就是说,您可以指定其中一个,但不能同时指定两者。命令行选项--bind_ip会覆盖配置文件设置net.bindIp。
net.bindIpAll
Type: boolean
默认值:False
版本3.6中的新功能。
如果为true,则mongos或mongod实例绑定到所有IPv4地址(即0.0.0.0)。如果mongos或mongod开始 ,也绑定到所有IPv6地址(即)。net.ipv6 : truenet.bindIpAll::
mongos或者mongod仅在启动时支持IPv6 。单独指定 不支持IPv6。net.ipv6 : truenet.bindIpAll
警告:在绑定到非本地主机(例如可公开访问的)IP地址之前,请确保已保护您的群集免受未经授权的访问。有关安全建议的完整列表,
请参阅 安全检查表( Security Checklist)。至少考虑 启用身份验证( enabling authentication)和 强化网络基础架构(hardening network infrastructure)。
有关IP绑定的更多信息,请参阅 IP绑定( IP Binding)文档。
或者,从MongoDB 4.2开始,设置net.bindIp为::,0.0.0.0or或星号"*"(用引号括起星号以区分YAML别名节点)以绑定到所有IP地址。
注意: net.bindIp并且net.bindIpAll是相互排斥的。指定两个选项会导致mongos或mongod抛出错误并终止。
net.maxIncomingConnections
Type: integer
默认值:65536
要接受mongos或mongod将接受的最大同时连接数。如果此设置高于操作系统配置的最大连接跟踪阈值,则此设置无效。
不要为此选项分配太低的值,否则在正常应用程序操作期间将遇到错误。
mongos如果您有一个创建多个连接的客户端并允许它们超时而不是关闭它们,这对于特别有用。
在这种情况下,请设置maxIncomingConnections为略高于客户端创建的最大连接数或连接池的最大大小的值。
此设置可防止mongos在各个分片上引起连接尖峰。这些尖峰可能会破坏分片群集的操作和内存分配。
net.wireObjectCheck
Type: boolean
默认值:True
为true,mongod或者mongos实例在收到客户端时验证所有请求,以防止客户端将格式错误或无效的BSON插入MongoDB数据库。
对于具有高度子文档嵌套的对象,net.wireObjectCheck可以对性能产生很小的影响。
net.ipv6
Type: boolean
默认值:False
设置net.ipv6为true启用IPv6支持。mongos/ mongod默认情况下禁用IPv6支持。
设置net.ipv6并没有直接mongos/ mongod听上的任何本地IPv6地址或接口。要配置mongos/ mongod侦听IPv6接口,您必须:
配置net.bindIp一个或多个解析为IPv6地址的IPv6地址或主机名,或
设置net.bindIpAll为true。
本篇先讲这么多,剩下的下篇继续。