mongod.conf
$ vi /etc/mongod.conf
手冊
https://docs.mongodb.com/manual/reference/configuration-options
https://docs.mongodb.com/manual/reference/parameters/
進(jìn)程管理
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
名稱 |
說明 |
fork |
運(yùn)行在后臺(tái) |
pidFilePath |
PID文件路徑 |
網(wǎng)絡(luò)
net:
port: 27017
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
名稱 |
說明 |
port |
端口 |
bindIp |
綁定外網(wǎng)op 多個(gè)用逗號(hào)分隔 |
maxIncomingConnections |
進(jìn)程允許的最大連接數(shù) 默認(rèn)值為65536 |
wireObjectCheck |
當(dāng)客戶端寫入數(shù)據(jù)時(shí) 檢測數(shù)據(jù)的有效性(BSON) 默認(rèn)值為true |
ipv6 |
默認(rèn)值為false |
存儲(chǔ)
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
名稱 |
說明 |
dbPath |
mongod進(jìn)程存儲(chǔ)數(shù)據(jù)目錄匆背,此配置僅對(duì)mongod進(jìn)程有效 |
indexBuildRetry |
當(dāng)構(gòu)建索引時(shí)mongod意外關(guān)閉俩檬,那么再次啟動(dòng)是否重新構(gòu)建索引来破;索引構(gòu)建失敗压储,mongod重啟后將會(huì)刪除尚未完成的索引,但是否重建由此參數(shù)決定苍息。默認(rèn)值為true缩幸。 |
repairPath |
配合--repair啟動(dòng)命令參數(shù),在repair期間使用此目錄存儲(chǔ)臨時(shí)數(shù)據(jù)竞思,repair結(jié)束后此目錄下數(shù)據(jù)將被刪除表谊,此配置僅對(duì)mongod進(jìn)程有效。不建議在配置文件中配置盖喷,而是使用mongod啟動(dòng)命令指定爆办。 |
engine |
存儲(chǔ)引擎類型,mongodb 3.0之后支持“mmapv1”课梳、“wiredTiger”兩種引擎距辆,默認(rèn)值為“mmapv1”余佃;官方宣稱wiredTiger引擎更加優(yōu)秀。 |
journal |
是否開啟journal日志持久存儲(chǔ)跨算,journal日志用來數(shù)據(jù)恢復(fù)爆土,是mongod最基礎(chǔ)的特性,通常用于故障恢復(fù)诸蚕。64位系統(tǒng)默認(rèn)為true步势,32位默認(rèn)為false,建議開啟背犯,僅對(duì)mongod進(jìn)程有效坏瘩。 |
directoryPerDB |
是否將不同DB的數(shù)據(jù)存儲(chǔ)在不同的目錄中 默認(rèn)值為false |
syncPeriodSecs |
mongod使用fsync操作將數(shù)據(jù)flush到磁盤的時(shí)間間隔,默認(rèn)值為60(單位:秒)強(qiáng)烈建議不要修改此值 mongod將變更的數(shù)據(jù)寫入journal后再寫入內(nèi)存漠魏,并間歇性的將內(nèi)存數(shù)據(jù)flush到磁盤中倔矾,即延遲寫入磁盤,有效提升磁盤效率 |
mmapv1 |
僅對(duì)MMAPV1引擎 |
quota: |
enforced:false |
配額管理蛉幸,是否限制每個(gè)DB所能持有的最大文件數(shù)量 默認(rèn)值為false |
maxFilesPerDB:8 |
如果enforce開啟,每個(gè)DB所持有的存儲(chǔ)文件不會(huì)超過此閥值 |
smallFiles: false |
是否使用小文件存儲(chǔ)數(shù)據(jù)丛晦;如果此值為true mongod將會(huì)限定每個(gè)數(shù)據(jù)文件的大小為512M(默認(rèn)最大為2G)奕纫,journal降低到128M(默認(rèn)為1G)。如果DB的數(shù)據(jù)量較大烫沙,將會(huì)導(dǎo)致每個(gè)DB創(chuàng)建大量的小文件匹层,這對(duì)性能有一定的影響。在production環(huán)境下锌蓄,不建議修改此值升筏,在測試時(shí)可以設(shè)置為true,節(jié)約磁盤瘸爽。 |
journal: |
commitIntervalMs: 100 |
mongod進(jìn)程提交journal日志的時(shí)間間隔您访,即fsync的間隔。單位:毫秒 |
nsSize: |
每個(gè)database的namespace文件的大小剪决,默認(rèn)為16灵汪,單位:M;最大值可以設(shè)置為2048柑潦,即dbpath下“.ns”后綴文件的大小享言。16M基本上可以保存24000條命名條目,新建一個(gè)collection或者index信息渗鬼,即會(huì)增加一個(gè)namespace條目览露;如果你的database下需要?jiǎng)?chuàng)建大量的collection(比如數(shù)據(jù)分析),則可以適度調(diào)大此值譬胎。 |
wiredTiger |
如下配置僅對(duì)wiredTiger引擎生效(3.0以上版本) |
engineConfig: |
cacheSizeGB: 8 |
wiredTiger緩存工作集(working set)數(shù)據(jù)的內(nèi)存大小差牛,單位:GB命锄,此值決定了wiredTiger與mmapv1的內(nèi)存模型不同,它可以限制mongod對(duì)內(nèi)存的使用量多糠,而mmapv1則不能(依賴于系統(tǒng)級(jí)的mmap)累舷。默認(rèn)情況下,cacheSizeGB的值為假定當(dāng)前節(jié)點(diǎn)只部署一個(gè)mongod實(shí)例夹孔,此值的大小為物理內(nèi)存的一半被盈;如果當(dāng)前節(jié)點(diǎn)部署了多個(gè)mongod進(jìn)程,那么需要合理配置此值搭伤。如果mongod部署在虛擬容器中(比如只怎,lxc,cgroups怜俐,Docker)等身堡,它將不能使用整個(gè)系統(tǒng)的物理內(nèi)存,則需要適當(dāng)調(diào)整此值拍鲤。默認(rèn)值為物理內(nèi)存的一半贴谎。 |
journalCompressor: snappy |
journal日志的壓縮算法,可選值為“none”季稳、“snappy”擅这、“zlib”。 |
directoryForIndexes: false |
是否將索引和collections數(shù)據(jù)分別存儲(chǔ)在dbPath單獨(dú)的目錄中景鼠。即index數(shù)據(jù)保存“index”子目錄仲翎,collections數(shù)據(jù)保存在“collection”子目錄。默認(rèn)值為false铛漓,僅對(duì)mongod有效溯香。 |
collectionConfig: |
blockCompressor: snappy |
collection數(shù)據(jù)壓縮算法,可選值“none”浓恶、“snappy”玫坛、“zlib”。開發(fā)者在創(chuàng)建collection時(shí)可以指定值包晰,以覆蓋此配置項(xiàng)昂秃。如果mongod中已經(jīng)存在數(shù)據(jù),修改此值不會(huì)帶來問題杜窄,舊數(shù)據(jù)仍然使用原來的算法解壓肠骆,新數(shù)據(jù)文件將會(huì)采用新的解壓縮算法。 |
indexConfig: |
prefixCompression: true |
是否對(duì)索引數(shù)據(jù)使用“前綴壓縮”(prefix compression塞耕,一種算法)蚀腿。前綴壓縮,對(duì)那些經(jīng)過排序的值存儲(chǔ),有很大幫助莉钙,可以有效的減少索引數(shù)據(jù)的內(nèi)存使用量廓脆。默認(rèn)值為true。 |
性能分析器
operationProfiling:
名稱 |
說明 |
slowOpThresholdMs: 100 |
數(shù)據(jù)庫profiler判定一個(gè)操作是“慢查詢”的時(shí)間閥值磁玉,單位毫秒停忿;mongod將會(huì)把慢查詢記錄到日志中,即使profiler被關(guān)閉蚊伞。當(dāng)profiler開啟時(shí)席赂,慢查詢記錄還會(huì)被寫入“system.profile”這個(gè)系統(tǒng)級(jí)的collection中。請參看mongod profiler相關(guān)文檔时迫。默認(rèn)值為100颅停,此值只對(duì)mongod進(jìn)程有效。 |
mode: off |
數(shù)據(jù)庫profiler級(jí)別掠拳,操作的性能信息將會(huì)被寫入日志文件中癞揉,可選值: |
1)off:關(guān)閉profiling |
2)slowOp:on,只包含慢操作日志 |
3)all:on溺欧,記錄所有操作 |
數(shù)據(jù)庫profiling會(huì)影響性能喊熟,建議只在性能調(diào)試階段開啟。此參數(shù)僅對(duì)mongod有效姐刁。 |
主從復(fù)制
replication:
名稱 |
說明 |
oplogSizeMB: 10240 |
replication操作日志的最大尺寸芥牌,單位:MB。mongod進(jìn)程根據(jù)磁盤最大可用空間來創(chuàng)建oplog龙填,比如64位系統(tǒng)胳泉,oplog為磁盤可用空間的5%拐叉,一旦mongod創(chuàng)建了oplog文件岩遗,此后再次修改oplogSizeMB將不會(huì)生效。此值不要設(shè)置的太小凤瘦, 應(yīng)該足以保存24小時(shí)的操作日志宿礁,以保證secondary有充足的維護(hù)時(shí)間;如果太小蔬芥,secondary將不能通過oplog來同步數(shù)據(jù)梆靖,只能全量同步。 |
enableMajorityReadConcern: false |
是否開啟readConcern的級(jí)別為“majority”笔诵,默認(rèn)為false返吻;只有開啟此選項(xiàng),才能在read操作中使用“majority”乎婿。(3.2+版本) |
replSetName: <無默認(rèn)值> |
“復(fù)制集”的名稱测僵,復(fù)制集中的所有mongd實(shí)例都必須有相同的名字,sharding分布式下,不同的sharding應(yīng)該使用不同的replSetName |
secondaryIndexPrefetch: all |
只對(duì)mmapv1存儲(chǔ)引擎有效捍靠。復(fù)制集中的secondary沐旨,從oplog中運(yùn)用變更操作之前,將會(huì)先把索引加載到內(nèi)存中榨婆,默認(rèn)情況下磁携,secondaries首先將操作相關(guān)的索引加載到內(nèi)存,然后再根據(jù)oplog應(yīng)用操作良风∫昶可選值: |
1)none:secondaries不將索引數(shù)據(jù)加載到內(nèi)容 |
2)all:sencondaries將此操作有關(guān)的索引數(shù)據(jù)加載到內(nèi)存 |
3)_id_only:只加載_id索引 |
默認(rèn)值為:all,此配置僅對(duì)mongod有效拖吼。 |
localPingThresholdMs: 15 |
ping時(shí)間鳞上,單位:毫秒,mongos用來判定將客戶端read請求發(fā)給哪個(gè)secondary吊档。僅對(duì)mongos有效篙议。默認(rèn)值為15,和客戶端driver中的默認(rèn)值一樣怠硼。當(dāng)mongos接收到客戶端read請求鬼贱,它將: |
1、找出復(fù)制集中ping值最小的member香璃。 |
2这难、將延遲值被此值允許的members,構(gòu)建一個(gè)列表 |
3葡秒、從列表中隨機(jī)選擇一個(gè)member姻乓。 |
ping值是動(dòng)態(tài)值,每10秒計(jì)算一次眯牧。mongos將客戶端請求轉(zhuǎn)發(fā)給延遲較刑Q摇(與此值相比)的某個(gè)secondary節(jié)點(diǎn)。 |
sharding架構(gòu)
sharding:
名稱 |
說明 |
clusterRole: <無默認(rèn)值> |
在sharding集群中学少,此mongod實(shí)例的角色剪个,可選值: |
1、configsvr:此實(shí)例為config server版确,此實(shí)例默認(rèn)偵聽27019端口 |
2扣囊、shardsvr:此實(shí)例為shard(分片),偵聽27018端口 |
此配置僅對(duì)mongod有效绒疗。通常config server和sharding server需要使用各自的配置文件侵歇。 |
archiveMovedChunks: true |
當(dāng)chunks因?yàn)椤柏?fù)載平衡”而遷移到其他節(jié)點(diǎn)時(shí),mongod是否將這些chunks歸檔吓蘑,并保存在dbPath下“moveChunk”目錄下惕虑,mongod不會(huì)刪除moveChunk下的文件。默認(rèn)為true。 |
autoSplit: true |
是否開啟sharded collections的自動(dòng)分裂枷遂,僅對(duì)mongos有效樱衷。如果所有的mongos都設(shè)定為false,那么collections數(shù)據(jù)增長但不能分裂成新的chunks酒唉。因?yàn)榧褐腥魏我粋€(gè)mongos進(jìn)程都可以觸發(fā)split矩桂,所以此值需要在所有mongos行保持一致。僅對(duì)mongos有效痪伦。 |
configDB: <無默認(rèn)值> |
設(shè)定config server的地址列表侄榴,每個(gè)server地址之間以“,”分割,通常sharded集群中指定1或者3個(gè)config server网沾。(生產(chǎn)環(huán)境癞蚕,通常是3個(gè)config server,但1個(gè)也是可以的)辉哥。所有的mongos實(shí)例必須配置一樣桦山,否則可能帶來不必要的問題。 |
chunkSize: 64 |
sharded集群中每個(gè)chunk的大小醋旦,單位:MB恒水,默認(rèn)為64,此值對(duì)于絕大多數(shù)應(yīng)用而言都是比較理想的饲齐。chunkSize太大會(huì)導(dǎo)致分布不均钉凌,太小會(huì)導(dǎo)致分裂成大量的chunk而經(jīng)常移動(dòng). 整個(gè)sharding集群中,此值需要保持一致捂人,集群啟動(dòng)后修改此值將不再生效御雕。 |
系統(tǒng)日志
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
名稱 |
說明 |
verbosity: 0 |
日志級(jí)別,0:默認(rèn)值滥搭,包含“info”信息酸纲,1~5,即大于0的值均會(huì)包含debug信息 |
quiet: true |
"安靜"论熙,此時(shí)mongod/mongos將會(huì)嘗試減少日志的輸出量福青。不建議在production環(huán)境下開啟摄狱,否則將會(huì)導(dǎo)致跟蹤錯(cuò)誤比較困難脓诡。 |
traceAllExceptions: true |
打印異常詳細(xì)信息。 |
path: logs/mongod.log |
日志路徑 |
logAppend: false |
如果為true媒役,當(dāng)mongod/mongos重啟后祝谚,將在現(xiàn)有日志的尾部繼續(xù)添加日志。否則酣衷,將會(huì)備份當(dāng)前日志文件交惯,然后創(chuàng)建一個(gè)新的日志文件;默認(rèn)為false。 |
logRotate: rename |
日志“回轉(zhuǎn)”席爽,防止一個(gè)日志文件特別大意荤,則使用logRotate指令將文件“回轉(zhuǎn)”,可選值: |
1)rename:重命名日志文件只锻,默認(rèn)值玖像。 |
2)reopen:使用linux日志rotate特性,關(guān)閉并重新打開此日志文件齐饮,可以避免日志丟失捐寥,但是logAppend必須為true。 |
destination: file |
日志輸出目的地祖驱,可以指定為“ file”或者“syslog”握恳,表述輸出到日志文件,如果不指定捺僻,則會(huì)輸出到標(biāo)準(zhǔn)輸出中(standard output) |
與安全有關(guān)的配置
security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /srv/mongodb/keyfile
javascriptEnabled: true
setParameter:
enableLocalhostAuthBypass: true
authenticationMechanisms: SCRAM-SHA-1
名稱 |
說明 |
authorization |
disabled或者enabled乡洼,僅對(duì)mongod有效;表示是否開啟用戶訪問控制(Access Control)匕坯,即客戶端可以通過用戶名和密碼認(rèn)證的方式訪問系統(tǒng)的數(shù)據(jù)就珠,默認(rèn)為“disabled”,即客戶端不需要密碼即可訪問數(shù)據(jù)庫數(shù)據(jù)醒颖。(限定客戶端與mongod妻怎、mongos的認(rèn)證) |
clusterAuthMode |
集群中members之間的認(rèn)證模式,可選值為“keyFile”泞歉、“sendKeyFile”逼侦、“sendX509”、“x509”腰耙,對(duì)mongod/mongos有效榛丢;默認(rèn)值為“keyFile”,mongodb官方推薦使用x509挺庞,不過我個(gè)人覺得還是keyFile比較易于學(xué)習(xí)和使用晰赞。不過3.0版本中,mongodb增加了對(duì)TLS/SSL的支持选侨,如果可以的話掖鱼,建議使用SSL相關(guān)的配置來認(rèn)證集群的member,此文將不再介紹援制。(限定集群中members之間的認(rèn)證) |
keyFile |
當(dāng)clusterAuthMode為“keyFile”時(shí)戏挡,此參數(shù)指定keyfile的位置,mongodb需要有訪問此文件的權(quán)限晨仑。 |
javascriptEnabled |
true或者false褐墅,默認(rèn)為true拆檬,僅對(duì)mongod有效;表示是否關(guān)閉server端的javascript功能妥凳,就是是否允許mongod上執(zhí)行javascript腳本竟贯,如果為false,那么mapreduce逝钥、group命令等將無法使用澄耍,因?yàn)樗鼈冃枰趍ongod上執(zhí)行javascript腳本方法。如果你的應(yīng)用中沒有mapreduce等操作的需求晌缘,為了安全起見齐莲,可以關(guān)閉javascript。 |
setParameter |
允許指定一些的Server端參數(shù)磷箕,這些參數(shù)不依賴于存儲(chǔ)引擎和交互機(jī)制选酗,只是微調(diào)系統(tǒng)的運(yùn)行狀態(tài),比如“認(rèn)證機(jī)制”岳枷、“線程池參數(shù)”等芒填。參見【parameter】 |
enableLocalhostAuthBypass |
true或者false,默認(rèn)為true空繁,對(duì)mongod/mongos有效殿衰;表示是否開啟“l(fā)ocalhost exception”,對(duì)于sharding cluster而言盛泡,我們傾向于在mongos上開啟闷祥,在shard節(jié)點(diǎn)的mongod上關(guān)閉。 |
authenticationMechanisms |
認(rèn)證機(jī)制傲诵,可選值為“SCRAM-SHA-1”凯砍、“MONGODB-CR”、“PLAN”等拴竹,建議為“SCRAM-SHA-1”悟衩,對(duì)mongod/mongos有效;一旦選定了認(rèn)證機(jī)制栓拜,客戶端訪問databases時(shí)需要與其匹配才能有效座泳。 |
性能有關(guān)的參數(shù)
setParameter:
connPoolMaxShardedConnsPerHost: 200
connPoolMaxConnsPerHost: 200
notablescan: 0
名稱 |
說明 |
connPoolMaxShardedConnsPerHost |
默認(rèn)值為200,對(duì)mongod/mongos有效幕与;表示當(dāng)前mongos或者shard與集群中其他shards鏈接的鏈接池的最大容量挑势,此值我們通常不會(huì)調(diào)整。連接池的容量不會(huì)阻止創(chuàng)建新的鏈接纽门,但是從連接池中獲取鏈接的個(gè)數(shù)不會(huì)超過此值薛耻。維護(hù)連接池需要一定的開支营罢,保持一個(gè)鏈接也需要占用一定的系統(tǒng)資源赏陵。 |
connPoolMaxConnsPerHost |
默認(rèn)值為200饼齿,對(duì)mongod/mongos有效;同上蝙搔,表示mongos或者mongod與其他mongod實(shí)例之間的連接池的容量缕溉,根據(jù)host限定。 |
配置樣例
systemLog:
quiet: false
path: /data/mongodb/logs/mongod.log
logAppend: false
destination: file
processManagement:
fork: true
pidFilePath: /data/mongodb/mongod.pid
net:
bindIp: 127.0.0.1
port: 27017
maxIncomingConnections: 65536
wireObjectCheck: true
ipv6: false
storage:
dbPath: /data/mongodb/db
indexBuildRetry: true
journal:
enabled: true
directoryPerDB: false
engine: mmapv1
syncPeriodSecs: 60
mmapv1:
quota:
enforced: false
maxFilesPerDB: 8
smallFiles: true
journal:
commitIntervalMs: 100
wiredTiger:
engineConfig:
cacheSizeGB: 8
journalCompressor: snappy
directoryForIndexes: false
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
operationProfiling:
slowOpThresholdMs: 100
mode: off
如果你的架構(gòu)模式為replication Set吃型,那么還需要在所有的“復(fù)制集”members上增加如下配置:
replication:
oplogSizeMB: 10240
replSetName: rs0
secondaryIndexPrefetch: all
如果為sharding Cluster架構(gòu)证鸥,則需要在shard節(jié)點(diǎn)增加如下配置:
sharding:
clusterRole: shardsvr
archiveMovedChunks: true
systemLog:
quiet: false
path: /data/mongodb/logs/mongod.log
logAppend: false
destination: file
processManagement:
fork: true
pidFilePath: /data/mongodb/mongod.pid
net:
bindIp: 127.0.0.1
port: 37017
maxIncomingConnections: 65536
wireObjectCheck: true
ipv6: false
replication:
localPingThresholdMs: 15
sharding:
autoSplit: true
configDB: m1.com:27018,m2.com:27018,m3.com:27018
chunkSize: 64
mongos實(shí)例不需要存儲(chǔ)實(shí)際的數(shù)據(jù),對(duì)內(nèi)存有一定的消耗勤晚,在sharding架構(gòu)模式下使用枉层;mongos需接收向客戶端請求(后端的sharded和replication set則不需要讓客戶端知道),它可以將客戶端請求轉(zhuǎn)發(fā)到一個(gè)分片集群上(分片集群基于復(fù)制集)延遲相對(duì)較小的secondary上赐写,同時(shí)還負(fù)責(zé)chunk的分裂和遷移工作鸟蜡。
repair修復(fù)
“修復(fù)”數(shù)據(jù)庫,當(dāng)mongodb運(yùn)行一段時(shí)間之后挺邀,特別是經(jīng)過大量刪除揉忘、update操作之后,我們可以使用repair指令對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行“repair”端铛,它將整理泣矛、壓縮底層數(shù)據(jù)存儲(chǔ)文件,重用磁盤空間禾蚕,相當(dāng)于數(shù)據(jù)重新整理了一遍您朽,對(duì)數(shù)據(jù)優(yōu)化有一定的作用。
$ ./mongod --dbpath=/data/mongodb/db --repair
mongodump與mongorestore
我們通常會(huì)使用到mongodb數(shù)據(jù)的備份功能换淆,或者將一個(gè)備份導(dǎo)入到一個(gè)新的mongod實(shí)例中(數(shù)據(jù)冷處理)虚倒,那么就需要借助這兩個(gè)指令。
>./mongodump --host m1.com --port 27017 -u root -p pass --out /data/mongodb/backup/dump_2015_10_10
./mongorestore --db mydatabase /data/mongodb/backup/dump_2015_10_10
mongoimport和mongoexport
mongoexport將數(shù)據(jù)導(dǎo)出為JSON或者CSV格式产舞,以便其他應(yīng)用程序解析魂奥。
mongo shell
1)help:列出所有的function
2)show dbs:展示當(dāng)前實(shí)例中所有的databases。
3)use <dbname>:切換到指定的db易猫,接下來的操作將會(huì)在此db中耻煤。
4)show collections:展示出當(dāng)前db中所有的collections。
5)show users:展示當(dāng)前db中已經(jīng)添加的所有用戶准颓。
6)show roles:展示當(dāng)前db中所有內(nèi)置的或者自定義的用戶角色哈蝇。
7)show profile:這涉及到profile相關(guān)的配置,默認(rèn)情況下展示出最近5個(gè)操作耗時(shí)超過1秒的操作攘已,通常用于跟蹤慢查詢炮赦。
8)db.help():展示出可以在db上進(jìn)行的操作function。
9)db.<collection>.help():展示出可以在colleciton上進(jìn)行的操作样勃。
我的博客