溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

短時間上手MongoDB

發(fā)布時間:2020-07-24 07:40:57 來源:網(wǎng)絡(luò) 閱讀:959 作者:太湖春春 欄目:數(shù)據(jù)庫

什么是MongoDB

MongoDB是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。

在高負(fù)載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。

MongoDB旨在為web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。

MongoDB將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB文檔類似于JSON對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。

![](https://cache.yisu.com/upload/information/20200310/34/99634.jpg)


##主要特點

* MongoDB的提供了一個面向文檔 存儲,操作起來比較簡單和容易。

* 可以在MongoDB記錄中設(shè)置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現(xiàn)更快的排序。

* 可以通過本地或者網(wǎng)絡(luò)創(chuàng)建數(shù)據(jù)鏡像,這使得MongDB有更強(qiáng)的擴(kuò)展性。

* 如果負(fù)載的增加(需要更多的存儲空間和更強(qiáng)的處理能力),他可以分布在計算機(jī)網(wǎng)絡(luò)其他節(jié)點上,這就是所謂的分片。

* MongoDB支持豐富份查詢表達(dá)式,查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組。

* MongoDB使用update()命令可以實現(xiàn)替換完成的文檔(數(shù)據(jù))或者一些指定的數(shù)據(jù)字段。

* MongoDB中的Map/reduce主要用來對數(shù)據(jù)進(jìn)行批量處理和聚合操作。

* map和reduce。Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,將key和value傳給reduce函數(shù)處理。

* map函數(shù)和reduce函數(shù)使用JavaScript編寫的并可以通過db.runcommand或marpreduce命令執(zhí)行MapReduce操作。

* GridFS是MongDB中的一個內(nèi)置功能,可以用于存放大量小文件。

* MongoDB允許在服務(wù)端執(zhí)行腳本,可以用JavaScript編寫某個函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。

* MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++.PHP,C#等多種語言。

* MongoDB安裝簡單。


##MongoDB工具

有幾種可用于MongoDB的管理工具。

###監(jiān)控

MongoDB提供了網(wǎng)絡(luò)和系統(tǒng)監(jiān)控工具M(jìn)unin,它作為一個插件應(yīng)用于MongoDB中。

Gangila是MongoDB高性能的系統(tǒng)監(jiān)視的工具,它作為一個插件應(yīng)用于MongoDB中。

基于圖形界面的開源工具 Cacti, 用于查看CPU負(fù)載, 網(wǎng)絡(luò)帶寬利用率,它也提供了一個應(yīng)用于監(jiān)控 MongoDB 的插件。

###GUI

* Fang of Mongo – 網(wǎng)頁式,由Django和jQuery所構(gòu)成。

* Futon4Mongo – 一個CouchDB Futon web的mongodb山寨版。

* Mongo3 – Ruby寫成。

* MongoHub – 適用于OSX的應(yīng)用程序。

* Opricot – 一個基于瀏覽器的MongoDB控制臺, 由PHP撰寫而成。

* Database Master — Windows的mongodb管理工具

* RockMongo — 最好的PHP語言的MongoDB管理工具,輕量級, 支持多國語言.



##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 #使用追加的方式寫日志

fork=true #以守護(hù)程序的方式啟用,即在后臺運(yùn)行

maxConns=5000 #最大同時連接數(shù) 默認(rèn)2000

bind_ip=127.0.0.1,172.16.20.126 #只允許通過局域網(wǎng)IP:172.16.20.126及本機(jī)訪問

noauth=true #不啟用驗證

nohttpinterface=true

rest=false



###4.環(huán)境變量設(shè)置

echo 'export PATH=/application/mongodb/bin:$PATH' >>  /etc/profile

source /etc/profile




###5.啟動與關(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.開機(jī)自動啟動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個進(jìn)程啟動文件:mongod和mongos;其中mongod是核心基礎(chǔ)進(jìn)程,用來接收讀寫請求、負(fù)責(zé)存儲實際數(shù)據(jù),mongodb實例是構(gòu)成集群的基本單位,比如Replication set、sharding Cluster、Config Servers等;mongos是Sharding Cluster架構(gòu)模式中法人“路由”進(jìn)程,即客戶端請求訪問mongos,然后有mongos將請求轉(zhuǎn)發(fā)給合適的sharding server執(zhí)行操作,并將result返回給客戶端,所以mongos基本不存儲數(shù)據(jù),只是內(nèi)存中緩存部分shark key與sharding server的對應(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寫入指定的文件,如果不指定,將不會創(chuàng)建PID文件。


###2.net:

bindip:<127.0.0.1>

#####描述:mongod/mongos進(jìn)程綁定的IP,application通過此IPport建立連接??梢越壎ㄔ谌我饩W(wǎng)卡接口上,如果你的mongos/mongod只需要內(nèi)網(wǎng)訪問,可以綁定在內(nèi)網(wǎng)IP,如果需要外網(wǎng)訪問,那么則綁定外網(wǎng)IP,如果此時值為“0.0.0.0”,則綁定到所有接口即內(nèi)網(wǎng)、外網(wǎng)IP均可以訪問。(不建議)可以綁定多個IP上,IP地址之間用“,”分割。

port:27017

#####描述:mongos、mongod偵聽端口,默認(rèn)27017;不過因為mongodb有兩種典型的架構(gòu)模式:replica set 和sharding,如果開發(fā)者在一個節(jié)點上部署多個mongod實例,需要注意修改此端口已避免沖突。

maxincomconnections:65536

#####描述:mongod/mongos進(jìn)程允許的最大連接數(shù),如果此值超過操作系統(tǒng)的配置的連接數(shù)閥值,將不會生效(ulimit);默認(rèn)值為65536.通常客戶端將會使用連接池機(jī)制,可以有效的控制每個客戶端的連接個數(shù)。

wireObjectCheck:true

#####描述:當(dāng)客戶端寫入數(shù)據(jù)時,mongod/mongos是否檢測數(shù)據(jù)的有效性(BSON),如果數(shù)據(jù)格式不良,此inster、update操作將會被拒絕;默認(rèn)為true

ipv6:false

#####描述“是否支持mongos/mongod多個實例之間使用IPV6網(wǎng)絡(luò),默認(rèn)值為false。此值需要整個cluster中保持一致。



###3.storage:

dbpath:db

#####描述:mongod進(jìn)程存儲數(shù)據(jù)目錄,此配置僅對mongod有效。默認(rèn)值為:/data/db

indexBuildRetry:true

#####描述:當(dāng)構(gòu)建索引時mongod意外關(guān)閉,那么在次啟動是否重新構(gòu)建索引;索引構(gòu)建失敗,mongod重啟后將會刪除尚未完成的索引,但是否重建由此參數(shù)決定。默認(rèn)值為true。

repairPath:_tmp

#####描述:配合--repair啟動命令參數(shù),在repair期間使用此目錄存儲臨時數(shù)據(jù),repair結(jié)束此目錄下數(shù)據(jù)將被刪除,此配置僅對mongod進(jìn)程有效,不建議在配置文件中配置,而是使用mongod啟動命令指定。

engine:mmapv1

#####描述:存儲引擎類型,mongod3.0之后支持“mmapv1”、“wiredTiger”兩種引擎,默認(rèn)值為“mmapv1”;官方宣稱wiredTiger引擎更加優(yōu)秀。

journal:enable;true

#####描述:是否開啟journal日志持久存儲,journal日志用來數(shù)據(jù)恢復(fù),是mongod最基礎(chǔ)的特性,通常用于故障恢復(fù)。64位系統(tǒng)默認(rèn)為true,32位默認(rèn)為false,建議開啟,僅對mongod進(jìn)程有效。

directoryPerDB:false

#####描述:是否將不同DB的數(shù)據(jù)存儲在不同的目錄中,dbPath的子目錄,目錄名為db的名稱。對已經(jīng)存儲數(shù)據(jù)的mongod修改此值,需要首先使用mongodump指令將數(shù)據(jù)導(dǎo)出,然后關(guān)閉mongod,再修改此值和指定新的dbPath,然后使用mongorestore指令重新導(dǎo)入數(shù)據(jù)。(即導(dǎo)出數(shù)據(jù),并使用mongorestore將數(shù)據(jù)重新寫入mongod的新目錄)

#####對于replica set架構(gòu)模式,只需要在每個secondary依次操作:關(guān)閉secondary ,然后配置新的dbPath,然后啟動即可(會執(zhí)行初始化sync,從primary中將數(shù)據(jù)去完全同步到本地)。最好操作primary。此參數(shù)僅對mongod進(jìn)程有效,默認(rèn)值為false,不建議修改此值

syncPeriodSecs:60

#####描述:mongod使用fsync操作將數(shù)據(jù)flush到磁盤的時間間隔,默認(rèn)值為60(單位:秒),強(qiáng)烈建議不要修改此值;mongod將變更的數(shù)據(jù)寫入journal后寫入內(nèi)存,并間歇性的將內(nèi)存數(shù)據(jù)flush到磁盤中,即延遲寫入磁盤,有效提升磁盤效率。此指令不影響journal存儲,僅對mongod有效。

mmapv1:(如下配置僅對MMAPV1引擎生效)

quota:enforce;false

#####描述:配額管理,是否限制每個DB所能持有的最大文件數(shù)據(jù),僅對mongod有效,默認(rèn)值為false,建議保持默認(rèn)值。

maxFilesPerDB:8

#####描述:如果enforce開啟,每個DB所持有的存儲文件不會超過此閥值。僅對mongod進(jìn)程有效。

smallFile:false

#####描述:是否使用小文件存儲數(shù)據(jù);如果此值為true,mongod將會限定每個數(shù)據(jù)文件的大小為512M(默認(rèn)最大為2G),journal降低到128M(默認(rèn)為1G)如果DB的數(shù)據(jù)量較大,將會導(dǎo)致每個DB創(chuàng)建大量的小文件,這對性能有一定的影響。在production環(huán)境下,不建議修改此值,在測試時可以設(shè)置為true,節(jié)約磁盤。

journal:commitlntervalMs:100

#####描述:mongod進(jìn)程提交journal日志的時間間隔,即fsync的間隔??紤]到磁盤效果,mongod間歇性的flush日志數(shù)據(jù);此值越小,數(shù)據(jù)丟失的可能性越低,磁盤消耗越低,性能越低。如果希望write操作強(qiáng)制立即寫入journal,可以傳遞參數(shù)選項“journal:true”(在客戶端write操作中指定此選項即可),此操作(包括此前尚未提交的)將會立即fsync到磁盤。僅對mongod有效,單位:毫秒

#####nsSize:每個database的namespace文件的大小,默認(rèn)為16,單位:M;最大值可以設(shè)置為2048,即會增加一下“.ns”后綴文件的大小。16M基本上可以保存24000條命名條目,新建一個collection或者index信息,即會增加一個namespace條目;如果你的database下需要創(chuàng)建大量的collection(比如數(shù)據(jù)分析),則可以適度調(diào)大此值。



wiredTiger:(如下配置僅對wiredTiger引擎生效 3.0以上版本)

engineConfig:cacheSizeGB:8

#####描述:wiredTiger緩存工作集(working set)數(shù)據(jù)的內(nèi)存大小,單位:GB,此值決定了wiredTiger與mmapv1的內(nèi)存模型不同,它可以限制mongod對內(nèi)存的使用量,而mmapv1則不能(依賴于系統(tǒng)級別的mmap)。默認(rèn)情況下,cacheSizeGB的值為假定當(dāng)前節(jié)點只部署一個mongod實例,此值的大小為物理內(nèi)存的一半;如果當(dāng)前節(jié)點部署了多個mongod進(jìn)程,那么需要合理配置此值。如果mongod部署在虛擬容器中(比如,lxc,cgroups,Docker)等,它將不能的使用整個系統(tǒng)的物理內(nèi)存,則需要適當(dāng)調(diào)整此值。默認(rèn)值為物理內(nèi)存的一半。


journalCompressor:snappy

#####描述:journal日志的壓縮算法,可選值為“none”"snappy"、“zlib”


directoryForlndexes:false

#####描述:是否將索引和collection數(shù)據(jù)分別存儲在dbPath單獨的目錄中。即index數(shù)據(jù)保存“index”子目錄,collection數(shù)據(jù)保存在“collection”子目錄,默認(rèn)值為false,僅對mongod有效。


collectionconfig:

blockCompressor:snappy

#####描述:collection數(shù)據(jù)壓縮算法,可選值“none”、“snappy”、“zlib”。開發(fā)者在創(chuàng)建collection時可以指定值,以覆蓋此配置項。如果mongod中已經(jīng)存在數(shù)據(jù),修改次值不會帶來問題,舊數(shù)據(jù)仍然使用原來的算法解壓,新數(shù)據(jù)文件將會采用新的解壓縮算法。


indexConfig:

prefixcompress:true

#####描述:是否對索引數(shù)據(jù)使用“前綴壓縮”(prefix compress,一種算法)。前綴壓縮,對那些經(jīng)過排序的值存儲,有很大的幫助,可以有效的減少數(shù)據(jù)的內(nèi)存使用量,默認(rèn)值為true.


###4.operationProfiling:

slowOpThresholdMs:100

####描述:數(shù)據(jù)庫profile判定一個操作是”慢查詢“的時間閥值,單位毫秒;mongdb將會把慢查詢記錄到日志中,即使profile被關(guān)閉。當(dāng)profile開啟時,慢查詢記錄還會被寫入”system.profile“這個系統(tǒng)的collection中,默認(rèn)值只對mongd進(jìn)程有效。


mode :off

####描述:數(shù)據(jù)庫profiler級別,操作的性能信息將會被寫入日志文件中,可選值:

1)off:關(guān)閉profiling

2)slowOp:on,只包含操作日志

3)all:on,記錄所有操作

數(shù)據(jù)庫profiling會影響性能,建議只在性能調(diào)試階段開啟。此參數(shù)僅對mongd有效。



###5.replication:(復(fù)制集架構(gòu)模式配置,如果只是單點,則無需配置)

oplogSizeMB:10240

#####描述:replication操作日志的最大尺寸,單位:MB。mongod進(jìn)程根據(jù)磁盤最大可用空間來創(chuàng)建oplog,比如64位操作系統(tǒng),oplog為磁盤可用空間的5%,一旦mongd創(chuàng)建了oplog文件,此后再次修改oplogSizeMB將不會生效。此值不要設(shè)置的大小,應(yīng)該足以保存24小時的操作日志,以保證secondary有充足的維護(hù)時間;如果太小,secondary將不能通過oplog來同步數(shù)據(jù),只能全量同步,此值僅對mongd有效。

enableMajorityReadConcern:false

####描述:是否開啟readConcern的級別為“majority”,默認(rèn)值為false;只有開啟此選項,才能在read操作中使用“majority”。(3.2+版本)

replSetName: <無默認(rèn)值>

####描述:“復(fù)制集”的名稱,復(fù)制集中的所有mongd實例都必須有相同的名字,sharding分布式下,不同的sharding應(yīng)該使用不同的replSetName。僅對mongod有效

secondaryIndexPrefetch: all

####  描述:只對mmapv1存儲引擎有效。復(fù)制集中的secondary,從oplog中運(yùn)用變更操作之前,將會先把索引加載到內(nèi)存中,默認(rèn)情況下,secondaries首先將操作相關(guān)的索引加載到內(nèi)存,然后再根據(jù)oplog應(yīng)用操作??蛇x值:

    1)none:secondaries不將索引數(shù)據(jù)加載到內(nèi)容

    2)all:sencondaries將此操作有關(guān)的索引數(shù)據(jù)加載到內(nèi)存

    3)_id_only:只加載_id索引

    默認(rèn)值為:all,此配置僅對mongod有效。

localPingThresholdMs: 15

####描述:ping時間,單位:毫秒,mongos用來判定將客戶端read請求發(fā)給哪個secondary。僅對mongos有效。默認(rèn)值為15,和客戶端driver中的默認(rèn)值一樣。當(dāng)mongos接收到客戶端read請求,它將:

    1、找出復(fù)制集中ping值最小的member。

    2、將延遲值被此值允許的members,構(gòu)建一個列表

    3、從列表中隨機(jī)選擇一個member。

####ping值是動態(tài)值,每10秒計算一次。mongos將客戶端請求轉(zhuǎn)發(fā)給延遲較?。ㄅc此值相比)的某個secondary節(jié)點。僅對mongos有效。


###6sharding:(僅對sharding架構(gòu)模式下有效)

clusterRole: <無默認(rèn)值>

####描述:在sharding集群中,此mongod實例的角色,可選值:

    1、configsvr:此實例為config server,此實例默認(rèn)偵聽27019端口

    2、shardsvr:此實例為shard(分片),偵聽27018端口

    此配置僅對mongod有效。通常config server和sharding server需要使用各自的配置文件。

 

    archiveMovedChunks: true

####描述:當(dāng)chunks因為“負(fù)載平衡”而遷移到其他節(jié)點時,mongod是否將這些chunks歸檔,并保存在dbPath下“moveChunk”目錄下,mongod不會刪除moveChunk下的文件。默認(rèn)為true。

 

    autoSplit: true

####描述:是否開啟sharded collections的自動分裂,僅對mongos有效。如果所有的mongos都設(shè)定為false,那么collections數(shù)據(jù)增長但不能分裂成新的chunks。因為集群中任何一個mongos進(jìn)程都可以觸發(fā)split,所以此值需要在所有mongos行保持一致。僅對mongos有效。

 

    configDB: <無默認(rèn)值>

####描述:設(shè)定config server的地址列表,每個server地址之間以“,”分割,通常sharded集群中指定1或者3個config server。(生產(chǎn)環(huán)境,通常是3個config server,但1個也是可以的)。所有的mongos實例必須配置一樣,否則可能帶來不必要的問題。僅對mongos有效。

 

    chunkSize: 64

