摘要:html
繼上一篇NoSQL之【MongoDB】學習(一):安裝說明 以後,知道了如何安裝和啓動MongoDB,如今對啓動時指定的配置文件(mongodb.conf)進行說明,詳情請見官方。web
啓動MongoDB有2種方式,一是直接指定配置參數,二是指定配置文件。這裏先介紹配置文件,啓動方式以下:mongodb
mongod --config /etc/mongodb.conf
配置以下:
verbose:日誌信息冗餘。默認false。提升內部報告標準輸出或記錄到logpath配置的日誌文件中。要啓用verbose或啓用verbosity 用vvvv參數,如:數據庫
verbose = true vvvv = true
ps:啓動verbose冗長信息,它的級別有 vv~vvvvv,v越多級別越高,在日誌文件中記錄的信息越詳細。json
port:端口。默認27017,MongoDB的默認服務TCP端口,監聽客戶端鏈接。要是端口設置小於1024,好比1021,則須要root權限啓動,不能用mongodb賬號啓動,(普通賬號即便是27017也起不來)不然報錯:[mongo --port=1021 鏈接]服務器
ERROR: listen(): bind() failed errno:13 Permission denied for socket: 127.0.0.1:1021
port = 27017
bind_ip:綁定地址。默認127.0.0.1,只能經過本地鏈接。進程綁定和監聽來自這個地址上的應用鏈接。要是須要給其餘服務器鏈接,則須要註釋掉這個或則把IP改爲本機地址,如192.168.200.201[其餘服務器用 mongo --host=192.168.200.201 鏈接] ,能夠用一個逗號分隔的列表綁定多個IP地址。網絡
bind_ip = 127.0.0.1
maxConns:最大鏈接數。默認值:取決於系統(即的ulimit和文件描述符)限制。MongoDB中不會限制其自身的鏈接。當設置大於系統的限制,則無效,以系統限制爲準。這對於客戶端建立不少「表」,容許鏈接超時而不關閉「表」的時候頗有用。設置該值的高於鏈接池和總鏈接數的大小,以防止尖峯時候的鏈接。注意:不能設置該值大於20000。數據結構
maxConns = 100
objcheck:強制驗證客戶端請求。2.4的默認設置爲objcheck成爲true,在早期版本objcheck默認爲false。由於它強制驗證客戶端請求,確保客戶端毫不插入無效文件到數據庫中。對於嵌套文檔的對象,會有一點性能影響。設置noobjcheck 關閉。app
objcheck = true #noobjcheck = false
noobjcheck:同上,默認關閉false。less
#noobjcheck = false
logpath:指定日誌文件,該文件將保存全部的日誌記錄、診斷信息。除非另有指定,mongod將全部的日誌信息輸出到標準輸出。若是沒有指定logappend,重啓則日誌會進行覆蓋操做。
logpath=/var/log/mongodb/mongodb.log
logappend:寫日誌的模式:設置爲true爲追加。默認是覆蓋。若是未指定此設置,啓動時MongoDB的將覆蓋現有的日誌文件。
logappend=true
syslog:日誌輸出都發送到主機的syslog系統,而不是標準輸出到logpath指定日誌文件。syslog和logpath不能一塊兒用,會報錯:
Cant use both a logpath and syslog
syslog = true
pidfilepath:進程ID,沒有指定則啓動時候就沒有PID文件。默認缺省。
pidfilepath = /var/run/mongo.pid
keyFile:指定存儲身份驗證信息的密鑰文件的路徑。默認缺省。詳情見:"
Replica Set Security" and 「Replica Set Administration.」
keyFile = /srv/mongodb/keyfile
nounixsocket:套接字文件,默認爲false,有生成socket文件。當設置爲true時,不會生成socket文件。
nounixsocket = false
unixSocketPrefix:套接字文件路徑,默認/tmp
unixSocketPrefix = /tmp
fork:是否後臺運行,設置爲true 啓動 進程在後臺運行的守護進程模式。默認false。
fork = true
auth:用戶認證,默認false。不須要認證。當設置爲true時候,進入數據庫須要auth驗證,當數據庫裏沒有用戶,則不須要驗證也能夠操做。直到建立了第一個用戶,以後操做都須要驗證。
auth = true
好比:經過db.addUser('sa','sa') 在admin庫下面建立一個超級用戶,只能在在admin庫下面先認證完畢了:ab.auth('sa','sa') ,才能去別的庫操做,不能在其餘庫驗證。這樣鏈接數據庫也須要指定庫:
mongo -usa -psa admin #sa 賬號鏈接admin
mongo -uaa -paa test #aa 賬號鏈接test
noauth:禁止用戶認證,默認true。同上
noauth = true
cpu:設置爲true會強制mongodb每4s報告cpu利用率和io等待,把日誌信息寫到標準輸出或日誌文件。默認爲false。
cpu = true
開啓日誌會出現:
Mon Jun 10 10:21:42.241 [snapshotthread] cpu: elapsed:4000 writelock: 0%
dbpath:數據存放目錄。默認: /data/db/
dbpath=/var/lib/mongodb
diaglog:建立一個很是詳細的故障排除和各類錯誤的診斷日誌記錄。默認0。設置爲1,爲在dbpath目錄裏生成一個diaglog.開頭的日誌文件,他的值以下:
Value Setting 0 off. No logging. #關閉。沒有記錄。 1 Log write operations. #寫操做 2 Log read operations. #讀操做 3 Log both read and write operations. #讀寫操做 7 Log write and some read operations. #寫和一些讀操做
設置不等於0,日誌會每分鐘flush 一次:
Mon Jun 10 11:16:17.504 [DataFileSync] flushing diag log Mon Jun 10 11:17:17.442 [DataFileSync] flushing diag log
產生的日誌能夠用mongosniff 來查看:要是mongosniff[相似於tcpdump的做爲一個MongoDB的特定的TCP/ IP網絡流量]出現報錯和具體用法,請見這裏,以前先執行:apt-get install libpcap-dev
root@m3:/var/lib/mongodb# mongosniff --source DIAGLOG diaglog.51b542a9
注意:當從新設置成0,會中止寫入文件,但mongod仍是繼續保持打開該文件,即便它再也不寫入數據文件。若是你想重命名,移動或刪除診斷日誌,你必須徹底關閉mongod實例。
diaglog = 3
directoryperdb:設置爲true,修改數據目錄存儲模式,每一個數據庫的文件存儲在DBPATH指定目錄的不一樣的文件夾中。使用此選項,能夠配置的MongoDB將數據存儲在不一樣的磁盤設備上,以提升寫入吞吐量或磁盤容量。默認爲false。
注意:要是在運行一段時間的數據庫中,開啓該參數,會致使原始的數據都會消失(註釋參數則會回來)。由於數據目錄都不一樣了,除非遷移現有的數據文件到directoryperdb產生的數據庫目錄中,如:
root@m3:/var/lib/mongodb# mv test.* test/
把test數據文件遷移到directoryperdb產生的數據庫test目錄中。 因此須要在規劃好以後肯定是否要開啓。
directoryperdb = ture
原始數據結構: journal mongod.lock local.0 local.1 local.ns test.0 test.1 test.ns 開啓 directoryperdb,並把數據文件遷移到相關的數據目錄後的結構: journal mongod.lock local/local.0 local/local.1 local/local.ns test/test.0 test/test.1 test/test.ns
journal:日誌,(redo log,更多的介紹請看這裏和這裏)
默認值:(在64位系統)true。
默認值:(32位系統)false。
設置爲true,啓用操做日誌,以確保寫入持久性和數據的一致性,會在dbpath目錄下建立journal目錄。
設置爲false,以防止日誌持久性的狀況下,並不須要開銷。爲了減小磁盤上使用的日誌的影響,您能夠啓用nojournal,並設置爲true。
注意:在64位系統上禁用日誌必須使用帶有nojournal的。
#journal=true journal=false
32位OS:
Tue Jun 11 12:17:09.628 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. 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:
Tue Jun 11 12:29:34 [initandlisten] journal dir=/var/lib/mongodb/journal 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日誌。
nojournal=true
journalCommitInterval:刷寫提交機制,默認是30ms或則100ms。較低的值,會更消耗磁盤的性能。
此選項接受2和300毫秒之間的值:
若是單塊設備提供日誌和數據文件,默認的日記提交時間間隔爲100毫秒。
若是不一樣的塊設備提供的日誌和數據文件,默認的日記提交的時間間隔爲30毫秒。
journalCommitInterval=100
ipv6:是否支持ipv6,默認false。
jsonp:是否容許JSONP訪問經過一個HTTP接口,默認false。
nohttpinterface:是否禁止http接口,即28017 端口開啓的服務。默認false,支持。
nohttpinterface = false
noprealloc:預分配方式。
默認false:使用預分配方式來保證寫入性能的穩定,預分配在後臺進行,而且每一個預分配的文件都用0進行填充。這會讓MongoDB始終保持額外的空間和空餘的數據文件,從而避免了數據增加過快而帶來的分配磁盤空間引發的阻塞。
設置noprealloc= true來禁用預分配的數據文件,會縮短啓動時間,但在正常操做過程當中,可能會致使性能顯著降低。
noprealloc = false
noscripting:是否禁止腳本引擎。默認是false:不由止。ture:禁止
要是設置成true:運行一些腳本的時候會出現:
JavaScript execution failed: group command failed: { "ok" : 0, "errmsg" : "server-side JavaScript execution is disabled" }
#noscripting = true <====> noscripting = false
notablescan:是否禁止表掃描操做。默認false:不由止,ture:禁止
禁止要是執行表掃描會出現:
error: { "$err" : "table scans not allowed:test.emp", "code" : 10111 }
能夠動態修改設置:
db.adminCommand({setParameter:1, notablescan:false})
#notablescan = true <====> notablescan = false
nssize:命名空間的文件(即NS)的默認大小,默認16M,最大2G。
全部新建立的默認大小命名空間的文件(即NS)。此選項不會影響現有的命名空間的文件的大小。默認值是16M字節,最大大小爲2 GB。讓小數據庫不讓浪費太多的磁盤空間,同時讓大數據在磁盤上有連續的空間。
-rwxrwxrwx 1 mongodb zhoujy 16M 6月 11 14:44 test.0 -rwxrwxrwx 1 mongodb zhoujy 32M 6月 1 21:36 test.1 -rwxrwxrwx 1 mongodb zhoujy 16M 6月 11 14:44 test.ns drwxr-xr-x 2 root root 4.0K 6月 10 11:57 _tmp
nssize = 16
profile:數據庫分析等級設置。記錄一些操做性能到標準輸出或則指定的logpath的日誌文件中,默認0:關閉。
級別 設置 0 關。無分析。 1 開。僅包括慢操做。 2 開。包括全部操做。
控制 Profiling 的開關和級別:2種
第一種是直接在啓動參數裏直接進行設置或則啓動MongoDB時加上–profile=級別,其信息保存在 生成的system.profile 中。
profile = 2
第二種是在客戶端用db.setProfilingLevel(級別)命令來實時配置,其信息保存在 生成的system.profile 中。
[initandlisten] creating profile collection: local.system.profile
> db.setProfilingLevel(2) { "was" : 0, "slowms" : 100, "ok" : 1 } > db.getProfilingStatus() { "was" : 2, "slowms" : 100 }
默認狀況下,mongod的禁用分析。數據庫分析能夠影響數據庫的性能,由於分析器必須記錄和處理全部的數據庫操做。因此在須要的時候用動態修改就能夠了。
slowms:記錄profile分析的慢查詢的時間,默認是100毫秒。具體同上。
slowms = 200
> db.getProfilingStatus() { "was" : 2, "slowms" : 200 }
quota:配額,默認false。是否開啓配置每一個數據庫的最多文件數的限制。當爲true則用quotaFiles來配置最多文件的數量。
quota = true
quotaFiles:配額數量。每一個數據庫的數據文件數量的限制。此選項須要quota爲true。默認爲8。
quotaFiles = 8
rest: 默認false,設置爲true,使一個簡單的 REST API。
rest = true
設置爲true,開啓後,在MongoDB默認會開啓一個HTTP協議的端口提供REST的服務(nohttpinterface = false),這個端口是你Server端口加上1000,即28017,默認的HTTP端口是數據庫狀態頁面,(開啓後,web頁面的Commands 行中的命令均可以點進去)。mongodb自帶的REST,不支持 增、刪、改,同時也不支持 權限認證。
詳細信息見這裏和這裏。
repair:修復數據庫操做,默認是false。
設置爲true時,啓動後修復全部數據庫,設置這個選項最好在命令行上,而不是在配置文件或控制腳本。如:
命令行修復:
> db.repairDatabase('xxx') { "ok" : 1 } > db.repairDatabase() { "ok" : 1 }
啓動時修復:
repair = true
root@m3:/var/log/mongodb# mongod --repair
啓動時修復,須要關閉journal,不然報錯:
Can't specify both --journal and --repair options.
而且啓動時,用控制文件指定參數和配置文件裏指定參數的方式進行修復以後,(修復信息見log),須要再禁用repair參數才能啓用mongodb。
注意:mongod修復時,須要重寫全部的數據庫文件。若是在同一個賬號下不能運行修復,則須要運行chown修改數據庫文件的權限。
repairpath:修復路徑,默認是在dbpath路徑下的_tmp 目錄。
drwxr-xr-x 2 root root 4.0K 6月 11 20:23 _tmp
smallfiles:是否使用較小的默認文件。默認爲false,不使用。
設置爲true,使用較小的默認數據文件大小。smallfiles減小數據文件的初始大小,並限制他們到512M,也減小了日誌文件的大小,並限制他們到128M。
若是數據庫很大,各持有少許的數據,會致使mongodb建立不少文件,會影響性能。
smallfiles = true
syncdelay:刷寫數據到日誌的頻率,經過fsync操做數據。默認60秒。
syncdelay = 60
默認就能夠,不須要設置。不會對日誌文件(journal files)有影響
警告:若是設置爲0,SYNCDELAY 不會同步到磁盤的內存映射文件。在生產系統上,不要設置這個值。
sysinfo:系統信息,默認false。
設置爲true,mongod會診斷系統有關的頁面大小,數量的物理頁面,可用物理頁面的數量輸出到標準輸出。
Tue Jun 11 21:07:15.031 sysinfo: Tue Jun 11 21:07:15.035 page size: 4096 Tue Jun 11 21:07:15.035 _SC_PHYS_PAGES: 256318 Tue Jun 11 21:07:15.035 _SC_AVPHYS_PAGES: 19895
當開啓sysinfo參數的時候,只會打印上面的信息,不會啓動mongodb的程序。因此要關閉該參數,才能開啓mongodb。
upgrade:升級。默認爲false。
當設置爲true,指定DBPATH,升級磁盤上的數據格式的文件到最新版本。會影響數據庫操做,更新元數據。大部分狀況下,不須要設置該值。
traceExceptions:是否使用內部診斷。默認false。
traceExceptions = false
quiet:安靜模式。
quiet = true
setParameter:2.4的新參數,指定啓動選項配置。想設置多個選項則用一個setParameter選項指定,能夠setParameter的參數請見這裏,詳情請見這裏
聲明setParameter設置在這個文件中,使用下面的格式:
setParameter = <parameter>=<value>
如配置文件裏設置syncdelay:
setParameter = syncdelay= 55,notablescan = true,journalCommitInterval = 50,traceExceptions = true
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,則配置當前實例做爲主實例。
master = true
slave:默認爲false,當設置爲true,則配置當前實例做爲從實例。
slave = true
source:默認爲空,格式爲:<host><:port>。用於從實例的複製:設置從的時候指定該選項會讓從複製指定主的實例
source = 127.0.0.1:30001
only:默認爲空,用於從選項,指定一個數據庫進行復制。
only = abc #只同步abc集合(庫)
slavedelay:設置從庫同步主庫的延遲時間,用於從設置,默認爲0。
slavedelay = 60 #延遲60s同步主數據
autoresync:默認爲false,用於從設置。是否自動從新同步。設置爲true,若是落後主超過10秒,會強制從自動從新同步。若是oplogSize過小,此設置可能有問題。若是OPLOG大小不足以存儲主的變化狀態和從的狀態變化之間的差別,這種狀況下強制從新同步是沒必要要的。當設置autoresync選項設置爲false,10分鐘內從不會進行大於1次的自動從新同步。
autoresync = false
Sharded Cluster Options 分片集羣設置
後續更新...