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

指定配置服務器副本集的名稱,以及至少一個配置服務器副本集成員的主機名和端口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM