Mongodb 新版配置檔案詳解
mongod.conf
$ vi /etc/mongod.conf
手冊
程序管理
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
名稱 |
說明 |
fork |
執行在後臺 |
pidFilePath |
PID 檔案路徑 |
網路
net:
port: 27017
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
名稱 |
說明 |
port |
埠 |
bindIp |
繫結外網 op 多個用逗號分隔 |
maxIncomingConnections |
程序允許的最大連線數 預設值為 65536 |
wireObjectCheck |
當客戶端寫入資料時 檢測資料的有效性 (BSON) 預設值為 true |
ipv6 |
預設值為 false |
儲存
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
名稱 |
說明 |
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 條目;如果你的 database 下需要建立大量的 collection(比如資料分析),則可以適度調大此值。 |
wiredTiger |
如下配置僅對 wiredTiger 引擎生效(3.0 以上版本) |
engineConfig: |
|
cacheSizeGB: 8 |
wiredTiger 快取工作集(working set)資料的記憶體大小,單位:GB,此值決定了 wiredTiger 與 mmapv1 的記憶體模型不同,它可以限制 mongod 對記憶體的使用量,而 mmapv1 則不能(依賴於系統級的 mmap)。預設情況下,cacheSizeGB 的值為假定當前節點只部署一個 mongod 例項,此值的大小為實體記憶體的一半;如果當前節點部署了多個 mongod 程序,那麼需要合理配置此值。如果 mongod 部署在虛擬容器中(比如,lxc,cgroups,Docker)等,它將不能使用整個系統的實體記憶體,則需要適當調整此值。預設值為實體記憶體的一半。 |
journalCompressor: snappy |
journal 日誌的壓縮演算法,可選值為 “none”、“snappy”、“zlib”。 |
directoryForIndexes: false |
是否將索引和 collections 資料分別儲存在 dbPath 單獨的目錄中。即 index 資料儲存 “index” 子目錄,collections 資料儲存在 “collection” 子目錄。預設值為 false,僅對 mongod 有效。 |
collectionConfig: |
|
blockCompressor: snappy |
collection 資料壓縮演算法,可選值 “none”、“snappy”、“zlib”。開發者在建立 collection 時可以指定值,以覆蓋此配置項。如果 mongod 中已經存在資料,修改此值不會帶來問題,舊資料仍然使用原來的演算法解壓,新資料檔案將會採用新的解壓縮演算法。 |
indexConfig: |
|
prefixCompression: true |
是否對索引資料使用 “字首壓縮”(prefix compression,一種演算法)。字首壓縮,對那些經過排序的值儲存,有很大幫助,可以有效的減少索引資料的記憶體使用量。預設值為 true。 |
效能分析器
operationProfiling:
名稱 |
說明 |
slowOpThresholdMs: 100 |
資料庫 profiler 判定一個操作是 “慢查詢” 的時間閥值,單位毫秒;mongod 將會把慢查詢記錄到日誌中,即使 profiler 被關閉。當 profiler 開啟時,慢查詢記錄還會被寫入 “system.profile” 這個系統級的 collection 中。請參看 mongod profiler 相關文件。預設值為 100,此值只對 mongod 程序有效。 |
mode: off |
資料庫 profiler 級別,操作的效能資訊將會被寫入日誌檔案中,可選值: |
1)off:關閉 profiling |
|
2)slowOp:on,只包含慢操作日誌 |
|
3)all:on,記錄所有操作 |
|
資料庫 profiling 會影響效能,建議只在效能除錯階段開啟。此引數僅對 mongod 有效。 |
主從複製
replication:
名稱 |
說明 |
oplogSizeMB: 10240 |
replication 操作日誌的最大尺寸,單位:MB。mongod 程序根據磁碟最大可用空間來建立 oplog,比如 64 位系統,oplog 為磁碟可用空間的 5%,一旦 mongod 建立了 oplog 檔案,此後再次修改 oplogSizeMB 將不會生效。此值不要設定的太小, 應該足以儲存 24 小時的操作日誌,以保證 secondary 有充足的維護時間;如果太小,secondary 將不能通過 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:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
名稱 |
說明 |
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: enabled
clusterAuthMode: keyFile
keyFile: /srv/mongodb/keyfile
javascriptEnabled: true
setParameter:
enableLocalhostAuthBypass: true
authenticationMechanisms: SCRAM-SHA-1
名稱 |
說明 |
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
connPoolMaxConnsPerHost: 200
notablescan: 0
名稱 |
說明 |
connPoolMaxShardedConnsPerHost |
預設值為 200,對 mongod/mongos 有效;表示當前 mongos 或者 shard 與叢集中其他 shards 連結的連結池的最大容量,此值我們通常不會調整。連線池的容量不會阻止建立新的連結,但是從連線池中獲取連結的個數不會超過此值。維護連線池需要一定的開支,保持一個連結也需要佔用一定的系統資源。 |
connPoolMaxConnsPerHost |
預設值為 200,對 mongod/mongos 有效;同上,表示 mongos 或者 mongod 與其他 mongod 例項之間的連線池的容量,根據 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
如果你的架構模式為 replication Set,那麼還需要在所有的 “複製集”members 上增加如下配置:
replication:
oplogSizeMB: 10240
replSetName: rs0
secondaryIndexPrefetch: all
如果為 sharding Cluster 架構,則需要在 shard 節點增加如下配置:
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: ,
chunkSize: 64
mongos 例項不需要儲存實際的資料,對記憶體有一定的消耗,在 sharding 架構模式下使用;mongos 需接收向客戶端請求(後端的 sharded 和 replication set 則不需要讓客戶端知道),它可以將客戶端請求轉發到一個分片叢集上(分片叢集基於複製集)延遲相對較小的 secondary 上,同時還負責 chunk 的分裂和遷移工作。
repair 修復
“修復” 資料庫,當 mongodb 執行一段時間之後,特別是經過大量刪除、update 操作之後,我們可以使用 repair 指令對資料儲存進行 “repair”,它將整理、壓縮底層資料儲存檔案,重用磁碟空間,相當於資料重新整理了一遍,對資料優化有一定的作用。
$ ./mongod --dbpath=/data/mongodb/db --repair
mongodump 與 mongorestore
我們通常會使用到 mongodb 資料的備份功能,或者將一個備份匯入到一個新的 mongod 例項中(資料冷處理),那麼就需要藉助這兩個指令。
-
備份
>./mongodump --host --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 將資料匯出為 JSON 或者 CSV 格式,以便其他應用程式解析。
mongo shell
1)help:列出所有的 function
2)show dbs:展示當前例項中所有的 databases。
3)use :切換到指定的 db,接下來的操作將會在此 db 中。
4)show collections:展示出當前 db 中所有的 collections。
5)show users:展示當前 db 中已經新增的所有使用者。
6)show roles:展示當前 db 中所有內建的或者自定義的使用者角色。
7)show profile:這涉及到 profile 相關的配置,預設情況下展示出最近 5 個操作耗時超過 1 秒的操作,通常用於跟蹤慢查詢。
8)db.help():展示出可以在 db 上進行的操作 function。
9)db..help():展示出可以在 colleciton 上進行的操作。
原文來自: