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,...
指定配置服務器副本集的名稱,以及至少一個配置服務器副本集成員的主機名和端口。