天天看點

mongodb配置檔案詳解

mongodb.conf配置檔案詳解

啟動mongodb有2種方式,一是直接指定配置參數,二是指定配置檔案。這裡先介紹配置檔案,啟動方式如下:

1.mongod --config /etc/mongodb.conf

配置如下:

verbose:日志資訊備援。預設false。提高内部報告标準輸出或記錄到logpath配置的日志檔案中。要啟用verbose或啟用verbosity 用vvvv參數,如:

1.verbose = true

2.vvvv = true

ps:啟動verbose冗長資訊,它的級别有 vv~vvvvv,v越多級别越高,在日志檔案中記錄的資訊越詳細。

port:端口。預設27017,mongodb的預設服務tcp端口,監聽用戶端連接配接。要是端口設定小于1024,比如1021,則需要root權限啟動,不能用mongodb帳号啟動,(普通帳号即使是27017也起不來)否則報錯:[mongo --port=1021 連接配接]

1.error: listen(): bind() failed errno:13 permission denied for socket: 127.0.0.1:1021

1.port = 27017

bind_ip:綁定位址。預設127.0.0.1,隻能通過本地連接配接。程序綁定和監聽來自這個位址上的應用連接配接。要是需要給其他伺服器連接配接,則需要注釋掉這個或則把ip改成本機位址,如192.168.200.201[其他伺服器用 mongo --host=192.168.200.201 連接配接] ,可以用一個逗号分隔的清單綁定多個ip位址。

1.bind_ip = 127.0.0.1

maxconns:最大連接配接數。預設值:取決于系統(即的ulimit和檔案描述符)限制。mongodb中不會限制其自身的連接配接。當設定大于系統的限制,則無效,以系統限制為準。這對于用戶端建立很多“表”,允許連接配接逾時而不關閉“表”的時候很有用。設定該值的高于連接配接池和總連接配接數的大小,以防止尖峰時候的連接配接。注意:不能設定該值大于20000。

1.maxconns = 100

objcheck:強制驗證用戶端請求。2.4的預設設定為objcheck成為true,在早期版本objcheck預設為false。因為它強制驗證用戶端請求,確定用戶端絕不插入無效檔案到資料庫中。對于嵌套文檔的對象,會有一點性能影響。設定noobjcheck 關閉。

1.objcheck = true

2.#noobjcheck = false

noobjcheck:同上,預設關閉false。

1.#noobjcheck = false

logpath:指定日志檔案,該檔案将儲存所有的日志記錄、診斷資訊。除非另有指定,mongod将所有的日志資訊輸出到标準輸出。如果沒有指定logappend,重新開機則日志會進行覆寫操作。

1.logpath=/var/log/mongodb/mongodb.log

logappend:寫日志的模式:設定為true為追加。預設是覆寫。如果未指定此設定,啟動時mongodb的将覆寫現有的日志檔案。

1.logappend=true

syslog:日志輸出都發送到主機的syslog系統,而不是标準輸出到logpath指定日志檔案。syslog和logpath不能一起用,會報錯:

1.cant use both a logpath and syslog

1.syslog  = true

pidfilepath:程序id,沒有指定則啟動時候就沒有pid檔案。預設預設。

1.pidfilepath = /var/run/mongo.pid

keyfile:指定存儲身份驗證資訊的密鑰檔案的路徑。預設預設。詳情見:"

word-spacing: 0px; display: inline; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: #ffffff; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">replica set security" and “replica set administration.”

1.keyfile = /srv/mongodb/keyfile

nounixsocket:套接字檔案,預設為false,有生成socket檔案。當設定為true時,不會生成socket檔案。

1.nounixsocket = false

unixsocketprefix:套接字檔案路徑,預設/tmp

1.unixsocketprefix = /tmp

fork:是否背景運作,設定為true 啟動 程序在背景運作的守護程序模式。預設false。

1.fork = true

auth:使用者認證,預設false。不需要認證。當設定為true時候,進入資料庫需要auth驗證,當資料庫裡沒有使用者,則不需要驗證也可以操作。直到建立了第一個使用者,之後操作都需要驗證。

1.auth = true

比如:通過db.adduser('sa','sa')  在admin庫下面建立一個超級使用者,隻能在在admin庫下面先認證完畢了:ab.auth('sa','sa') ,才能去别的庫操作,不能在其他庫驗證。這樣連接配接資料庫也需要指定庫:

1.mongo -usa -psa admin     #sa 帳号連接配接admin

1.mongo -uaa -paa test      #aa 帳号連接配接test

noauth:禁止使用者認證,預設true。同上

1.noauth = true

cpu:設定為true會強制mongodb每4s報告cpu使用率和io等待,把日志資訊寫到标準輸出或日志檔案。預設為false。