####描述:sharded集群中每個chunk的大小,單位:MB,默認(rèn)為64,此值對于絕大多數(shù)應(yīng)用而言都是比較理想的。chunkSize太大會導(dǎo)致分布不均,太小會導(dǎo)致分裂成大量的chunk而經(jīng)常移動

##整個sharding集群中,此值需要保持一致,集群啟動后修改此值將不再生效。僅對mongos有效。

 

###7、sytemsLog:(系統(tǒng)日志,必須配置)

    verbosity: 0

###描述:日志級別,0:默認(rèn)值,包含“info”信息,1~5,即大于0的值均會包含debug信息

    

    quiet: true

####描述:"安靜",此時mongod/mongos將會嘗試減少日志的輸出量。不建議在production環(huán)境下開啟,否則將會導(dǎo)致跟蹤錯誤比較困難。

    

    traceAllExceptions: true

####描述:打印異常詳細(xì)信息。

    

    path:  logs/mongod.log

    

    logAppend: false

####描述:如果為true,當(dāng)mongod/mongos重啟后,將在現(xiàn)有日志的尾部繼續(xù)添加日志。否則,將會備份當(dāng)前日志文件,然后創(chuàng)建一個新的日志文件;默認(rèn)為false。

 

    logRotate: rename

####描述:日志“回轉(zhuǎn)”,防止一個日志文件特別大,則使用logRotate指令將文件“回轉(zhuǎn)”,可選值:

    1)rename:重命名日志文件,默認(rèn)值。

    2)reopen:使用linux日志rotate特性,關(guān)閉并重新打開此日志文件,可以避免日志丟失,但是logAppend必須為true。


    destination: file

