欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

短時(shí)間上手MongoDB

什么是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ù)組。

![](/upload/otherpic53/99634.jpg)

##主要特點(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)

微信小程序開(kāi)發(fā)