MongoDB作为NoSql数据库中最关系型的,是解决传统关系型数据库在业务不断复杂,数据量逐渐变大的大数据解决方案之一。

本文主要以官网为参考主题,介绍在搭建生产环境时,可能有用的配置,接下来的一段时间可能会频繁更改,一遍阅读官网,一遍记录。

写在前面:Mongod(分片存储数据),Mongos(路由处理)

参考:https://docs.mongodb.com/manual/reference/configuration-options/#processmanagement-options

1.配置文件配置之前的准备知识

配置文件的格式以YAML的的形式为基础,在此模式下,不可使用Tab,只能使用空格。

配置文件的作用是为了代替在进入MongoDB后使用命令行对环境配置,官方有这种配置与命令想对应的匹配文档。

mongod --config /etc/mongod.confmongos --config /etc/mongos.confmongod -f /etc/mongod.confmongos -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.6certificateSelector: <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-Hostnamemongo --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.6mode: <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:默认为/data/db on Linux。Mongod实例存储其数据的目录。storage.dbpath设置仅适用于mongod。Linux包init脚本不希望storage.dbpath从默认值更改。如果使用Linux包并更改storage.dbpath,则必须使用自己的init脚本并禁用内置脚本。

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,...

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

转载于:https://www.cnblogs.com/Junpb/p/10844895.html

MongoDB认识与生产环境配置相关推荐

  1. windows10系统下MongoDB的安装及环境配置

    windows10系统下MongoDB的安装及环境配置: MongoDB的安装 下载地址: https://www.mongodb.com/download-center (这是windows10环境 ...

  2. vue3.0生产环境和正式环境配置_vue开发环境和生产环境配置

    开发环境配置 一般情况下开发环境是会跨域的,所以我们只需要在跨域的位置配置即可.进入config/index.js,在proxyTable对象里面添加代码,如下: '/api': { target: ...

  3. Vue.config.js开发环境与生产环境配置

    Vue.config.js开发环境与生产环境配置 首先在项目根目录创建 .env.development 开发环境 .env.production 生产环境 VUE_APP_SERVICE_URL V ...

  4. React多页面应用5(webpack生产环境配置,包括压缩js代码,图片转码等)

    本教程总共7篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React多页面应用1(webpack开发环境搭建,包括Babel.热更新等) ----2017 ...

  5. Vue——10 - webpack打包保姆级教程01——打包js、json、css、less、html、背景图片以及图片、字体(Font)文件,devsever,生产环境配置以及css的兼容写法

    目录 一.webpack打包JS文件 1.新建入口文件index.js和mathUtils.js,index.js是依赖于mathUtils.js 2.然后使用webpack命令打包js文件 二.打包 ...

  6. 【五】MongoDB管理之生产环境说明

    下面详细说明影响mongodb的系统配置,尤其在生产环境上. 1.生产环境推荐的平台 Amazon Linux Debian 7.1 Red Hat / CentOS 6.2+ SLES 11+ Ub ...

  7. JBOSS优化--比较有用的生产环境配置

    转自:http://wangtong40.iteye.com/blog/737235 Java OPTS设置 在Java的Jvm分为主要为两大块:一个是heap和 nheap Heap包括三个区域. ...

  8. 开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置

    本人node服务端新人一枚,网上找了不少资料,看了很多别人的配置信息,感觉都不是很合适,看的多了自己也明白配置的具体思路跟实现方式了,以下为我的实现方式.通过package.json里面的script ...

  9. Flink 生产环境配置建议

    flink-conf.yaml相关 ------------------------------------------------------------------------- checkpoi ...

最新文章

  1. C#获取文件的MD5码
  2. jsp中通过多种方式实现面包屑导航
  3. 使用Eclipse trace Application的启动
  4. mysql三高讲解(一):1.1 客户端怎样连接mysql数据库
  5. OCR文字识别技术总结(四)
  6. Android编程 移动应用开发 经典习题案例 (附案例 注意点)
  7. word自动生成目录的最后一个大标题页码前没有点点点连接线解决方案
  8. 【Games101】Lecture05 光栅化 笔记
  9. 吃饭,睡觉,打豆豆任务二
  10. 热电阻温度计 电阻温度探测器 直接浸入式清洁传感器 精密RTD 美国Burns 胶囊式铂电阻温度检测器 迷你RTD整体热电偶套管 气温传感器 测温传感器 温度传感器 温度传感器生产厂家 温度变送器
  11. 临床数据共享能带来什么好处?
  12. 使用3D Max里面自带的门,怎么设置动画并预览
  13. 项目经理与产品经理的区别
  14. 街霸 隆(Ryu)升龙拳(Syoryuken)动画(四)制作过程中几个版本动画比较一下
  15. MySQL OCP报考流程
  16. 计算机二级抽题规律,计算机二级考试抽题规律计算机二级考试题及答案.doc
  17. Python基础+数据科学入门(三)组合数据类型
  18. Python中os.listdir() 函数用法及实例
  19. 一刀工具箱 - 网站权重查询工具
  20. 副驾驶的意义_副驾驶对女人的意义是什么样的?

热门文章

  1. (跟我一起来学区块链(1.2))之 区块链是什么?
  2. CRMEB微信公众号安装说明
  3. 绘画app android,PicsArt美易绘画
  4. Struts2--控制标签(s:if、s:elseif、s:else、s:iterator)
  5. UG NX 12 NX 创意塑形
  6. 百人计划 图形2.1 色彩空间
  7. 租房分期产品用户风险识别与分析
  8. html5中底部对齐怎么写,css设置元素底部垂直对齐
  9. rust提示游戏安全违规_在Windows 10中检测到游戏安全违规
  10. 企业微信左侧显示“小图标,大文字”