1. 程式人生 > >Mongodb 新版配置檔案詳解

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

    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 上進行的操作。