####描述:日志輸出目的地,可以指定為“ file”或者“syslog”,表述輸出到日志文件,如果不指定,則會輸出到標(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,僅對mongod有效;表示是否開啟用戶訪問控制(Access Control),即客戶端可以通過用戶名和密碼認(rèn)證的方式訪問系統(tǒng)的數(shù)據(jù),默認(rèn)為“disabled”,即客戶端不需要密碼即可訪問數(shù)據(jù)庫數(shù)據(jù)。(限定客戶端與mongod、mongos的認(rèn)證)

 

    2)clusterAuthMode:集群中members之間的認(rèn)證模式,可選值為“keyFile”、“sendKeyFile”、“sendX509”、“x509”,對mongod/mongos有效;默認(rèn)值為“keyFile”,mongodb官方推薦使用x509,不過我個人覺得還是keyFile比較易于學(xué)習(xí)和使用。不過3.0版本中,mongodb增加了對TLS/SSL的支持,如果可以的話,建議使用SSL相關(guān)的配置來認(rèn)證集群的member,此文將不再介紹。(限定集群中members之間的認(rèn)證)

 

    3)keyFile:當(dāng)clusterAuthMode為“keyFile”時,此參數(shù)指定keyfile的位置,mongodb需要有訪問此文件的權(quán)限。

 

    4)javascriptEnabled:true或者false,默認(rèn)為true,僅對mongod有效;表示是否關(guān)閉server端的javascript功能,就是是否允許mongod上執(zhí)行javascript腳本,如果為false,那么mapreduce、group命令等將無法使用,因為它們需要在mongod上執(zhí)行javascript腳本方法。如果你的應(yīng)用中沒有mapreduce等操作的需求,為了安全起見,可以關(guān)閉javascript。

 

    “setParameter”允許指定一些的Server端參數(shù),這些參數(shù)不依賴于存儲引擎和交互機(jī)制,只是微調(diào)系統(tǒng)的運(yùn)行狀態(tài),比如“認(rèn)證機(jī)制”、“線程池參數(shù)”等。參見【parameter】

    1)enableLocalhostAuthBypass:true或者false,默認(rèn)為true,對mongod/mongos有效;表示是否開啟“l(fā)ocalhost exception”,對于sharding cluster而言,我們傾向于在mongos上開啟,在shard節(jié)點的mongod上關(guān)閉。

 

    2)authenticationMechanisms:認(rèn)證機(jī)制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”,對mongod/mongos有效;一旦選定了認(rèn)證機(jī)制,客戶端訪問databases時需要與其匹配才能有效。

 

###9、與性能有關(guān)的參數(shù)

##Java代碼  收藏代碼

###setParameter:  

    connPoolMaxShardedConnsPerHost: 200  

    connPoolMaxConnsPerHost: 200  

    notablescan: 0  

 

    1)connPoolMaxShardedConnsPerHost:默認(rèn)值為200,對mongod/mongos有效;表示當(dāng)前mongos或者shard與集群中其他shards鏈接的鏈接池的最大容量,此值我們通常不會調(diào)整。連接池的容量不會阻止創(chuàng)建新的鏈接,但是從連接池中獲取鏈接的個數(shù)不會超過此值。維護(hù)連接池需要一定的開支,保持一個鏈接也需要占用一定的系統(tǒng)資源。

    2)connPoolMaxConnsPerHost:默認(rèn)值為200,對mongod/mongos有效;同上,表示mongos或者mongod與其他mongod實例之間的連接池的容量,根據(jù)host限定。

 

##配置樣例

####mongodb 3.0之后配置文件采用YAML格式,這種格式非常簡單,使用<key>:<value>表示,開頭使用“空格”作為縮進(jìn)。需要注意的是,“:”之后有value的話,需要緊跟一個空格,如果key只是表示層級,則無需在“:”后增加空格(比如:systemLog:后面既不需要空格)。按照層級,每行4個空格縮進(jìn),第二級則8個空格,依次輪推,頂層則不需要空格縮進(jìn)。如果格式不正確,將會出現(xiàn)如下錯誤:

 

###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é)點增加如下配置:  

###Java代碼  收藏代碼

####sharding:  

    clusterRole: shardsvr  

    archiveMovedChunks: true  

####當(dāng)然,一個mongod實例即可以為“復(fù)制集”的member之一,也可以作為sharding集群中的一個分片,這取決你的架構(gòu)模式。

 

####mongod進(jìn)程可以做為“config server”實例,只需要將“clusterRole: configsvr”即可;由此可見,一個mongod實例可以為“單點實例”、“config server”、“sharding server” + “replication set member”其中一個角色,建議使用不同的配置文件啟動它。

 

###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ù)據(jù),對內(nèi)存有一定的消耗,在sharding架構(gòu)模式下使用;mongos需接收向客戶端請求(后端的sharded和replication set則不需要讓客戶端知道),它可以將客戶端請求轉(zhuǎn)發(fā)到一個分片集群上(分片集群基于復(fù)制集)延遲相對較小的secondary上,同時還負(fù)責(zé)chunk的分裂和遷移工作。

  

##其他

###1、啟動與關(guān)閉    

####配置文件中絕大部分參數(shù),都可以通過進(jìn)程啟動命令指定,通常啟動命令行中的參數(shù)將覆蓋配置文件中的參數(shù)。

####Java代碼  收藏代碼

./mongod -f mongod.conf  

####當(dāng)然,也可以通過使用多個命令行參數(shù)來啟動,如下僅為示例:

###Java代碼  收藏代碼

./mongod --bind_ip 127.0.0.1 --port 27017 --dbpath /data/mongodb/db --logpath /data/mongodb/logs --storageEngine mmapv1 --fork  

####mongod配置中所指定的目錄地址必須首先創(chuàng)建,否則將無法啟動,這有別與其他系統(tǒng)。

 

#####mongos啟動方式同上。如果希望基于service方式啟動mongod、mongos,請參考其他文檔??梢酝ㄟ^kill指令來關(guān)閉mongod進(jìn)程,不過這種方式有些粗暴,在production環(huán)境中可能會導(dǎo)致數(shù)據(jù)損壞,建議使用mongo shell來“cleanly”關(guān)閉mongod進(jìn)程,這種方式安全而且不會導(dǎo)致數(shù)據(jù)損壞。


###Java代碼  收藏代碼

./mongo  

> use admin;  

> db.shutdownServer();  

####可以使用“kill <mongod process ID>”的方式關(guān)閉,這種方式也是“cleanly”;如果使用“kill -9 ”方式就是強(qiáng)制線程退出,可能會導(dǎo)致數(shù)據(jù)丟失。如果在非fork下運(yùn)行mongod,直接在shell上使用“CTRL-C”方式也是“cleanly”退出。對于線上環(huán)境,最好不要“kill -9”。 

 

###2、repair

####“修復(fù)”數(shù)據(jù)庫,當(dāng)mongodb運(yùn)行一段時間之后,特別是經(jīng)過大量刪除、update操作之后,我們可以使用repair指令對數(shù)據(jù)存儲進(jìn)行“repair”,它將整理、壓縮底層數(shù)據(jù)存儲文件,重用磁盤空間,相當(dāng)于數(shù)據(jù)重新整理了一遍,對數(shù)據(jù)優(yōu)化有一定的作用。

####如果mongod沒有開啟journaling日志功能,repair指令可以在系統(tǒng)異常crash之后,用于整理數(shù)據(jù)、消除損壞數(shù)據(jù);如果開啟了journaling日志功能,我們則需不要使用repair來修復(fù)數(shù)據(jù),因為journal就可以幫助mongod恢復(fù)數(shù)據(jù)。在replication set模式下,可以使用repair,但是通??梢灾苯觿h除舊數(shù)據(jù),使用“數(shù)據(jù)同步”操作,即可達(dá)到“恢復(fù)”、“整理”數(shù)據(jù)的目的,效果和repair一樣,而且效率更高。

