什么是MongoDB

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),先為伊金霍洛等服務(wù)建站,伊金霍洛等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為伊金霍洛企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
MongoDB是由C++語(yǔ)言編寫(xiě)的,是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)。
在高負(fù)載的情況下,添加更多的節(jié)點(diǎn),可以保證服務(wù)器性能。
MongoDB旨在為web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB文檔類似于JSON對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。

##主要特點(diǎn)
* MongoDB的提供了一個(gè)面向文檔 存儲(chǔ),操作起來(lái)比較簡(jiǎn)單和容易。
* 可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來(lái)實(shí)現(xiàn)更快的排序。
* 可以通過(guò)本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongDB有更強(qiáng)的擴(kuò)展性。
* 如果負(fù)載的增加(需要更多的存儲(chǔ)空間和更強(qiáng)的處理能力),他可以分布在計(jì)算機(jī)網(wǎng)絡(luò)其他節(jié)點(diǎn)上,這就是所謂的分片。
* MongoDB支持豐富份查詢表達(dá)式,查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對(duì)象及數(shù)組。
* MongoDB使用update()命令可以實(shí)現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段。
* MongoDB中的Map/reduce主要用來(lái)對(duì)數(shù)據(jù)進(jìn)行批量處理和聚合操作。
* map和reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key和value傳給reduce函數(shù)處理。
* map函數(shù)和reduce函數(shù)使用JavaScript編寫(xiě)的并可以通過(guò)db.runcommand或marpreduce命令執(zhí)行MapReduce操作。
* GridFS是MongDB中的一個(gè)內(nèi)置功能,可以用于存放大量小文件。
* MongoDB允許在服務(wù)端執(zhí)行腳本,可以用JavaScript編寫(xiě)某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲(chǔ)在服務(wù)端,下次直接調(diào)用即可。
* MongoDB支持各種編程語(yǔ)言:RUBY,PYTHON,JAVA,C++.PHP,C#等多種語(yǔ)言。
* MongoDB安裝簡(jiǎn)單。
##MongoDB工具
有幾種可用于MongoDB的管理工具。
###監(jiān)控
MongoDB提供了網(wǎng)絡(luò)和系統(tǒng)監(jiān)控工具M(jìn)unin,它作為一個(gè)插件應(yīng)用于MongoDB中。
Gangila是MongoDB高性能的系統(tǒng)監(jiān)視的工具,它作為一個(gè)插件應(yīng)用于MongoDB中。
基于圖形界面的開(kāi)源工具 Cacti, 用于查看CPU負(fù)載, 網(wǎng)絡(luò)帶寬利用率,它也提供了一個(gè)應(yīng)用于監(jiān)控 MongoDB 的插件。
###GUI
* Fang of Mongo – 網(wǎng)頁(yè)式,由Django和jQuery所構(gòu)成。
* Futon4Mongo – 一個(gè)CouchDB Futon web的mongodb山寨版。
* Mongo3 – Ruby寫(xiě)成。
* MongoHub – 適用于OSX的應(yīng)用程序。
* Opricot – 一個(gè)基于瀏覽器的MongoDB控制臺(tái), 由PHP撰寫(xiě)而成。
* Database Master — Windows的mongodb管理工具
* RockMongo — 最好的PHP語(yǔ)言的MongoDB管理工具,輕量級(jí), 支持多國(guó)語(yǔ)言.
##MongoDB安裝與部署
###1.安裝依賴包
` yum install -y openssl-devel openssl`
###2.下載mongodb包
`cd /home/test/tools`
`wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz`
`tar xf mongodb-linux-x86_64-rhel62-3.2.4.tgz`
`mv mongodb-linux-x86_64-rhel62-3.2.4 /application/mongodb-3.2.4/`
`ln -s /application/mongodb-3.2.4/ /application/mongodb `
`mkdir -p /data/mongodb`
`mkdir -p /data/logs/mongodb`
`touch /data/logs/mongodb/mongodb.log`
`chmod -R 777 /data/logs/mongodb/mongodb.log`
###3.配置文件
vim /application/mongodb/bin/mongodb.conf
port=27017 #端口
dbpath= /data/mongodb #數(shù)據(jù)文件存放目錄
logpath=/data/logs/mongodb/mongodb.log #日志文件存放目錄
logappend=true #使用追加的方式寫(xiě)日志
fork=true #以守護(hù)程序的方式啟用,即在后臺(tái)運(yùn)行
maxConns=5000 #最大同時(shí)連接數(shù) 默認(rèn)2000
bind_ip=127.0.0.1,172.16.20.126 #只允許通過(guò)局域網(wǎng)IP:172.16.20.126及本機(jī)訪問(wèn)
noauth=true #不啟用驗(yàn)證
nohttpinterface=true
rest=false
###4.環(huán)境變量設(shè)置
echo 'export PATH=/application/mongodb/bin:$PATH' >> /etc/profile
source /etc/profile
###5.啟動(dòng)與關(guān)閉
numactl --interleave=all /application/mongodb/bin/mongod --config /application/mongodb/bin/mongodb.conf
或
# numactl --interleave=all /application/mongodb/bin/mongod -f /application/mongodb/bin/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 20394
child process started successfully, parent exiting
正常停止方法:
/application/mongodb/bin/mongod --shutdown --dbpath /data/mongodb/
# ps aux | grep mongod
# kill -2 PID
或
# /application/mongodb/bin/mongo -port 27017
> use admin
> db.shutdownServer();
2015-03-19T00:43:27.760+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-19T00:43:27.760+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
不重啟服務(wù)器的情況下解決辦法,在Linux下執(zhí)行:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
服務(wù)器重啟后立即生效辦法:
# vi /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
###6.開(kāi)機(jī)自動(dòng)啟動(dòng)mongodb
vi /etc/rc.d/rc.local
/bin/rm -rf /data/mongodb/mongod.lock
/usr/bin/numactl --interleave=all /application/mongodb/bin/mongod -f /application/mongodb/bin/mongodb.conf
#Mongodb配置文件詳解
###在Mongod安裝包中,包含2個(gè)進(jìn)程啟動(dòng)文件:mongod和mongos;其中mongod是核心基礎(chǔ)進(jìn)程,用來(lái)接收讀寫(xiě)請(qǐng)求、負(fù)責(zé)存儲(chǔ)實(shí)際數(shù)據(jù),mongodb實(shí)例是構(gòu)成集群的基本單位,比如Replication set、sharding Cluster、Config Servers等;mongos是Sharding Cluster架構(gòu)模式中法人“路由”進(jìn)程,即客戶端請(qǐng)求訪問(wèn)mongos,然后有mongos將請(qǐng)求轉(zhuǎn)發(fā)給合適的sharding server執(zhí)行操作,并將result返回給客戶端,所以mongos基本不存儲(chǔ)數(shù)據(jù),只是內(nèi)存中緩存部分shark key與sharding server的對(duì)應(yīng)關(guān)系,便于路由。
##重要配置參數(shù)講解
###1.processManagement:
fork:<true|false>
#####描述:是否以fork模式運(yùn)行mongod/mongos進(jìn)程,默認(rèn)false。
pidFilePath:<路徑>
#####描述:配合“fork:true”參數(shù),將mongod/mongos進(jìn)程ID寫(xiě)入指定的文件,如果不指定,將不會(huì)創(chuàng)建PID文件。
###2.net:
bindip:<127.0.0.1>
#####描述:mongod/mongos進(jìn)程綁定的IP,application通過(guò)此IPport建立連接。可以綁定在任意網(wǎng)卡接口上,如果你的mongos/mongod只需要內(nèi)網(wǎng)訪問(wèn),可以綁定在內(nèi)網(wǎng)IP,如果需要外網(wǎng)訪問(wèn),那么則綁定外網(wǎng)IP,如果此時(shí)值為“0.0.0.0”,則綁定到所有接口即內(nèi)網(wǎng)、外網(wǎng)IP均可以訪問(wèn)。(不建議)可以綁定多個(gè)IP上,IP地址之間用“,”分割。
port:27017
#####描述:mongos、mongod偵聽(tīng)端口,默認(rèn)27017;不過(guò)因?yàn)閙ongodb有兩種典型的架構(gòu)模式:replica set 和sharding,如果開(kāi)發(fā)者在一個(gè)節(jié)點(diǎn)上部署多個(gè)mongod實(shí)例,需要注意修改此端口已避免沖突。
maxincomconnections:65536
#####描述:mongod/mongos進(jìn)程允許的最大連接數(shù),如果此值超過(guò)操作系統(tǒng)的配置的連接數(shù)閥值,將不會(huì)生效(ulimit);默認(rèn)值為65536.通常客戶端將會(huì)使用連接池機(jī)制,可以有效的控制每個(gè)客戶端的連接個(gè)數(shù)。
wireObjectCheck:true
#####描述:當(dāng)客戶端寫(xiě)入數(shù)據(jù)時(shí),mongod/mongos是否檢測(cè)數(shù)據(jù)的有效性(BSON),如果數(shù)據(jù)格式不良,此inster、update操作將會(huì)被拒絕;默認(rèn)為true
ipv6:false
#####描述“是否支持mongos/mongod多個(gè)實(shí)例之間使用IPV6網(wǎng)絡(luò),默認(rèn)值為false。此值需要整個(gè)cluster中保持一致。
###3.storage:
dbpath:db
#####描述:mongod進(jìn)程存儲(chǔ)數(shù)據(jù)目錄,此配置僅對(duì)mongod有效。默認(rèn)值為:/data/db
indexBuildRetry:true
#####描述:當(dāng)構(gòu)建索引時(shí)mongod意外關(guān)閉,那么在次啟動(dòng)是否重新構(gòu)建索引;索引構(gòu)建失敗,mongod重啟后將會(huì)刪除尚未完成的索引,但是否重建由此參數(shù)決定。默認(rèn)值為true。
repairPath:_tmp
#####描述:配合--repair啟動(dòng)命令參數(shù),在repair期間使用此目錄存儲(chǔ)臨時(shí)數(shù)據(jù),repair結(jié)束此目錄下數(shù)據(jù)將被刪除,此配置僅對(duì)mongod進(jìn)程有效,不建議在配置文件中配置,而是使用mongod啟動(dòng)命令指定。
engine:mmapv1
#####描述:存儲(chǔ)引擎類型,mongod3.0之后支持“mmapv1”、“wiredTiger”兩種引擎,默認(rèn)值為“mmapv1”;官方宣稱wiredTiger引擎更加優(yōu)秀。
journal:enable;true
#####描述:是否開(kāi)啟journal日志持久存儲(chǔ),journal日志用來(lái)數(shù)據(jù)恢復(fù),是mongod最基礎(chǔ)的特性,通常用于故障恢復(fù)。64位系統(tǒng)默認(rèn)為true,32位默認(rèn)為false,建議開(kāi)啟,僅對(duì)mongod進(jìn)程有效。
directoryPerDB:false
#####描述:是否將不同DB的數(shù)據(jù)存儲(chǔ)在不同的目錄中,dbPath的子目錄,目錄名為db的名稱。對(duì)已經(jīng)存儲(chǔ)數(shù)據(jù)的mongod修改此值,需要首先使用mongodump指令將數(shù)據(jù)導(dǎo)出,然后關(guān)閉mongod,再修改此值和指定新的dbPath,然后使用mongorestore指令重新導(dǎo)入數(shù)據(jù)。(即導(dǎo)出數(shù)據(jù),并使用mongorestore將數(shù)據(jù)重新寫(xiě)入mongod的新目錄)
#####對(duì)于replica set架構(gòu)模式,只需要在每個(gè)secondary依次操作:關(guān)閉secondary ,然后配置新的dbPath,然后啟動(dòng)即可(會(huì)執(zhí)行初始化sync,從primary中將數(shù)據(jù)去完全同步到本地)。最好操作primary。此參數(shù)僅對(duì)mongod進(jìn)程有效,默認(rèn)值為false,不建議修改此值
syncPeriodSecs:60
#####描述:mongod使用fsync操作將數(shù)據(jù)flush到磁盤(pán)的時(shí)間間隔,默認(rèn)值為60(單位:秒),強(qiáng)烈建議不要修改此值;mongod將變更的數(shù)據(jù)寫(xiě)入journal后寫(xiě)入內(nèi)存,并間歇性的將內(nèi)存數(shù)據(jù)flush到磁盤(pán)中,即延遲寫(xiě)入磁盤(pán),有效提升磁盤(pán)效率。此指令不影響journal存儲(chǔ),僅對(duì)mongod有效。
mmapv1:(如下配置僅對(duì)MMAPV1引擎生效)
quota:enforce;false
#####描述:配額管理,是否限制每個(gè)DB所能持有的最大文件數(shù)據(jù),僅對(duì)mongod有效,默認(rèn)值為false,建議保持默認(rèn)值。
maxFilesPerDB:8
#####描述:如果enforce開(kāi)啟,每個(gè)DB所持有的存儲(chǔ)文件不會(huì)超過(guò)此閥值。僅對(duì)mongod進(jìn)程有效。
smallFile:false
#####描述:是否使用小文件存儲(chǔ)數(shù)據(jù);如果此值為true,mongod將會(huì)限定每個(gè)數(shù)據(jù)文件的大小為512M(默認(rèn)最大為2G),journal降低到128M(默認(rèn)為1G)如果DB的數(shù)據(jù)量較大,將會(huì)導(dǎo)致每個(gè)DB創(chuàng)建大量的小文件,這對(duì)性能有一定的影響。在production環(huán)境下,不建議修改此值,在測(cè)試時(shí)可以設(shè)置為true,節(jié)約磁盤(pán)。
journal:commitlntervalMs:100
#####描述:mongod進(jìn)程提交journal日志的時(shí)間間隔,即fsync的間隔。考慮到磁盤(pán)效果,mongod間歇性的flush日志數(shù)據(jù);此值越小,數(shù)據(jù)丟失的可能性越低,磁盤(pán)消耗越低,性能越低。如果希望write操作強(qiáng)制立即寫(xiě)入journal,可以傳遞參數(shù)選項(xiàng)“journal:true”(在客戶端write操作中指定此選項(xiàng)即可),此操作(包括此前尚未提交的)將會(huì)立即fsync到磁盤(pán)。僅對(duì)mongod有效,單位:毫秒
#####nsSize:每個(gè)database的namespace文件的大小,默認(rèn)為16,單位:M;最大值可以設(shè)置為2048,即會(huì)增加一下“.ns”后綴文件的大小。16M基本上可以保存24000條命名條目,新建一個(gè)collection或者index信息,即會(huì)增加一個(gè)namespace條目;如果你的database下需要?jiǎng)?chuàng)建大量的collection(比如數(shù)據(jù)分析),則可以適度調(diào)大此值。
wiredTiger:(如下配置僅對(duì)wiredTiger引擎生效 3.0以上版本)
engineConfig:cacheSizeGB:8
#####描述:wiredTiger緩存工作集(working set)數(shù)據(jù)的內(nèi)存大小,單位:GB,此值決定了wiredTiger與mmapv1的內(nèi)存模型不同,它可以限制mongod對(duì)內(nèi)存的使用量,而mmapv1則不能(依賴于系統(tǒng)級(jí)別的mmap)。默認(rèn)情況下,cacheSizeGB的值為假定當(dāng)前節(jié)點(diǎn)只部署一個(gè)mongod實(shí)例,此值的大小為物理內(nèi)存的一半;如果當(dāng)前節(jié)點(diǎn)部署了多個(gè)mongod進(jìn)程,那么需要合理配置此值。如果mongod部署在虛擬容器中(比如,lxc,cgroups,Docker)等,它將不能的使用整個(gè)系統(tǒng)的物理內(nèi)存,則需要適當(dāng)調(diào)整此值。默認(rèn)值為物理內(nèi)存的一半。
journalCompressor:snappy
#####描述:journal日志的壓縮算法,可選值為“none”"snappy"、“zlib”
directoryForlndexes:false
#####描述:是否將索引和collection數(shù)據(jù)分別存儲(chǔ)在dbPath單獨(dú)的目錄中。即index數(shù)據(jù)保存“index”子目錄,collection數(shù)據(jù)保存在“collection”子目錄,默認(rèn)值為false,僅對(duì)mongod有效。
collectionconfig:
blockCompressor:snappy
#####描述:collection數(shù)據(jù)壓縮算法,可選值“none”、“snappy”、“zlib”。開(kāi)發(fā)者在創(chuàng)建collection時(shí)可以指定值,以覆蓋此配置項(xiàng)。如果mongod中已經(jīng)存在數(shù)據(jù),修改次值不會(huì)帶來(lái)問(wèn)題,舊數(shù)據(jù)仍然使用原來(lái)的算法解壓,新數(shù)據(jù)文件將會(huì)采用新的解壓縮算法。
indexConfig:
prefixcompress:true
#####描述:是否對(duì)索引數(shù)據(jù)使用“前綴壓縮”(prefix compress,一種算法)。前綴壓縮,對(duì)那些經(jīng)過(guò)排序的值存儲(chǔ),有很大的幫助,可以有效的減少數(shù)據(jù)的內(nèi)存使用量,默認(rèn)值為true.
###4.operationProfiling:
slowOpThresholdMs:100
####描述:數(shù)據(jù)庫(kù)profile判定一個(gè)操作是”慢查詢“的時(shí)間閥值,單位毫秒;mongdb將會(huì)把慢查詢記錄到日志中,即使profile被關(guān)閉。當(dāng)profile開(kāi)啟時(shí),慢查詢記錄還會(huì)被寫(xiě)入”system.profile“這個(gè)系統(tǒng)的collection中,默認(rèn)值只對(duì)mongd進(jìn)程有效。
mode :off
####描述:數(shù)據(jù)庫(kù)profiler級(jí)別,操作的性能信息將會(huì)被寫(xiě)入日志文件中,可選值:
1)off:關(guān)閉profiling
2)slowOp:on,只包含操作日志
3)all:on,記錄所有操作
數(shù)據(jù)庫(kù)profiling會(huì)影響性能,建議只在性能調(diào)試階段開(kāi)啟。此參數(shù)僅對(duì)mongd有效。
###5.replication:(復(fù)制集架構(gòu)模式配置,如果只是單點(diǎn),則無(wú)需配置)
oplogSizeMB:10240
#####描述:replication操作日志的最大尺寸,單位:MB。mongod進(jìn)程根據(jù)磁盤(pán)最大可用空間來(lái)創(chuàng)建oplog,比如64位操作系統(tǒng),oplog為磁盤(pán)可用空間的5%,一旦mongd創(chuàng)建了oplog文件,此后再次修改oplogSizeMB將不會(huì)生效。此值不要設(shè)置的大小,應(yīng)該足以保存24小時(shí)的操作日志,以保證secondary有充足的維護(hù)時(shí)間;如果太小,secondary將不能通過(guò)oplog來(lái)同步數(shù)據(jù),只能全量同步,此值僅對(duì)mongd有效。
enableMajorityReadConcern:false
####描述:是否開(kāi)啟readConcern的級(jí)別為“majority”,默認(rèn)值為false;只有開(kāi)啟此選項(xiàng),才能在read操作中使用“majority”。(3.2+版本)
replSetName: <無(wú)默認(rèn)值>
####描述:“復(fù)制集”的名稱,復(fù)制集中的所有mongd實(shí)例都必須有相同的名字,sharding分布式下,不同的sharding應(yīng)該使用不同的replSetName。僅對(duì)mongod有效
secondaryIndexPrefetch: all
#### 描述:只對(duì)mmapv1存儲(chǔ)引擎有效。復(fù)制集中的secondary,從oplog中運(yùn)用變更操作之前,將會(huì)先把索引加載到內(nèi)存中,默認(rèn)情況下,secondaries首先將操作相關(guān)的索引加載到內(nèi)存,然后再根據(jù)oplog應(yīng)用操作。可選值:
1)none:secondaries不將索引數(shù)據(jù)加載到內(nèi)容
2)all:sencondaries將此操作有關(guān)的索引數(shù)據(jù)加載到內(nèi)存
3)_id_only:只加載_id索引
默認(rèn)值為:all,此配置僅對(duì)mongod有效。
localPingThresholdMs: 15
####描述:ping時(shí)間,單位:毫秒,mongos用來(lái)判定將客戶端read請(qǐng)求發(fā)給哪個(gè)secondary。僅對(duì)mongos有效。默認(rèn)值為15,和客戶端driver中的默認(rèn)值一樣。當(dāng)mongos接收到客戶端read請(qǐng)求,它將:
1、找出復(fù)制集中ping值最小的member。
2、將延遲值被此值允許的members,構(gòu)建一個(gè)列表
3、從列表中隨機(jī)選擇一個(gè)member。
####ping值是動(dòng)態(tài)值,每10秒計(jì)算一次。mongos將客戶端請(qǐng)求轉(zhuǎn)發(fā)給延遲較小(與此值相比)的某個(gè)secondary節(jié)點(diǎn)。僅對(duì)mongos有效。
###6sharding:(僅對(duì)sharding架構(gòu)模式下有效)
clusterRole: <無(wú)默認(rèn)值>
####描述:在sharding集群中,此mongod實(shí)例的角色,可選值:
1、configsvr:此實(shí)例為config server,此實(shí)例默認(rèn)偵聽(tīng)27019端口
2、shardsvr:此實(shí)例為shard(分片),偵聽(tīng)27018端口
此配置僅對(duì)mongod有效。通常config server和sharding server需要使用各自的配置文件。
archiveMovedChunks: true
####描述:當(dāng)chunks因?yàn)椤柏?fù)載平衡”而遷移到其他節(jié)點(diǎn)時(shí),mongod是否將這些chunks歸檔,并保存在dbPath下“moveChunk”目錄下,mongod不會(huì)刪除moveChunk下的文件。默認(rèn)為true。
autoSplit: true
####描述:是否開(kāi)啟sharded collections的自動(dòng)分裂,僅對(duì)mongos有效。如果所有的mongos都設(shè)定為false,那么collections數(shù)據(jù)增長(zhǎng)但不能分裂成新的chunks。因?yàn)榧褐腥魏我粋€(gè)mongos進(jìn)程都可以觸發(fā)split,所以此值需要在所有mongos行保持一致。僅對(duì)mongos有效。
configDB: <無(wú)默認(rèn)值>
####描述:設(shè)定config server的地址列表,每個(gè)server地址之間以“,”分割,通常sharded集群中指定1或者3個(gè)config server。(生產(chǎn)環(huán)境,通常是3個(gè)config server,但1個(gè)也是可以的)。所有的mongos實(shí)例必須配置一樣,否則可能帶來(lái)不必要的問(wèn)題。僅對(duì)mongos有效。
chunkSize: 64
####描述:sharded集群中每個(gè)chunk的大小,單位:MB,默認(rèn)為64,此值對(duì)于絕大多數(shù)應(yīng)用而言都是比較理想的。chunkSize太大會(huì)導(dǎo)致分布不均,太小會(huì)導(dǎo)致分裂成大量的chunk而經(jīng)常移動(dòng)
##整個(gè)sharding集群中,此值需要保持一致,集群?jiǎn)?dòng)后修改此值將不再生效。僅對(duì)mongos有效。
###7、sytemsLog:(系統(tǒng)日志,必須配置)
verbosity: 0
###描述:日志級(jí)別,0:默認(rèn)值,包含“info”信息,1~5,即大于0的值均會(huì)包含debug信息
quiet: true
####描述:"安靜",此時(shí)mongod/mongos將會(huì)嘗試減少日志的輸出量。不建議在production環(huán)境下開(kāi)啟,否則將會(huì)導(dǎo)致跟蹤錯(cuò)誤比較困難。
traceAllExceptions: true
####描述:打印異常詳細(xì)信息。
path: logs/mongod.log
logAppend: false
####描述:如果為true,當(dāng)mongod/mongos重啟后,將在現(xiàn)有日志的尾部繼續(xù)添加日志。否則,將會(huì)備份當(dāng)前日志文件,然后創(chuàng)建一個(gè)新的日志文件;默認(rèn)為false。
logRotate: rename
####描述:日志“回轉(zhuǎn)”,防止一個(gè)日志文件特別大,則使用logRotate指令將文件“回轉(zhuǎn)”,可選值:
1)rename:重命名日志文件,默認(rèn)值。
2)reopen:使用linux日志rotate特性,關(guān)閉并重新打開(kāi)此日志文件,可以避免日志丟失,但是logAppend必須為true。
destination: file
####描述:日志輸出目的地,可以指定為“ file”或者“syslog”,表述輸出到日志文件,如果不指定,則會(huì)輸出到標(biāo)準(zhǔn)輸出中(standard output)。
###8、與安全有關(guān)的配置(摘要介紹)
####Java代碼 收藏代碼
###security:
authorization: enabled
clusterAuthMode: keyFile
keyFile: /srv/mongodb/keyfile
javascriptEnabled: true
###setParameter:
enableLocalhostAuthBypass: true
authenticationMechanisms: SCRAM-SHA-1
1)authorization:disabled或者enabled,僅對(duì)mongod有效;表示是否開(kāi)啟用戶訪問(wèn)控制(Access Control),即客戶端可以通過(guò)用戶名和密碼認(rèn)證的方式訪問(wèn)系統(tǒng)的數(shù)據(jù),默認(rèn)為“disabled”,即客戶端不需要密碼即可訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)。(限定客戶端與mongod、mongos的認(rèn)證)
2)clusterAuthMode:集群中members之間的認(rèn)證模式,可選值為“keyFile”、“sendKeyFile”、“sendX509”、“x509”,對(duì)mongod/mongos有效;默認(rèn)值為“keyFile”,mongodb官方推薦使用x509,不過(guò)我個(gè)人覺(jué)得還是keyFile比較易于學(xué)習(xí)和使用。不過(guò)3.0版本中,mongodb增加了對(duì)TLS/SSL的支持,如果可以的話,建議使用SSL相關(guān)的配置來(lái)認(rèn)證集群的member,此文將不再介紹。(限定集群中members之間的認(rèn)證)
3)keyFile:當(dāng)clusterAuthMode為“keyFile”時(shí),此參數(shù)指定keyfile的位置,mongodb需要有訪問(wèn)此文件的權(quán)限。
4)javascriptEnabled:true或者false,默認(rèn)為true,僅對(duì)mongod有效;表示是否關(guān)閉server端的javascript功能,就是是否允許mongod上執(zhí)行javascript腳本,如果為false,那么mapreduce、group命令等將無(wú)法使用,因?yàn)樗鼈冃枰趍ongod上執(zhí)行javascript腳本方法。如果你的應(yīng)用中沒(méi)有mapreduce等操作的需求,為了安全起見(jiàn),可以關(guān)閉javascript。
“setParameter”允許指定一些的Server端參數(shù),這些參數(shù)不依賴于存儲(chǔ)引擎和交互機(jī)制,只是微調(diào)系統(tǒng)的運(yùn)行狀態(tài),比如“認(rèn)證機(jī)制”、“線程池參數(shù)”等。參見(jiàn)【parameter】
1)enableLocalhostAuthBypass:true或者false,默認(rèn)為true,對(duì)mongod/mongos有效;表示是否開(kāi)啟“l(fā)ocalhost exception”,對(duì)于sharding cluster而言,我們傾向于在mongos上開(kāi)啟,在shard節(jié)點(diǎn)的mongod上關(guān)閉。
2)authenticationMechanisms:認(rèn)證機(jī)制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”,對(duì)mongod/mongos有效;一旦選定了認(rèn)證機(jī)制,客戶端訪問(wèn)databases時(shí)需要與其匹配才能有效。
###9、與性能有關(guān)的參數(shù)
##Java代碼 收藏代碼
###setParameter:
connPoolMaxShardedConnsPerHost: 200
connPoolMaxConnsPerHost: 200
notablescan: 0
1)connPoolMaxShardedConnsPerHost:默認(rèn)值為200,對(duì)mongod/mongos有效;表示當(dāng)前mongos或者shard與集群中其他shards鏈接的鏈接池的最大容量,此值我們通常不會(huì)調(diào)整。連接池的容量不會(huì)阻止創(chuàng)建新的鏈接,但是從連接池中獲取鏈接的個(gè)數(shù)不會(huì)超過(guò)此值。維護(hù)連接池需要一定的開(kāi)支,保持一個(gè)鏈接也需要占用一定的系統(tǒng)資源。
2)connPoolMaxConnsPerHost:默認(rèn)值為200,對(duì)mongod/mongos有效;同上,表示mongos或者mongod與其他mongod實(shí)例之間的連接池的容量,根據(jù)host限定。
##配置樣例
####mongodb 3.0之后配置文件采用YAML格式,這種格式非常簡(jiǎn)單,使用<key>:<value>表示,開(kāi)頭使用“空格”作為縮進(jìn)。需要注意的是,“:”之后有value的話,需要緊跟一個(gè)空格,如果key只是表示層級(jí),則無(wú)需在“:”后增加空格(比如:systemLog:后面既不需要空格)。按照層級(jí),每行4個(gè)空格縮進(jìn),第二級(jí)則8個(gè)空格,依次輪推,頂層則不需要空格縮進(jìn)。如果格式不正確,將會(huì)出現(xiàn)如下錯(cuò)誤:
###Java代碼 收藏代碼
Error parsing YAML config file: yaml-cpp: error at line 3, column 1: illegal tab when looking for indentation
Error parsing YAML config file: yaml-cpp: error at line 15, column 12: illegal map value
###1、mongod.conf
###Java代碼 收藏代碼
###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
####如果你的架構(gòu)模式為replication Set,那么還需要在所有的“復(fù)制集”members上增加如下配置:
###Java代碼 收藏代碼
###replication:
oplogSizeMB: 10240
replSetName: rs0
secondaryIndexPrefetch: all
####如果為sharding Cluster架構(gòu),則需要在shard節(jié)點(diǎn)增加如下配置:
###Java代碼 收藏代碼
####sharding:
clusterRole: shardsvr
archiveMovedChunks: true
####當(dāng)然,一個(gè)mongod實(shí)例即可以為“復(fù)制集”的member之一,也可以作為sharding集群中的一個(gè)分片,這取決你的架構(gòu)模式。
####mongod進(jìn)程可以做為“config server”實(shí)例,只需要將“clusterRole: configsvr”即可;由此可見(jiàn),一個(gè)mongod實(shí)例可以為“單點(diǎn)實(shí)例”、“config server”、“sharding server” + “replication set member”其中一個(gè)角色,建議使用不同的配置文件啟動(dòng)它。
###2、mongos.conf
###Java代碼 收藏代碼
###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實(shí)例不需要存儲(chǔ)實(shí)際的數(shù)據(jù),對(duì)內(nèi)存有一定的消耗,在sharding架構(gòu)模式下使用;mongos需接收向客戶端請(qǐng)求(后端的sharded和replication set則不需要讓客戶端知道),它可以將客戶端請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)分片集群上(分片集群基于復(fù)制集)延遲相對(duì)較小的secondary上,同時(shí)還負(fù)責(zé)chunk的分裂和遷移工作。
##其他
###1、啟動(dòng)與關(guān)閉
####配置文件中絕大部分參數(shù),都可以通過(guò)進(jìn)程啟動(dòng)命令指定,通常啟動(dòng)命令行中的參數(shù)將覆蓋配置文件中的參數(shù)。
####Java代碼 收藏代碼
./mongod -f mongod.conf
####當(dāng)然,也可以通過(guò)使用多個(gè)命令行參數(shù)來(lái)啟動(dòng),如下僅為示例:
###Java代碼 收藏代碼
./mongod --bind_ip 127.0.0.1 --port 27017 --dbpath /data/mongodb/db --logpath /data/mongodb/logs --storageEngine mmapv1 --fork
####mongod配置中所指定的目錄地址必須首先創(chuàng)建,否則將無(wú)法啟動(dòng),這有別與其他系統(tǒng)。
#####mongos啟動(dòng)方式同上。如果希望基于service方式啟動(dòng)mongod、mongos,請(qǐng)參考其他文檔。可以通過(guò)kill指令來(lái)關(guān)閉mongod進(jìn)程,不過(guò)這種方式有些粗暴,在production環(huán)境中可能會(huì)導(dǎo)致數(shù)據(jù)損壞,建議使用mongo shell來(lái)“cleanly”關(guān)閉mongod進(jìn)程,這種方式安全而且不會(huì)導(dǎo)致數(shù)據(jù)損壞。
###Java代碼 收藏代碼
./mongo
> use admin;
> db.shutdownServer();
####可以使用“kill <mongod process ID>”的方式關(guān)閉,這種方式也是“cleanly”;如果使用“kill -9 ”方式就是強(qiáng)制線程退出,可能會(huì)導(dǎo)致數(shù)據(jù)丟失。如果在非fork下運(yùn)行mongod,直接在shell上使用“CTRL-C”方式也是“cleanly”退出。對(duì)于線上環(huán)境,最好不要“kill -9”。
###2、repair
####“修復(fù)”數(shù)據(jù)庫(kù),當(dāng)mongodb運(yùn)行一段時(shí)間之后,特別是經(jīng)過(guò)大量刪除、update操作之后,我們可以使用repair指令對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行“repair”,它將整理、壓縮底層數(shù)據(jù)存儲(chǔ)文件,重用磁盤(pán)空間,相當(dāng)于數(shù)據(jù)重新整理了一遍,對(duì)數(shù)據(jù)優(yōu)化有一定的作用。
####如果mongod沒(méi)有開(kāi)啟journaling日志功能,repair指令可以在系統(tǒng)異常crash之后,用于整理數(shù)據(jù)、消除損壞數(shù)據(jù);如果開(kāi)啟了journaling日志功能,我們則需不要使用repair來(lái)修復(fù)數(shù)據(jù),因?yàn)閖ournal就可以幫助mongod恢復(fù)數(shù)據(jù)。在replication set模式下,可以使用repair,但是通常可以直接刪除舊數(shù)據(jù),使用“數(shù)據(jù)同步”操作,即可達(dá)到“恢復(fù)”、“整理”數(shù)據(jù)的目的,效果和repair一樣,而且效率更高。
####repair需要磁盤(pán)有一定的剩余空間,為當(dāng)前database數(shù)據(jù)量 + 2GB,可以通過(guò)使用“--repairpath”來(lái)指定repair期間存儲(chǔ)臨時(shí)數(shù)據(jù)的目錄。repair指令還會(huì)重建indexes,可以降低索引的數(shù)據(jù)大小。
####如果mongod意外crash,需要首先正常啟動(dòng)mongod,讓根據(jù)journal日志恢復(fù)完數(shù)據(jù)之后,才能執(zhí)行repair;如果journal日志有數(shù)據(jù)尚未恢復(fù),那么使用repair指令啟動(dòng)mongod將會(huì)失敗。
####repair時(shí)需要關(guān)閉mongod進(jìn)程,執(zhí)行完畢后再啟動(dòng)。
###Java代碼 收藏代碼
./mongod --dbpath=/data/mongodb/db --repair
####mongodb比較傾向于使用shell來(lái)repair特定的database,這個(gè)操作相對(duì)比較可控,其內(nèi)部工作機(jī)制一樣。
###Java代碼 收藏代碼
>./mongo
>user mydatabase;
>db.repairDatabase();
###3、mongodump與mongorestore
####我們通常會(huì)使用到mongodb數(shù)據(jù)的備份功能,或者將一個(gè)備份導(dǎo)入到一個(gè)新的mongod實(shí)例中(數(shù)據(jù)冷處理),那么就需要借助這兩個(gè)指令。
#### mongodump將整個(gè)databases全部?jī)?nèi)容導(dǎo)出到一個(gè)二進(jìn)制文件中,可以在其他mongod使用mongorestore來(lái)加載整個(gè)文件。需要注意mongodump不會(huì)導(dǎo)出“l(fā)ocal”數(shù)據(jù)庫(kù)中的數(shù)據(jù),當(dāng)然這個(gè)local庫(kù)對(duì)恢復(fù)數(shù)據(jù)也沒(méi)有太大意義。
#### “-u”參數(shù)指定訪問(wèn)database的用戶名,“-p”指定密碼,“--host”和“--port”指定mongod實(shí)例的位置,“--db”指定需要dump的數(shù)據(jù)庫(kù),如果不指定則dump所有數(shù)據(jù)庫(kù),“--collection”指定需要dump的集合表,如果不指定則dumpl整個(gè)db下的所有collections;“--query <json>”指定dump時(shí)的查詢條件,“--out”指定結(jié)果輸出文件的路徑:
###Java代碼 收藏代碼
>./mongodump --host m1.com --port 27017 -u root -p pass --out /data/mongodb/backup/dump_2015_10_10
####mongorestore則將dump的數(shù)據(jù)文件導(dǎo)入到database,mongorestore可以創(chuàng)建新的database或者將數(shù)據(jù)添加到現(xiàn)有的database中。如果將數(shù)據(jù)restore到已經(jīng)存在的database中,mongorestore僅執(zhí)行insert,不會(huì)執(zhí)行update,如果數(shù)據(jù)庫(kù)中已經(jīng)存在相同的“_id”數(shù)據(jù),mongorestore不會(huì)覆蓋原有的document。mongorestore會(huì)重新創(chuàng)建indexes,所有的操作都是insert而不會(huì)update。
####基本指令類似于mongodump,“--db”指定需要將數(shù)據(jù)restore到哪個(gè)db中,如果此db不存在,則創(chuàng)建;如果沒(méi)有指定“--db”,mongorestore則根據(jù)原始數(shù)據(jù)所屬的db重新創(chuàng)建,這可能會(huì)導(dǎo)致數(shù)據(jù)覆蓋。“--drop”表示在restore數(shù)據(jù)之前,首先刪除目標(biāo)db中原有的collections,--drop不會(huì)刪除那些在dump文件中沒(méi)有的collection。“--stopOnError”表示出錯(cuò)時(shí)強(qiáng)制退出。
###Java代碼 收藏代碼
./mongorestore --db mydatabase /data/mongodb/backup/dump_2015_10_10
###4、mongoimport和mongoexport
####mongoexport將數(shù)據(jù)導(dǎo)出為JSON或者CSV格式,以便其他應(yīng)用程序解析。
####因?yàn)閙ongodb數(shù)據(jù)是BSON格式,有些數(shù)據(jù)類型是JSON不具有的,所以導(dǎo)出JSON格式會(huì)仍然會(huì)丟失數(shù)據(jù)類型;所以如果導(dǎo)出的數(shù)據(jù)是準(zhǔn)備給其他mongodb恢復(fù)數(shù)據(jù),那么建議使用mongodump和mongorestore。
####命令參數(shù)同3)
###5、mongostat指令可以間歇性的打印出當(dāng)前mongod實(shí)例中“數(shù)據(jù)存儲(chǔ)”、“flush”、讀寫(xiě)次數(shù)、網(wǎng)絡(luò)輸出等參數(shù),是查看mongod性能的有效手段。mongotop可以根據(jù)查看各個(gè)database下讀寫(xiě)情況。
###6、mongo shell操作簡(jiǎn)述:
1)help:列出所有的function
2)show dbs:展示當(dāng)前實(shí)例中所有的databases。
3)use <dbname>:切換到指定的db,接下來(lái)的操作將會(huì)在此db中。
4)show collections:展示出當(dāng)前db中所有的collections。
5)show users:展示當(dāng)前db中已經(jīng)添加的所有用戶。
6)show roles:展示當(dāng)前db中所有內(nèi)置的或者自定義的用戶角色。
7)show profile:這涉及到profile相關(guān)的配置,默認(rèn)情況下展示出最近5個(gè)操作耗時(shí)超過(guò)1秒的操作,通常用于跟蹤慢查詢。
8)db.help():展示出可以在db上進(jìn)行的操作function。
9)db.<collection>.help():展示出可以在colleciton上進(jìn)行的操作。
本文名稱:短時(shí)間上手MongoDB
網(wǎng)站路徑:http://chinadenli.net/article2/gegcic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、關(guān)鍵詞優(yōu)化、網(wǎng)站制作、服務(wù)器托管、網(wǎng)站收錄、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)