# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog: #系統日誌
destination: file #日誌輸出目的地,可以指定爲 “file” 或者“syslog”,表述輸出到日誌文件,如果不指定,則會輸出到標準輸出中(standard output)
logAppend: true #爲 true,當 mongod/mongos 重啓後,將在現有日誌的尾部繼續添加日誌。否則,將會備份當前日誌文件,然後創建一個新的日誌文件
path: /var/log/mongodb/mongod.log #日誌路徑
# Where and how to store data.
storage: #存儲
dbPath: /var/lib/mongo # 設置數據文件的存放目錄,
journal: #是否開啓journal日誌持久存儲,用來數據恢復
enabled: true #64系統默認爲true,32位系統默認爲false
# engine: #存儲引擎類型
# mmapv1: #僅對MMAPV1引擎
# wiredTiger: #僅對wiredTiger引擎生效
# how the process runs
processManagement: #進程管理
fork: true # fork and run in background #是否在後臺運行
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile #pid文件路徑
timeZoneInfo: /usr/share/zoneinfo #時區信息文件路徑
# network interfaces
net: #網絡
port: 27017 #監聽的端口
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. #監聽的ip地址
#security: #安全配置
#operationProfiling: #性能分析器
#replication: #主從複製
#sharding: #sharding架構
## Enterprise-Only Options
#auditLog: #審計日誌
#snmp: #簡單網絡管理
擴展:
進程管理——processManagement
名稱 |
說明 |
fork |
運行在後臺 |
pidFilePath |
PID文件路徑 |
網絡——net
名稱 |
說明 |
port |
監聽端口 |
bindIP |
監聽的ip地址 |
maxIncomingConnections |
進程允許的最大連接數,默認值爲65535 |
wireObjectCheck |
當客戶端寫入數據是,檢測數據的有效性 |
ipv6 |
ipv6地址,默認爲false |
存儲——storage
名稱 |
說明 |
dbPath |
mongod 進程存儲數據目錄,此配置僅對 mongod 進程有效 |
indexBuildRetry |
當構建索引時 mongod 意外關閉,那麼再次啓動是否重新構建索引;索引構建失敗,mongod 重啓後將會刪除尚未完成的索引,但是否重建由此參數決定。默認值爲 true。 |
repairPath |
配合 --repair 啓動命令參數,在 repair 期間使用此目錄存儲臨時數據,repair 結束後此目錄下數據將被刪除,此配置僅對 mongod 進程有效。不建議在配置文件中配置,而是使用 mongod 啓動命令指定。 |
engine |
存儲引擎類型,mongodb 3.0 之後支持 “mmapv1”、“wiredTiger” 兩種引擎,默認值爲“mmapv1”;官方宣稱 wiredTiger 引擎更加優秀。 |
journal |
是否開啓 journal 日誌持久存儲,journal 日誌用來數據恢復,是 mongod 最基礎的特性,通常用於故障恢復。64 位系統默認爲 true,32 位默認爲 false,建議開啓,僅對 mongod 進程有效。 |
directoryPerDB |
是否將不同 DB 的數據存儲在不同的目錄中 默認值爲 false |
syncPeriodSecs mongod |
使用 fsync 操作將數據 flush 到磁盤的時間間隔,默認值爲 60(單位:秒)強烈建議不要修改此值 mongod 將變更的數據寫入 journal 後再寫入內存,並間歇性的將內存數據 flush 到磁盤中,即延遲寫入磁盤,有效提升磁盤效率 |
mmapv1 |
僅對 MMAPV1 引擎 |
|
quota |
磁盤配額 |
enforced:false |
配額管理,是否限制每個 DB 所能持有的最大文件數量 默認值爲 false |
maxFilesPerDB:8 |
如果 enforce 開啓,每個 DB 所持有的存儲文件不會超過此閥值 |
smallFiles: false |
是否使用小文件存儲數據;如果此值爲 true mongod 將會限定每個數據文件的大小爲 512M(默認最大爲 2G),journal 降低到 128M(默認爲 1G)。如果 DB 的數據量較大,將會導致每個 DB 創建大量的小文件,這對性能有一定的影響。在 production 環境下,不建議修改此值,在測試時可以設置爲 true,節約磁盤。 |
journal: |
|
commitIntervalMs: 100 |
mongod 進程提交 journal 日誌的時間間隔,即 fsync 的間隔。單位:毫秒 |
nsSize: |
每個 database 的 namespace 文件的大小,默認爲 16,單位:M;最大值可以設置爲 2048,即 dbpath 下 “.ns” 後綴文件的大小。16M 基本上可以保存 24000 條命名條目,新建一個 collection 或者 index 信息,即會增加一個 namespace 條目 |
wiredTiger |
如下配置僅對 wiredTiger 引擎生效(3.0 以上版本) |
engineConfig: |
引擎配置 |
cacheSizeGB: 8 |
wiredTiger 緩存工作集(working set)數據的內存大小,單位:GB,此值決定了 wiredTiger 與 mmapv1 的內存模型不同,它可以限制 mongod 對內存的使用量,而 mmapv1 則不能(依賴於系統級的 mmap) |
journalCompressor: snappy journal |
日誌的壓縮算法,可選值爲 “none”、“snappy”、“zlib”。 |
directoryForIndexes: false |
是否將索引和 collections 數據分別存儲在 dbPath 單獨的目錄中。即 index 數據保存 “index” 子目錄,collections 數據保存在 “collection” 子目錄。默認值爲 false,僅對 mongod 有效。 |
collectionConfig: |
集合配置 |
blockCompressor: snappy |
collection 數據壓縮算法,可選值 “none”、“snappy”、“zlib”。 |
indexConfig: |
索引配置 |
prefixCompression: true |
是否對索引數據使用 “前綴壓縮”(prefix compression,一種算法)。前綴壓縮,對那些經過排序的值存儲,有很大幫助,可以有效的減少索引數據的內存使用量。默認值爲 true。 |
性能分析器——operationProfiling
名稱 |
說明 |
slowOpThresholdMs: 100 |
數據庫 profiler 判定一個操作是 “慢查詢” 的時間閥值,單位毫秒;mongod 將會把慢查詢記錄到日誌中,即使 profiler 被關閉 |
mode: off |
數據庫 profiler 級別,操作的性能信息將會被寫入日誌文件中 |
|
|
1)off:關閉 profiling |
|
2)slowOp:on,只包含慢操作日誌 |
|
3)all:on,記錄所有操作 |
|
數據庫 profiling 會影響性能,建議只在性能調試階段開啓。此參數僅對 mongod 有效 |
主從複製——replication
名稱 |
說明 |
oplogSizeMB: 10240 |
replication 操作日誌的最大尺寸,單位:MB。mongod 進程根據磁盤最大可用空間來創建 oplog |
enableMajorityReadConcern: false |
是否開啓 readConcern 的級別爲 “majority”,默認爲 false;只有開啓此選項,才能在 read 操作中使用 “majority”。(3.2 + 版本) |
replSetName: <無默認值> |
“複製集” 的名稱,複製集中的所有 mongd 實例都必須有相同的名字,sharding 分佈式下,不同的 sharding 應該使用不同的 replSetName |
secondaryIndexPrefetch: all |
只對 mmapv1 存儲引擎有效。複製集中的 secondary,從 oplog 中運用變更操作之前,將會先把索引加載到內存中,默認情況下,secondaries 首先將操作相關的索引加載到內存,然後再根據 oplog 應用操作。可選值: |
|
1)none:secondaries 不將索引數據加載到內容 |
|
2)all:sencondaries 將此操作有關的索引數據加載到內存 |
|
3)_id_only:只加載_id 索引 |
|
默認值爲:all,此配置僅對 mongod 有效。 |
localPingThresholdMs: 15 |
ping 時間,單位:毫秒,mongos 用來判定將客戶端 read 請求發給哪個 secondary。僅對 mongos 有效。默認值爲 15,和客戶端 driver 中的默認值一樣。當 mongos 接收到客戶端 read 請求,它將: |
|
1、找出複製集中 ping 值最小的 member。 |
|
2、將延遲值被此值允許的 members,構建一個列表 |
|
3、從列表中隨機選擇一個 member。 |
|
ping 值是動態值,每 10 秒計算一次。mongos 將客戶端請求轉發給延遲較小(與此值相比)的某個 secondary 節點。 |
sharding架構——sharding
名稱 |
說明 |
clusterRole: <無默認值> |
在 sharding 集羣中,此 mongod 實例的角色,可選值: |
|
1、configsvr:此實例爲 config server,此實例默認偵聽 27019 端口 |
|
2、shardsvr:此實例爲 shard(分片),偵聽 27018 端口 |
|
此配置僅對 mongod 有效。通常 config server 和 sharding server 需要使用各自的配置文件。 |
archiveMovedChunks: true |
當 chunks 因爲 “負載平衡” 而遷移到其他節點時,mongod 是否將這些 chunks 歸檔,並保存在 dbPath 下 “moveChunk” 目錄下,mongod 不會刪除 moveChunk 下的文件。默認爲 true。 |
autoSplit: true |
是否開啓 sharded collections 的自動分裂,僅對 mongos 有效。如果所有的 mongos 都設定爲 false,那麼 collections 數據增長但不能分裂成新的 chunks。因爲集羣中任何一個 mongos 進程都可以觸發 split,所以此值需要在所有 mongos 行保持一致。僅對 mongos 有效。 |
configDB: <無默認值> |
設定 config server 的地址列表,每個 server 地址之間以 “,” 分割,通常 sharded 集羣中指定 1 或者 3 個 config server。(生產環境,通常是 3 個 config server,但 1 個也是可以的)。所有的 mongos 實例必須配置一樣,否則可能帶來不必要的問題。 |
chunkSize: 64 |
sharded 集羣中每個 chunk 的大小,單位:MB,默認爲 64,此值對於絕大多數應用而言都是比較理想的。chunkSize 太大會導致分佈不均,太小會導致分裂成大量的 chunk 而經常移動. 整個 sharding 集羣中,此值需要保持一致,集羣啓動後修改此值將不再生效。 |
系統日誌——systemLog
名稱 |
說明 |
verbosity: 0 |
日誌級別,0:默認值,包含 “info” 信息,1~5,即大於 0 的值均會包含 debug 信息 |
quiet: true |
"安靜輸出",此時 mongod/mongos 將會嘗試減少日誌的輸出量。不建議在 production 環境下開啓,否則將會導致跟蹤錯誤比較困難。 |
traceAllExceptions: true |
打印異常詳細信息。 |
path: logs/mongod.log |
日誌路徑 |
logAppend: false |
如果爲 true,當 mongod/mongos 重啓後,將在現有日誌的尾部繼續添加日誌。否則,將會備份當前日誌文件,然後創建一個新的日誌文件;默認爲 false。 |
logRotate: rename |
日誌 “迴轉”,防止一個日誌文件特別大,則使用 logRotate 指令將文件 “迴轉”,可選值: |
|
1)rename:重命名日誌文件,默認值。 |
|
2)reopen:使用 linux 日誌 rotate 特性,關閉並重新打開此日誌文件,可以避免日誌丟失,但是 logAppend 必須爲 true。 |
destination: file |
日誌輸出目的地,可以指定爲 “file” 或者“syslog”,表述輸出到日誌文件,如果不指定,則會輸出到標準輸出中(standard output) |
安全配置——security
名稱 |
說明 |
authorization |
disabled 或者 enabled,僅對 mongod 有效;表示是否開啓用戶訪問控制(Access Control),即客戶端可以通過用戶名和密碼認證的方式訪問系統的數據,默認爲 “disabled”,即客戶端不需要密碼即可訪問數據庫數據。(限定客戶端與 mongod、mongos 的認證) |
clusterAuthMode |
集羣中 members 之間的認證模式,可選值爲 “keyFile”、“sendKeyFile”、“sendX509”、“x509”,對 mongod/mongos 有效;默認值爲 “keyFile”,mongodb 官方推薦使用 x509,不過我個人覺得還是 keyFile 比較易於學習和使用。不過 3.0 版本中,mongodb 增加了對 TLS/SSL 的支持,如果可以的話,建議使用 SSL 相關的配置來認證集羣的 member,此文將不再介紹。(限定集羣中 members 之間的認證) |
keyFile |
當 clusterAuthMode 爲 “keyFile” 時,此參數指定 keyfile 的位置,mongodb 需要有訪問此文件的權限。 |
javascriptEnabled |
true 或者 false,默認爲 true,僅對 mongod 有效;表示是否關閉 server 端的 javascript 功能,就是是否允許 mongod 上執行 javascript 腳本,如果爲 false,那麼 mapreduce、group 命令等將無法使用,因爲它們需要在 mongod 上執行 javascript 腳本方法。如果你的應用中沒有 mapreduce 等操作的需求,爲了安全起見,可以關閉 javascript。 |
setParameter |
允許指定一些的 Server 端參數,這些參數不依賴於存儲引擎和交互機制,只是微調系統的運行狀態,比如 “認證機制”、“線程池參數” 等。參見【parameter】 |
enableLocalhostAuthBypass |
true 或者 false,默認爲 true,對 mongod/mongos 有效;表示是否開啓 “localhost exception”,對於 sharding cluster 而言,我們傾向於在 mongos 上開啓,在 shard 節點的 mongod 上關閉。 |
authenticationMechanisms |
認證機制,可選值爲 “SCRAM-SHA-1”、“MONGODB-CR”、“PLAN” 等,建議爲“SCRAM-SHA-1”,對 mongod/mongos 有效;一旦選定了認證機制,客戶端訪問 databases 時需要與其匹配纔能有效。 |
性能參數——setParameter:
名稱 |
說明 |
connPoolMaxShardedConnsPerHost |
默認值爲 200,對 mongod/mongos 有效;表示當前 mongos 或者 shard 與集羣中其他 shards 鏈接的鏈接池的最大容量,此值我們通常不會調整。連接池的容量不會阻止創建新的鏈接,但是從連接池中獲取鏈接的個數不會超過此值。維護連接池需要一定的開支,保持一個鏈接也需要佔用一定的系統資源。 |
connPoolMaxConnsPerHost |
默認值爲 200,對 mongod/mongos 有效;同上,表示 mongos 或者 mongod 與其他 mongod 實例之間的連接池的容量,根據 host 限定。 |