# 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 應用操作??蛇x值: |
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 將客戶端請求轉發給延遲較?。ㄅc此值相比)的某個 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 限定。 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。