MongoDB认识与生产环境配置

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:默认为/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,...

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

posted on 2019-05-10 17:58  Junpb  阅读(1972)  评论(0编辑  收藏  举报

导航