1.cpu = true

開啟日志會出現:

1.mon jun 10 10:21:42.241 [snapshotthread] cpu: elapsed:4000  writelock: 0%

dbpath:資料存放目錄。預設: word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: #ffffff; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">/data/db/

1.dbpath=/var/lib/mongodb

diaglog:建立一個非常詳細的故障排除和各種錯誤的診斷日志記錄。預設0。設定為1,為在dbpath目錄裡生成一個diaglog.開頭的日志檔案,他的值如下:

1.value    setting

2.0    off. no logging.       #關閉。沒有記錄。

3.1    log write operations.  #寫操作

4.2    log read operations.   #讀操作

5.3    log both read and write operations. #讀寫操作

6.7    log write and some read operations. #寫和一些讀操作

設定不等于0,日志會每分鐘flush 一次:

1.mon jun 10 11:16:17.504 [datafilesync] flushing diag log

2.mon jun 10 11:17:17.442 [datafilesync] flushing diag log

産生的日志可以用mongosniff 來檢視:要是mongosniff[類似于tcpdump的作為一個mongodb的特定的tcp/ ip網絡流量]出現報錯和具體用法,請見這裡,之前先執行:apt-get install libpcap-dev

1.root@m3:/var/lib/mongodb# mongosniff --source diaglog diaglog.51b542a9

注意:當重新設定成0,會停止寫入檔案,但mongod還是繼續保持打開該檔案,即使它不再寫入資料檔案。如果你想重命名,移動或删除診斷日志,你必須完全關閉mongod執行個體。

1.diaglog = 3

directoryperdb:設定為true,修改資料目錄存儲模式,每個資料庫的檔案存儲在dbpath指定目錄的不同的檔案夾中。使用此選項,可以配置的mongodb将資料存儲在不同的磁盤裝置上,以提高寫入吞吐量或磁盤容量。預設為false。

注意:要是在運作一段時間的資料庫中,開啟該參數,會導緻原始的資料都會消失(注釋參數則會回來)。因為資料目錄都不同了,除非遷移現有的資料檔案到directoryperdb産生的資料庫目錄中,如:

root@m3:/var/lib/mongodb# mv test.* test/

把test資料檔案遷移到directoryperdb産生的資料庫test目錄中。 是以需要在規劃好之後确定是否要開啟。

1.directoryperdb = ture

01.原始資料結構:

02.journal

03.mongod.lock

04.local.0

05.local.1

06.local.ns

07.test.0

08.test.1

09.test.ns

10.

11.開啟 directoryperdb,并把資料檔案遷移到相關的資料目錄後的結構:

12.

13.journal

14.mongod.lock

15.local/local.0

16.local/local.1

17.local/local.ns

18.test/test.0

19.test/test.1

20.test/test.ns

journal:日志,(redo log,更多的介紹請看這裡和這裡)

預設值:(在64位系統)true。

預設值:(32位系統)false。

設定為true,啟用記錄檔,以確定寫入持久性和資料的一緻性,會在dbpath目錄下建立journal目錄。

設定為false,以防止日志持久性的情況下,并不需要開銷。為了減少磁盤上使用的日志的影響,您可以啟用nojournal,并設定為true。

注意:在64位系統上禁用日志必須使用帶有nojournal的。

1.#journal=true

2.journal=false

32位os:

1.tue jun 11 12:17:09.628 [initandlisten] ** note: this is a 32 bit mongodb binary.

2.tue jun 11 12:17:09.628 [initandlisten] **       32 bit builds are limited to less than 2gb of data (or less with --journal).

64位os:

1.tue jun 11 12:29:34 [initandlisten] journal dir=/var/lib/mongodb/journal

2.tue jun 11 12:29:34 [initandlisten] recover : no journal files present, no recovery needed

nojournal:禁止日志

預設值:(在64位系統)false。

預設值:(32位系統)true。

設定nojournal為true關閉日志,64位,2.0版本後的mongodb預設是啟用 journal日志。

1.nojournal=true

journalcommitinterval:刷寫送出機制,預設是30ms或則100ms。較低的值,會更消耗磁盤的性能。

此選項接受2和300毫秒之間的值:

如果單塊裝置提供日志和資料檔案,預設的日記送出時間間隔為100毫秒。

如果不同的塊裝置提供的日志和資料檔案,預設的日記送出的時間間隔為30毫秒。

1.journalcommitinterval=100

ipv6:是否支援ipv6,預設false。

jsonp:是否允許jsonp通路通過一個http接口,預設false。

nohttpinterface:是否禁止http接口,即28017 端口開啟的服務。預設false,支援。

1.nohttpinterface = false

noprealloc:預配置設定方式。

預設false:使用預配置設定方式來保證寫入性能的穩定,預配置設定在背景進行,并且每個預配置設定的檔案都用0進行填充。這會讓mongodb始終保持額外的空間和空餘的資料檔案,進而避免了資料增長過快而帶來的配置設定磁盤空間引起的阻塞。

設定noprealloc= true來禁用預配置設定的資料檔案,會縮短啟動時間,但在正常操作過程中,可能會導緻性能顯著下降。

1.noprealloc = false

noscripting:是否禁止腳本引擎。預設是false:不禁止。ture:禁止

要是設定成true:運作一些腳本的時候會出現:

1.javascript execution failed: group command failed: { "ok" : 0, "errmsg" : "server-side javascript execution is disabled" }

1.#noscripting = true     <====> noscripting = false

notablescan:是否禁止表掃描操作。預設false:不禁止,ture:禁止

禁止要是執行表掃描會出現:

1.error: { "$err" : "table scans not allowed:test.emp", "code" : 10111 }

可以動态修改設定:

1.db.admincommand({setparameter:1, notablescan:false})

1.#notablescan = true  <====> notablescan = false

nssize:命名空間的檔案(即ns)的預設大小,預設16m,最大2g。

所有新建立的預設大小命名空間的檔案(即ns)。此選項不會影響現有的命名空間的檔案的大小。預設值是16m位元組,最大大小為2 gb。讓小資料庫不讓浪費太多的磁盤空間,同時讓大資料在磁盤上有連續的空間。

1.-rwxrwxrwx 1 mongodb zhoujy  16m  6月 11 14:44 test.0

2.-rwxrwxrwx 1 mongodb zhoujy  32m  6月  1 21:36 test.1

3.-rwxrwxrwx 1 mongodb zhoujy  16m  6月 11 14:44 test.ns

4.drwxr-xr-x 2 root    root   4.0k  6月 10 11:57 _tmp

1.nssize  = 16

profile:資料庫分析等級設定。記錄一些操作性能到标準輸出或則指定的logpath的日志檔案中,預設0:關閉。

1.級别 設定

2.0 關。無分析。

3.1 開。僅包括慢操作。

4.2 開。包括所有操作。

控制 profiling  的開關和級别:2種

第一種是直接在啟動參數裡直接進行設定或則啟動mongodb時加上–profile=級别,其資訊儲存在 生成的system.profile 中。

1.profile = 2

第二種是在用戶端用db.setprofilinglevel(級别)指令來實時配置,其資訊儲存在 生成的system.profile 中。

1.[initandlisten] creating profile collection: local.system.profile

1.> db.setprofilinglevel(2)

2.{ "was" : 0, "slowms" : 100, "ok" : 1 }

3.> db.getprofilingstatus()

4.{ "was" : 2, "slowms" : 100 }

預設情況下,mongod的禁用分析。資料庫分析可以影響資料庫的性能,因為分析器必須記錄和處理所有的資料庫操作。是以在需要的時候用動态修改就可以了。

slowms:記錄profile分析的慢查詢的時間,預設是100毫秒。具體同上。

1.slowms  = 200

1.> db.getprofilingstatus()

2.{ "was" : 2, "slowms" : 200 }

quota:配額,預設false。是否開啟配置每個資料庫的最多檔案數的限制。當為true則用quotafiles來配置最多檔案的數量。

1.quota = true

quotafiles:配額數量。每個資料庫的資料檔案數量的限制。此選項需要quota為true。預設為8。

1.quotafiles = 8

rest: 預設false,設定為true,使一個簡單的 rest api。

1.rest = true

設定為true,開啟後,在mongodb預設會開啟一個http協定的端口提供rest的服務(nohttpinterface = false),這個端口是你server端口加上1000,即28017,預設的http端口是資料庫狀态頁面,(開啟後,web頁面的commands 行中的指令都可以點進去)。mongodb自帶的rest,不支援 增、删、改,同時也不支援 權限認證。

詳細資訊見這裡和這裡。

repair:修複資料庫操作,預設是false。

設定為true時,啟動後修複所有資料庫,設定這個選項最好在指令行上,而不是在配置檔案或控制腳本。如:

指令行修複:

1.> db.repairdatabase('xxx')

2.{ "ok" : 1 }

3.> db.repairdatabase()

4.{ "ok" : 1 }

啟動時修複:

1.repair = true

1.root@m3:/var/log/mongodb# mongod --repair

啟動時修複,需要關閉journal,否則報錯:

1.can't specify both --journal and --repair options.

并且啟動時,用控制檔案指定參數和配置檔案裡指定參數的方式進行修複之後,(修複資訊見log),需要再禁用repair參數才能啟用mongodb。

注意:mongod修複時,需要重寫所有的資料庫檔案。如果在同一個帳号下不能運作修複,則需要運作chown修改資料庫檔案的權限。

repairpath:修複路徑,預設是在dbpath路徑下的_tmp 目錄。

1.drwxr-xr-x 2 root    root   4.0k  6月 11 20:23 _tmp

smallfiles:是否使用較小的預設檔案。預設為false,不使用。

設定為true,使用較小的預設資料檔案大小。smallfiles減少資料檔案的初始大小,并限制他們到512m,也減少了日志檔案的大小,并限制他們到128m。

如果資料庫很大,各持有少量的資料,會導緻mongodb建立很多檔案,會影響性能。

1.smallfiles = true

syncdelay:刷寫資料到日志的頻率,通過fsync操作資料。預設60秒。

1.syncdelay = 60

預設就可以,不需要設定。不會對日志檔案(journal files)有影響

警告:如果設定為0,syncdelay 不會同步到磁盤的記憶體映射檔案。在生産系統上,不要設定這個值。

sysinfo:系統資訊,預設false。

設定為true,mongod會診斷系統有關的頁面大小,數量的實體頁面,可用實體??頁面的數量輸出到标準輸出。

1.tue jun 11 21:07:15.031 sysinfo:

2.tue jun 11 21:07:15.035   page size: 4096

3.tue jun 11 21:07:15.035   _sc_phys_pages: 256318

4.tue jun 11 21:07:15.035   _sc_avphys_pages: 19895

當開啟sysinfo參數的時候,隻會列印上面的資訊,不會啟動mongodb的程式。是以要關閉該參數,才能開啟mongodb。

upgrade:更新。預設為false。

當設定為true,指定dbpath,更新磁盤上的資料格式的檔案到最新版本。會影響資料庫操作,更新中繼資料。大部分情況下,不需要設定該值。

traceexceptions:是否使用内部診斷。預設false。

1.traceexceptions = false

quiet:安靜模式。

1.quiet = true

setparameter:2.4的新參數,指定啟動選項配置。想設定多個選項則用一個setparameter選項指定,可以setparameter的參數請見這裡,詳情請見這裡

聲明setparameter設定在這個檔案中,使用下面的格式:

1.setparameter = <parameter>=<value>

如配置檔案裡設定syncdelay:

1.setparameter = syncdelay= 55,notablescan = true,journalcommitinterval = 50,traceexceptions = true

replication options  複制選項

replset:使用此設定來配置複制副本集。指定一個副本集名稱作為參數,所有主機都必須有相同的名稱作為同一個副本集。

oplogsize:指定的複制記錄檔(oplog)的最大大小。mongod建立一個oplog的大小基于最大可用空間量。對于64位系統,oplog通常是5%的可用磁盤空間。

一旦mongod第一次建立oplog,改變oplogsize将不會影響oplog的大小。

fastsync:預設為false。在副本集下,設定為true,從一個dbpath裡啟用從庫複制服務,該dbpath的資料庫是主庫的快照,可用于快速啟用同步,否則的mongod将嘗試執行初始同步。注意:如果資料不完全同步,mongod指定fastsync開啟,secondary或slave與主永久不同步,這可能會導緻顯着的一緻性問題。

replindexprefetch:2.2版本出現的新參數,預設是all。可以設定的值有:all, none, and _id_only。隻能在副本集(replset)中使用。預設情況下,secondary副本集的成員将加載所有索引到記憶體中(從oplog之前的操作有關的)。您可以修改此行為,使secondary隻會加載_id索引。指定_id_或none,防止mongod的任何索引加載到記憶體。

master/slave replication:主從複制的相關設定

master:預設為false,當設定為true,則配置目前執行個體作為主執行個體。

1.master = true

slave:預設為false,當設定為true,則配置目前執行個體作為從執行個體。

1.slave = true

source:預設為空,格式為:<host><:port>。用于從執行個體的複制:設定從的時候指定該選項會讓從複制指定主的執行個體

1.source = 127.0.0.1:30001

only:預設為空,用于從選項,指定一個資料庫進行複制。

1.only = abc          #隻同步abc集合(庫)

slavedelay:設定從庫同步主庫的延遲時間,用于從設定,預設為0。

1.slavedelay = 60     #延遲60s同步主資料

autoresync:預設為false,用于從設定。是否自動重新同步。設定為true,如果落後主超過10秒,會強制從自動重新同步。如果oplogsize太小,此設定可能有問題。如果oplog大小不足以存儲主的變化狀态和從的狀态變化之間的差異,這種情況下強制重新同步是不必要的。當設定autoresync選項設定為false,10分鐘内從不會進行大于1次的自動重新同步。

1.autoresync = false

繼續閱讀