Mongodb 新版配置文件詳解


mongod.conf

$ vi /etc/mongod.conf

手冊

 

https://docs.mongodb.com/manual/reference/configuration-options

 

https://docs.mongodb.com/manual/reference/parameters/

進程管理

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: m1.com:27018,m2.com:27018,m3.com:27018

    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 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 將數據導出為 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 上進行的操作。

 

 

原文來自:https://blog.csdn.net/MatrixGod/article/details/82585778


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM