MongoDB作为NoSql数据库中最关系型的,是解决传统关系型数据库在业务不断复杂,数据量逐渐变大的大数据解决方案之一。
本文主要以官网为参考主题,介绍在搭建生产环境时,可能有用的配置,接下来的一段时间可能会频繁更改,一遍阅读官网,一遍记录。
写在前面:Mongod(分片存储数据),Mongos(路由处理)
参考:https://docs.mongodb.com/manual/reference/configuration-options/#processmanagement-options
1.配置文件配置之前的准备知识
配置文件的格式以YAML的的形式为基础,在此模式下,不可使用Tab,只能使用空格。
配置文件的作用是为了代替在进入MongoDB后使用命令行对环境配置,官方有这种配置与命令想对应的匹配文档。
mongod --config /etc/mongod.conf mongos --config /etc/mongos.conf mongod -f /etc/mongod.conf mongos -f /etc/mongos.conf
与Hive等相同,使用 -f 来直接指定config文件
2.生产环境所选配置
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
:[0-5],是控制输出级别的控制项,0是默认级别,是存储信息的,1-5是Debug的级别。分别为Debug, Info,Warn,Error,Fatal
systemLog.
quiet:boolean,限制输出的数量,不建议再生产环境中设置为此模式。
systemLog.
traceAllExceptions,boolean,打印详细的调试信息。用于支持相关故障排除的其他日志记录。
systemLog.
syslogFacility,String,默认为user,用于将日志信息存放在系统的sysLog中,但是需要将systemLog.destination属性设置为syslog,再生产环境中官网并不建议这么做,具体在下面说明。
systemLog.
path,用于指定log文件的输出位置。对于linux用户,init脚本并不希望systemlog.path从默认值更改。如果使用Linux包并更改systemlog.path,则必须使用自己的init脚本并禁用内置脚本。
systemLog.
logAppend,,默认为False。如果为true,则当mongos或mongod实例重新启动时,mongos或mongod会在现有日志文件的结尾追加新条目。如果没有这个选项,mongod将备份现有日志并创建一个新文件。
systemLog.
logRotate,[rename,reopen],默认为rename。但是按照linux的思想,建议设置为reopen,可减少损失log的情况,但是需要将systemLog.logAppend设置为true。
systemLog.
destination,[file,syslog],如果不设置此项,则会在标准输出中打印信息和Debug信息,设置为file时,也需要对
systemLog.
path进行设置。
systemLog.
timeStampFormat,[ctime,iso8601-utc,iso8601-local],用于表示log日志中的时间的表示。
systemLog.component.accessControl.
verbosity:与
systemLog.
verbosity作用类似。
systemLog.component.command.
verbosity:与
systemLog.
verbosity作用类似。
systemLog.component.control.
verbosity,等等,都是设置存储日志级别的。
2.2 processManagement Options
processManagement: fork: <boolean> pidFilePath: <string> timeZoneInfo: <string>
processManagement.
fork:boolean,默认为false。可将mogos和mogod设为守护进程。在linux环境下如果将mongo设为守护进程,则需要使用自己的init脚本,并取消built-in脚本。(与
systemLog.
path相似
)。
processManagement.
pidFilePath。指定一个文件位置,用于保存Mongos或Mongod进程的进程ID,Mongos或Mongod将在其中写入其PID。这对于结合processManagement.fork设置跟踪mongos或mongod进程很有用。如果没有指定的processmanagement.pidfilepath选项,进程将不创建PID文件。
processManagement.
timeZoneInfo。
从中加载时区数据库的完整路径。如果不提供此选项,MongoDB将使用其内置的时区数据库。Linux和MacOS包中包含的配置文件默认情况下将时区数据库路径设置为/usr/share/zoneinfo。内置时区数据库是Olson/IANA时区数据库的副本。随着MongoDB的发布而更新,但时区数据库的发布周期不同于MongoDB的发布周期。可以从https://downloads.mongodb.org/olson_tz_db/timezonedb-latest.zip下载最新版本的时区数据库的副本。
2.3 cloud Options
cloud: monitoring: free: state: <string> tags: <string>
Free monitoring provides information about your deployment, including:
- Operation Execution Times
- Memory Usage
- CPU Usage
- Operation Counts
监控提供之前24小时上传的数据,这中间如果进行了取消free-Monitor,开启监控,则也是提供上24小时的数据。
使用访问控制运行时,用户必须具有以下权限才能启用自由监视并获取状态:
{ resource: { cluster : true }, actions: [ "setFreeMonitoring", "checkFreeMonitoringStatus" ] }
The built-in clusterMonitor角色提供了这个权限。
cloud.monitoring.free.
state:[runtime(default),on,off]。一旦启用,自由监控状态将保持启用状态,直到显式禁用。也就是说,每次启动服务器时不需要重新启用。
runtime:您可以在运行时启用或禁用免费监视。
on :在启动时启用免费监控;即注册以进行免费监控。如果在启动时启用,则不能在运行时禁用自由监视。
off :在启动时禁用免费监视,无论您以前是否注册了免费监视。如果在启动时禁用,则无法在运行时启用自由监视。
cloud.monitoring.free.
tags:用于描述环境上下文的可选标记。标签可以作为启动时free-MongoDB云监控注册的一部分发送。
2.4 net Options
net: port: <int> bindIp: <string> bindIpAll: <boolean> maxIncomingConnections: <int> wireObjectCheck: <boolean> ipv6: <boolean> unixDomainSocket: enabled: <boolean> pathPrefix: <string> filePermissions: <int> ssl: sslOnNormalPorts: <boolean> # deprecated since 2.6 certificateSelector: <string> clusterCertificateSelector: <string> mode: <string> PEMKeyFile: <string> PEMKeyPassword: <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:
默认如下:
27017用于mongod(如果不是shard成员或config服务器成员)或mongos实例。
27018如果mongod是shard成员。
27019如果mongod是配置服务器成员。
net.
bindIp:bind主要用于绑定信息来源,用于在多网卡时,获取指定网卡过来的信息。用于指定Mongo服务器的地址,并不能用于指定客户端的访问,客户端的访问需要设置基础网络以进行拦截。
以下几种为绑定信息来源的方式。要绑定到多个地址,请输入逗号分隔值列表。
localhost,/tmp/mongod.sock。#Mongos或Mongod应在其上侦听客户端连接的主机名和/或IP地址和/或完整的Unix域套接字路径。您可以将mongos或mongod附加到任何接口。
localhost, 2001:0DB8:e132:ba26:0d5c:2774:e7f9:d513 #可以使用ipv4或者ipv6协议的ip地址,但是前提需要将 net.ipv6 参数设为True。直接设置bindIp并不能将net.ipv6函数设置为True。
小tips:在设置此参数的时候尽可能使用DNS的域名进行设置,这样配置的话,在后期对节点进行更改等操作都更方便。
ipv4:0.0.0.0。
ipv4和ipv6: ::,0.0.0.0或者配置net.bindIpAll来配置。
net.
bindIp与net.bindIpAll互斥,只能配置一个。
net.
bindIpAll:boolean,同上,就是绑定所有地址,但是绑定ipv6,需要将net.ipv6 参数设置为true。
下面针对上述两个参数,举个例子,假设本地地址为:198.51.100.1,客户端想要连接主机需要指定ip地址。
mongod --bind_ip localhost,My-Example-Associated-Hostname
-------------------------------------------------------------
mongo --host My-Example-Associated-Hostname mongo --host 198.51.100.1
上述的两个参数属于暴露端口,官方给的检查权限等的方法参考:https://docs.mongodb.com/manual/administration/security-checklist/,有时间在说明这部分
net.
maxIncomingConnections:默认为65536,用于Mongod与Mongos的同时刻最大连接数,此连接数如果大于操作系统的最大连接数,此参数失效。
如果此参数设置过小,会导致正常的操作都会导致错误。
此参数用于Mongos,当客户端允许创建多个连接时可以超时,而不是关闭的情况时,将此参数设置为稍微超过客户端或者连接池的数量,此设置会预防Mongos导致的连接进行人为的分片峰值。即会导致分片集群上的操作和内存分配混乱。
net.
wireObjectCheck:boolean。如果为true,则mongod或mongos实例在收到客户机的所有请求时对其进行验证,以防止客户机在mongodb数据库中插入格式错误或无效的bson。
net.
ipv6:boolean,默认为false。此设置是与
net.
bindIp和
net.
bindIpAll参数配合使用。
net.unixDomainSocket Options:
net: unixDomainSocket: enabled: <boolean> pathPrefix: <string> filePermissions: <int>
net.unixDomainSocket.enabled:Boolean,默认为true。unixDomainSocket是比TCP,UDP更具效率的主机内部的信息传输协议。
net.unixDomainSocket.pathPrefix:默认为/tmp。如果该选项没有值,mongos或mongod进程将创建一个以/tmp作为前缀的套接字。
net.unixDomainSocket.filePermissions:默认为 700,即root用户,可读可写可操作。其他用户无权限。
net.ssl Options:
net: ssl: sslOnNormalPorts: <boolean> # deprecated since 2.6 mode: <string> PEMKeyFile: <string> PEMKeyPassword: <string> certificateSelector: <string> clusterCertificateSelector: <string> clusterFile: <string> clusterPassword: <string> CAFile: <string> clusterCAFile: <string> CRLFile: <string> allowConnectionsWithoutCertificates: <boolean> allowInvalidCertificates: <boolean> allowInvalidHostnames: <boolean> disabledProtocols: <string> FIPSMode: <boolean>
net.ssl.sslOnNormalPorts:过时。
net.ssl.mode:启用或禁用用于所有网络连接的TLS/SSL或混合TLS/SSL。
disabled:服务器不使用TLS/SSL。
allowSSL:服务器之间的连接不使用tls/ssl。对于传入连接,服务器同时接受TLS/SSL和非TLS/非SSL。
preferSSL:服务器之间的连接使用tls/ssl。对于传入连接,服务器同时接受TLS/SSL和非TLS/非SSL。
requireSSL:服务器仅使用和接受TLS/SSL加密连接。
net.ssl.
PEMKeyFile:.pem文件包含tls/ssl证书和密钥。
net.ssl.
PEMKeyPassword:用于解密证书密钥文件(即pEKEKILE文件)的密码。仅当证书密钥文件加密时才使用net.ssl.pemkeypassword选项。在所有情况下,mongos或mongod都会从所有日志和报告输出中对密码编码。在Linux/BSD上,如果PEM文件中的私钥是加密的,并且没有指定net.ssl.pemkeypassword选项,MongoDB将提示输入密码。
net.ssl.certificateSelector:与net.ssl.
PEMKeyFile是互斥的。此属性用于指定证书属性,以便从操作系统的证书存储中选择匹配的证书。
使用<property>=<value>格式进行赋值。
subject = ASCII string 或
thumbprint = hex string
net.ssl.clusterCertificateSelector:与net.ssl.clusterFile是互斥的。此属性用于指定证书属性,以便从操作系统的证书存储中选择匹配的证书。
net.ssl.clusterFile:包含用于群集或副本集成员身份验证的X.509证书密钥文件的.pem文件。
net.ssl.clusterPassword:对用--sslclusterfile指定的X.509证书密钥文件进行解密的密码。仅当证书密钥文件加密时才使用net.ssl.clusterpassword选项。在所有情况下,mongos或mongod都会从所有日志和报告输出中对密码编码。在Linux/BSD上,如果X.509文件中的私钥是加密的,并且没有指定net.ssl.clusterpassword选项,MongoDB将提示输入密码。
net.ssl.CAFile:包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名。
net.ssl.clusterCAFile:包含来自证书颁发机构的根证书链的.pem文件,用于验证建立连接的客户端提供的证书。使用相对或绝对路径指定.pem文件的文件名。如果net.ssl.cluster cafile未指定用于从建立连接的客户端验证证书的.pem文件,则群集将使用net.ssl.cafile选项中指定的.pem文件。net.ssl.clustercafile允许您使用单独的证书颁发机构来验证TLS握手的客户端到服务器和服务器到客户端部分。特殊的,需要设置net.ssl.cafile。
net.ssl.CRLFile:包含证书吊销列表的.pem文件。使用相对或绝对路径指定.pem文件的文件名。与CA相对应。
net.ssl.
allowConnectionsWithoutCertificates:
对于不存在证书的客户机,Mongos或Mongod在建立连接时会绕过TLS/SSL证书验证。但是,对于提供证书的客户机,mongos或mongod使用cafile指定的根证书链执行证书验证,并拒绝具有无效证书的客户机。如果您有一个混合部署,其中包括不向Mongos或Mongod提供或无法向其提供证书的客户端,请使用net.ssl.allowconnectionwithoutcertificates选项。
net.ssl.allowInvalidCertificates:启用或禁用群集中其他服务器上的TLS/SSL证书的验证检查,并允许使用无效证书进行连接。使用net.ssl.allowinvalidCertificates设置时,MongoDB会记录有关使用无效证书的警告。特别的,从mongodb 4.0开始,如果指定--ssl allowinvalidcertificates或ssl.allowinvalidcertificates:true,则使用X.509身份验证时,无效证书仅足以建立一个tls/ssl连接,但不足以进行身份验证。
net.ssl.
allowInvalidHostnames:当net.ssl.allowinvalidhostnames为true时,mongodb将禁用tls/ssl证书中主机名的验证,如果主机名的证书与指定的主机名不匹配,则允许mongod连接到mongoDB实例。
net.ssl.
disabledProtocols:阻止使用tls/ssl运行的MongoDB服务器接受使用特定协议或协议的传入连接。要指定多个协议,请使用逗号分隔的协议列表。比如:
TLS1_0,TLS1_1
.
指定无法识别的协议,服务器将无法启动。
指定的禁用协议将覆盖所有默认的禁用协议。
特别的,副本集和分片群集的成员必须至少使用一个公共协议。
net.ssl.
FIPSMode:为Mongos或Mongod启用或禁用TLS/SSL库的FIPS模式。您的系统必须有一个FIPS兼容的库来使用NET.SSL.FIPSMODEL选项。应该不常用。
net.compression Option:
net:
compression:
compressors: <string>
net.compression.
compressors:默认为Snappy,指定用于此Mongod或Mongos实例之间的通信的默认压缩程序。要禁用网络压缩,请将该值设置为disabled。
当双方都启用网络压缩时,消息被压缩。否则,双方之间的消息是未压缩的。启用的网络压缩的协议也必须相同,否则将不进行压缩。
当两端的压缩协议不止一个的时候,压缩所采用的方式如下:例如,如果mongo shell指定以下网络压缩器zlib,则snappy和mongod指定snappy、zlib,mongo shell和mongod之间的消息使用zlib。
net.
serviceExecutor:默认为synchronous。确定Mongos或Mongod用于执行客户端请求的线程和执行模型。
synchronous:mongos或mongod使用同步网络,并基于每个连接管理其网络线程池。以前版本的MongoDB托管线程是这样的。
adaptive:Mongos或Mongod使用新的实验性异步联网模式,该模式带有一个自适应线程池,该线程池根据每个请求管理线程。与数据库请求相比,当连接处于非活动状态时,此模式应该具有更一致的性能并使用更少的资源。可尝试使用。
2.5 security Options
security: keyFile: <string> clusterAuthMode: <string> authorization: <string> transitionToAuth: <boolean> javascriptEnabled: <boolean> redactClientLogData: <boolean> sasl: hostName: <string> serviceName: <string> saslauthdSocketPath: <string> enableEncryption: <boolean> encryptionCipherMode: <string> encryptionKeyFile: <string> kmip: keyIdentifier: <string> rotateMasterKey: <boolean> serverName: <string> port: <string> clientCertificateFile: <string> clientCertificatePassword: <string> clientCertificateSelector: <string> serverCAFile: <string> ldap: servers: <string> bind: method: <string> saslMechanisms: <string> queryUser: <string> queryPassword: <string> useOSDefaults: <boolean> transportSecurity: <string> timeoutMS: <int> userToDNMapping: <string> authz: queryTemplate: <string>
security.
keyFile:密钥文件的路径,该文件存储MongoDB实例用于在分片集群或副本集中相互验证的共享机密。keyfile包含security.authorization。
security.
clusterAuthMode:用于群集身份验证的身份验证模式。如果使用内部X.509身份验证,请在此处指定。此选项可以具有以下值之一:
keyFile:使用keyfile进行身份验证。只接受秘钥文件。
sendkeyfile:用于滚动升级。发送密钥文件进行身份验证,但可以同时接受密钥文件和X.509证书。
sendx509:用于滚动升级。发送X.509证书进行身份验证,但可以同时接受密钥文件和X.509证书。
X509:(推荐)。发送X.509证书进行身份验证,只接受X.509证书。
从3.4版开始,如果未指定--ssl cafile或ssl.cafile,并且未使用X.509身份验证,则在连接到启用了tls/ssl的服务器时,将使用系统范围的CA证书存储。如果使用X.509身份验证,则必须指定-ssl cafile或ssl.cafile,除非使用-sslcertificateselector。
security.
authorization:默认为disabled。启用或禁用基于角色的访问控制(RBAC),以控制每个用户对数据库资源和操作的访问。
enabled:用户只能访问他们被授予特权的数据库资源和操作。
disabled:不进行权限检查。
security.
transitionToAuth:
security.
javascriptEnabled:Boolean,默认为True。启用或禁用服务器端JavaScript执行。禁用时,不能使用执行javascript代码服务器端执行的操作,例如$where查询运算符、mapreduce命令和db.collection.mapreduce()方法、group命令和db.collection.group()方法。
security.
redactClientLogData:boolean。(Enterprise only)
Key Management Configuration Options:(Enterprise only)
security: enableEncryption: <boolean> encryptionCipherMode: <string> encryptionKeyFile: <string> kmip: keyIdentifier: <string> rotateMasterKey: <boolean> serverName: <string> port: <string> clientCertificateFile: <string> clientCertificatePassword: <string> clientCertificateSelector: <string> serverCAFile: <string>
security.sasl Options:
security: sasl: hostName: <string> serviceName: <string> saslauthdSocketPath: <string>
security.sasl.hostName:用于配置SASL和Kerberos身份验证的完全限定服务器域名。SASL主机名仅覆盖SASL和Kerberos配置的主机名。
security.sasl.serviceName:使用SASL注册的服务名称。此选项允许您基于每个实例重写Kerberos主体名称的默认Kerberos服务名称组件。如果未指定,则默认值为mongodb。特别的,确保驱动程序支持备用服务名称。
security.sasl.saslauthdsocketpath:saslauthd的Unix域套接字文件的路径。
setParameter Option:
setParameter:设置MongoDB参数或MongoDB服务器参数中描述的参数。
setParameter: <parameter1>: <value1> <parameter2>: <value2>
比如:
setParameter:
enableLocalhostAuthBypass: false
LDAP Parameters:
setParameter.
ldapUserCacheInvalidationInterval:Int,默认为30。
Mongod或Mongos在外部用户缓存刷新之间等待的间隔(秒)。在mongod或mongos刷新外部用户缓存之后,下一个操作是LDAP授权用户mongodb从LDAP服务器重新获取授权数据。增加指定的值会增加mongod或mongos的时间,LDAP服务器可能不同步,但会减少LDAP服务器上的负载。相反,减少指定的值会减少mongod或mongos的时间,并且LDAP服务器可能不同步,同时增加LDAP服务器上的负载。(不建议修改)
storage Options:
storage: dbPath: <string> indexBuildRetry: <boolean> repairPath: <string> journal: enabled: <boolean> commitIntervalMs: <num> directoryPerDB: <boolean> syncPeriodSecs: <int> engine: <string> mmapv1: preallocDataFiles: <boolean> nsSize: <int> quota: enforced: <boolean> maxFilesPerDB: <int> smallFiles: <boolean> journal: debugFlags: <int> commitIntervalMs: <num> wiredTiger: engineConfig: cacheSizeGB: <number> journalCompressor: <string> directoryForIndexes: <boolean> collectionConfig: blockCompressor: <string> indexConfig: prefixCompression: <boolean> inMemory: engineConfig: inMemorySizeGB: <number>
storage.
dbPath:默认为
storage.dbpath设置仅适用于mongod。Linux包init脚本不希望storage.dbpath从默认值更改。如果使用Linux包并更改storage.dbpath,则必须使用自己的init脚本并禁用内置脚本。/data/db
on Linux。Mongod实例存储其数据的目录。
storage.
indexBuildRetry:Boolean,默认为true。指定Mongod是否在下次启动时重建不完整的索引。这适用于Mongod在索引构建过程中关闭或停止后重新启动的情况。在这种情况下,mongod总是删除任何不完整的索引,然后在默认情况下尝试重新构建它们。若要阻止mongod重建索引,请将此选项设置为false。
4.0后,不能与replication.replsetname一起使用。不适用于使用内存中存储引擎的Mongod实例。仅适用于mongod.
storage.
repairPath:
仅适用于mmapv1存储引擎。mongodb在--repair操作期间将使用的工作目录。当--repair完成时,storage.repairpath目录为空,dbpath包含修复的文件。仅适用于mongod.
storage.journal.
enabled:Boolean,true(64位),false(32位).启用或禁用耐久性日志,以确保数据文件保持有效和可恢复。此选项仅在指定storage.dbpath设置时适用。默认情况下,Mongod启用日志记录。storage.journal.enabled设置仅适用于mongod。
不适用于使用内存中存储引擎的Mongod实例。从MongoDB 4.0开始,不能为使用wiredtiger存储引擎的副本集成员指定--nojournal选项或storage.journal.enabled:false。
storage.journal.
commitIntervalMs:默认为100或30。
mongod进程允许日志操作之间的最长时间(毫秒)。值的范围为1到500毫秒。较低的值会增加轴颈的耐久性,但会牺牲磁盘性能。默认的日志提交间隔为100毫秒。在mmapv1上,如果日志位于与数据文件不同的块设备(例如物理卷、RAID设备或LVM卷)上,则默认日志提交间隔为30毫秒。此外,在mmapv1上,当j:true的写入操作挂起时,mongod将committenervalms减少到设置值的三分之一。在wiredtiger上,默认的日志提交间隔是100毫秒。此外,使用j:true写入将导致日志立即同步。storage.journal.committervalms设置仅适用于mongod。不适用于使用内存中存储引擎的Mongod实例。
storage.
directoryPerDB:boolean,默认为false。如果为true,MongoDB使用单独的目录来存储每个数据库的数据。目录位于storage.dbpath目录下,每个子目录名对应于数据库名。具体的如果在有数据后进行更改,则需要一系列复杂的操作,可再查看官方文档。
storage.
syncPeriodSecs:MongoDB通过fsync操作将数据刷新到数据文件之前可以经过的时间量。在生产环境中官方不建议对其进行修改。
storage.
engine:默认为wiredTiger。在4.0后只有两种引擎。[wiredTiger,inMemory].如果尝试使用包含存储引擎生成的数据文件(不是由storage.engine指定的数据文件)的storage.dbpath启动mongod,mongod将拒绝启动。
2.6 storage.wiredTiger Options
storage: wiredTiger: engineConfig: cacheSizeGB: <number> journalCompressor: <string> directoryForIndexes: <boolean> collectionConfig: blockCompressor: <string> indexConfig: prefixCompression: <boolean>
storage.wiredTiger.engineConfig.
cacheSizeGB:定义wiredtiger将用于所有数据的内部缓存的最大大小。从MongoDB 3.4开始,storage.wiredtiger.engineconfig.cachesizegb值可以在0.25 GB到10000 GB之间,并且可以是浮点值。
从MongoDB 3.4开始,默认wiredtiger内部缓存大小为以下两者中的较大值:50%(RAM-1 GB),或256兆字节。
例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB的RAM(0.5*(4 GB-1 GB)=1.5GB)。相反,一个RAM总量为1.25GB的系统将向WiredTiger缓存分配256MB,因为这超过了总RAM减去1GB(0.5*(1.25GB-1GB)=128MB<256MB)的一半。
不要将wiredtiger内部缓存大小增加到其默认值以上。对于wiredtiger,mongodb同时使用wiredtiger内部缓存和文件系统缓存。
storage.wiredtiger.engineconfig.cachesizegb限制wiredtiger内部缓存的大小。操作系统将使用文件系统缓存的可用内存,这允许压缩的MongoDB数据文件保留在内存中。此外,操作系统将使用任何空闲RAM来缓冲文件系统块和文件系统缓存。
如果在无法访问系统中所有可用RAM的容器(例如lxc、cgroups、docker等)中运行mongod,则必须将storage.wiredtiger.engineconfig.cachesizegb设置为小于容器中可用RAM数量的值。确切数量取决于容器中运行的其他进程。
storage.wiredTiger.engineConfig.
journalCompressor:[none,snappy,zlib].用于压缩WiredTiger日志数据的压缩类型。
storage.wiredTiger.engineConfig.
directoryForIndexes:boolean,false.
当storage.wiredtiger.engineconfig.directoryforindexes为true时,mongod将索引和集合存储在数据(即storage.dbpath)目录下的单独子目录中。具体来说,mongod将索引存储在名为index的子目录中,将收集数据存储在名为collection的子目录中。通过使用符号链接,可以为索引指定不同的位置。具体来说,当mongod实例不运行时,将index子目录移动到目的地,并在数据目录下创建一个名为index的符号链接到新目的地。
storage.wiredTiger.collectionConfig.
blockCompressor:[none,snappy,zlib].用于压缩收集数据的默认压缩类型。创建集合时,可以基于每个集合重写此项。storage.wiredtiger.collectionconfig.blockcompressor会影响所有创建的集合。如果在现有MongoDB部署上更改storage.wiredtiger.collectionconfig.blockcompressor的值,则所有新集合都将使用指定的压缩程序。现有集合将继续使用创建时指定的压缩器,或当时的默认压缩器。
storage.wiredTiger.indexConfig.
prefixCompression:
启用或禁用索引数据的前缀压缩。为storage.wiredtiger.indexconfig.prefix compression指定true以启用索引数据的前缀压缩,或为false以禁用索引数据的前缀压缩。storage.wiredtiger.indexconfig.prefixcompression设置会影响所有创建的索引。如果在现有MongoDB部署上更改storage.wiredtiger.indexconfig.prefix compression的值,则所有新索引都将使用前缀压缩。现有索引不受影响。
operationProfiling Options:
operationProfiling: mode: <string> slowOpThresholdMs: <int> slowOpSampleRate: <double>
operationProfiling.
mode:[off,slowOp,all],默认为off。指定应分析哪些操作。在生产环境中启用此参数需要考虑的更多,需要考虑性能降低,安全性等问题。
off:探查器已关闭,不收集任何数据。这是默认的探查器级别。
slowOp:探查器为耗时超过slowms值的操作收集数据。
all:探查器收集所有操作的数据。
operationProfiling.
slowOpThresholdMs:默认为100.慢操作时间阈值(毫秒)。运行时间超过此阈值的操作被认为是缓慢的。
当loglevel设置为0时,mongodb以slowopsamplerate确定的速率将慢速操作记录到诊断日志中。从MongoDB 4.0.6开始,副本集的第二个部分记录所有oplog条目消息,这些消息的应用时间超过慢操作阈值,而不管采样率如何。在较高的日志级别设置下,所有操作都会显示在诊断日志中,而不管它们的延迟如何,但有以下例外:二级记录缓慢的oplog条目消息。第二类只记录较慢的oplog条目;增加loglevel不会记录所有oplog条目。
在4.0版中进行了更改:slowopthresholdms设置可用于mongod和mongos。
对于Mongod实例,该设置会同时影响诊断日志和探查器(如果启用)。
对于Mongos实例,该设置只影响诊断日志,而不影响探查器,因为在Mongos上无法进行分析。
operationProfiling.
slowOpSampleRate:
应分析或记录的慢速操作的部分。operationProfiling.slowopsampleRate接受介于0和1之间(含0和1)的值。operationProfiling.slowopsampleRate不影响副本集的次要成员记录缓慢的oplog条目。次要成员记录所有超过慢速操作阈值的oplog条目,而不管operationprofileing.slowopsampleRate如何。
在4.0版中进行了更改:可以为mongod和mongos提供slowopsamplerate设置。
对于Mongod实例,该设置会同时影响诊断日志和探查器(如果启用)。
对于Mongos实例,该设置只影响诊断日志,而不影响探查器,因为在Mongos上无法进行分析。
2.7 replication Options
replication: oplogSizeMB: <int> replSetName: <string> secondaryIndexPrefetch: <string> enableMajorityReadConcern: <boolean>
replication.
oplogSizeMB:
复制操作日志(即oplog)的最大大小(以兆字节为单位)。
从MongoDB 4.0开始,oplog可以超过其配置的大小限制,以避免删除大多数提交点。
默认情况下,mongod进程根据可用的最大空间量创建oplog。对于64位系统,oplog通常是可用磁盘空间的5%。一旦mongod第一次创建了oplog,更改replication.oplogsizemb选项将不会影响oplog的大小。
要更改正在运行的副本集成员的oplog大小,请使用replsetresizepolog管理命令。replsetresizepolog使您能够动态调整oplog的大小,而无需重新启动mongod进程。
replication.oplogsizemb设置仅适用于mongod。
replication.
replSetName:
mongod所属的副本集的名称。副本集中的所有主机必须具有相同的集名称。
如果应用程序连接到多个副本集,则每个副本集都应具有不同的名称。某些驱动程序按副本集名称对副本集连接进行分组。
replication.replsetname设置仅适用于mongod。
从MongoDB 4.0开始:
设置replication.replsetname不能与storage.indexbuildretry一起使用。
对于wiredtiger存储引擎,storage.journal.enabled:false不能与replication.replsetname一起使用。
replication.
enableMajorityReadConcern:boolean,默认为true。对于MongoDB 4.0.3+和3.6.1+,您可以禁用读取问题“多数”,以防止存储缓存压力通过三成员一级二级仲裁器(PSA)架构阻止部署。有关禁用读取问题“多数”的更多信息,请参阅禁用读取问题多数。
一般而言,除非必要,否则应避免禁用“多数”读取问题。但是,如果您有一个具有主辅助仲裁器(PSA)体系结构的三成员副本集或具有三成员PSA碎片的碎片群集,请禁用以防止存储缓存压力阻止部署。
禁用“多数”读取问题将禁用对更改流的支持。
禁用“多数”不会影响多文档事务;即,即使禁用了“多数”读取问题,也可以为多文档事务指定“多数”读取问题。
2.8 sharding Options
sharding: clusterRole: <string> archiveMovedChunks: <boolean>
sharding.
clusterRole:mongod实例在shared集群中的角色。
configsvr:将此实例作为配置服务器启动。默认情况下,实例从端口27019启动。
shardsvr:将此实例作为分片启动。默认情况下,实例从端口27018启动。
设置sharding.clusterRole需要使用replication是运行的mongod实例。要将实例部署为副本集成员,请使用replsetname设置并指定副本集的名称。
sharding.
archiveMovedChunks:Boolean,默认为false。在块迁移期间,分片不会保存从分片迁移的文档。
2.9 snmp Options
snmp: disabled: <boolean> subagent: <boolean> master: <boolean>
snmp.
disabled:
禁用对mongod的SNMP访问。该选项与snmp.subagent和snmp.master不兼容。设置为true以禁用SNMP访问。仅适用于mongod。
snmp.subagent:当snmp.subagent为true时,snmp作为子代理运行。选项与snmp不兼容。禁用设置为true。仅适用于mongod。
snmp.master:当snmp.master为true时,snmp作为master运行。选项与snmp不兼容。禁用设置为true。仅适用于mongod。
2.10 mongos-only Options
replication: localPingThresholdMs: <int> sharding: configDB: <string>
replication.
localPingThresholdMs:mongos用于确定要从客户端传递读取操作的次要副本集成员的ping时间(以毫秒计)。默认值15对应于所有客户机驱动程序中的默认值。
当Mongos收到一个允许二级成员读取的请求时,Mongos将:查找ping时间最低的集合成员。构造一个副本集成员列表,该列表位于距该集最近的合适成员15毫秒的ping时间内。
如果为replication.localpingthresholdms选项指定一个值,则mongos将构造在此值允许的延迟内的副本成员列表。与replication.localpingThresholdms设置相比,从该列表中随机选择要读取的成员。,成员使用的ping时间是最近ping时间的移动平均值,最多每10秒计算一次。因此,一些查询可能会达到高于阈值的成员,直到Mongos重新计算平均值。
sharding.configDB:
分片群集的配置服务器。
从MongoDB3.2开始,可以将分片集群的配置服务器部署为副本集。副本集配置服务器必须运行wiredtiger存储引擎。MongoDB 3.2不赞成为配置服务器使用三个镜像Mongod实例。
sharding:
configDB: <configReplSetName>/cfg1.example.net:27019, cfg2.example.net:27019,...
指定配置服务器副本集的名称,以及至少一个配置服务器副本集成员的主机名和端口。