####repair需要磁盤有一定的剩余空間,為當(dāng)前database數(shù)據(jù)量 + 2GB,可以通過使用“--repairpath”來指定repair期間存儲臨時數(shù)據(jù)的目錄。repair指令還會重建indexes,可以降低索引的數(shù)據(jù)大小。

####如果mongod意外crash,需要首先正常啟動mongod,讓根據(jù)journal日志恢復(fù)完數(shù)據(jù)之后,才能執(zhí)行repair;如果journal日志有數(shù)據(jù)尚未恢復(fù),那么使用repair指令啟動mongod將會失敗。

####repair時需要關(guān)閉mongod進(jìn)程,執(zhí)行完畢后再啟動。

###Java代碼  收藏代碼

./mongod --dbpath=/data/mongodb/db --repair  

####mongodb比較傾向于使用shell來repair特定的database,這個操作相對比較可控,其內(nèi)部工作機(jī)制一樣。

 

###Java代碼  收藏代碼

>./mongo  

>user mydatabase;  

>db.repairDatabase();  

 

###3、mongodump與mongorestore

####我們通常會使用到mongodb數(shù)據(jù)的備份功能,或者將一個備份導(dǎo)入到一個新的mongod實例中(數(shù)據(jù)冷處理),那么就需要借助這兩個指令。

#### mongodump將整個databases全部內(nèi)容導(dǎo)出到一個二進(jìn)制文件中,可以在其他mongod使用mongorestore來加載整個文件。需要注意mongodump不會導(dǎo)出“l(fā)ocal”數(shù)據(jù)庫中的數(shù)據(jù),當(dāng)然這個local庫對恢復(fù)數(shù)據(jù)也沒有太大意義。

#### “-u”參數(shù)指定訪問database的用戶名,“-p”指定密碼,“--host”和“--port”指定mongod實例的位置,“--db”指定需要dump的數(shù)據(jù)庫,如果不指定則dump所有數(shù)據(jù)庫,“--collection”指定需要dump的集合表,如果不指定則dumpl整個db下的所有collections;“--query <json>”指定dump時的查詢條件,“--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,不會執(zhí)行update,如果數(shù)據(jù)庫中已經(jīng)存在相同的“_id”數(shù)據(jù),mongorestore不會覆蓋原有的document。mongorestore會重新創(chuàng)建indexes,所有的操作都是insert而不會update。

####基本指令類似于mongodump,“--db”指定需要將數(shù)據(jù)restore到哪個db中,如果此db不存在,則創(chuàng)建;如果沒有指定“--db”,mongorestore則根據(jù)原始數(shù)據(jù)所屬的db重新創(chuàng)建,這可能會導(dǎo)致數(shù)據(jù)覆蓋。“--drop”表示在restore數(shù)據(jù)之前,首先刪除目標(biāo)db中原有的collections,--drop不會刪除那些在dump文件中沒有的collection?!?-stopOnError”表示出錯時強(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)用程序解析。

####因為mongodb數(shù)據(jù)是BSON格式,有些數(shù)據(jù)類型是JSON不具有的,所以導(dǎo)出JSON格式會仍然會丟失數(shù)據(jù)類型;所以如果導(dǎo)出的數(shù)據(jù)是準(zhǔn)備給其他mongodb恢復(fù)數(shù)據(jù),那么建議使用mongodump和mongorestore。

####命令參數(shù)同3)

###5、mongostat指令可以間歇性的打印出當(dāng)前mongod實例中“數(shù)據(jù)存儲”、“flush”、讀寫次數(shù)、網(wǎng)絡(luò)輸出等參數(shù),是查看mongod性能的有效手段。mongotop可以根據(jù)查看各個database下讀寫情況。

 


###6、mongo shell操作簡述:


    1)help:列出所有的function

    2)show dbs:展示當(dāng)前實例中所有的databases。

    3)use <dbname>:切換到指定的db,接下來的操作將會在此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個操作耗時超過1秒的操作,通常用于跟蹤慢查詢。

    8)db.help():展示出可以在db上進(jìn)行的操作function。

    9)db.<collection>.help():展示出可以在colleciton上進(jìn)行的操作。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI