mongodb的介紹及分布式應(yīng)用原理

這篇文章主要介紹“MongoDB的介紹及分布式應(yīng)用原理”,在日常操作中,相信很多人在mongodb的介紹及分布式應(yīng)用原理問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”mongodb的介紹及分布式應(yīng)用原理”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元都蘭做網(wǎng)站,已為上家服務(wù),為都蘭各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

一、關(guān)于mongodb

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。 MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)***能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類(lèi)似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類(lèi)型。Mongo最大的特點(diǎn)是他支持的查詢(xún)語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵?xún)語(yǔ)言,幾乎可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢(xún)的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

二、mongodb分布式應(yīng)用原理

MongoDB集群包括一定數(shù)量的mongod(分片存儲(chǔ)數(shù)據(jù))、mongos(路由處理)、config server(配置節(jié)點(diǎn))、clients(客戶(hù)端)、arbiter(仲裁節(jié)點(diǎn):為了選舉某個(gè)分片存儲(chǔ)數(shù)據(jù)節(jié)點(diǎn)那臺(tái)為主節(jié)點(diǎn))。

mongodb的介紹及分布式應(yīng)用原理

1、shards:一個(gè)shard為一組mongod,通常一組為兩臺(tái),主從或互為主從,這一組mongod中的數(shù)據(jù)時(shí)相同的,具體可見(jiàn)《mongodb分布式之?dāng)?shù)據(jù)復(fù)制》。數(shù)據(jù)分割按有序分割方式,每個(gè)分片上的數(shù)據(jù)為某一范圍的數(shù)據(jù)塊,故可支持指定分片的范圍查詢(xún),這同google的BigTable 類(lèi)似。數(shù)據(jù)塊有指定的最大容量,一旦某個(gè)數(shù)據(jù)塊的容量增長(zhǎng)到最大容量時(shí),這個(gè)數(shù)據(jù)塊會(huì)切分成為兩塊;當(dāng)分片的數(shù)據(jù)過(guò)多時(shí),數(shù)據(jù)塊將被遷移到系統(tǒng)的其他分片中。另外,新的分片加入時(shí),數(shù)據(jù)塊也會(huì)遷移。 

2、mongos:可以有多個(gè),相當(dāng)于一個(gè)控制中心,負(fù)責(zé)路由和協(xié)調(diào)操作,使得集群像一個(gè)整體的系統(tǒng)。mongos可以運(yùn)行在任何一臺(tái)服務(wù)器上,有些選擇放在shards服務(wù)器上,也有放在client 服務(wù)器上的。mongos啟動(dòng)時(shí)需要從config servers上獲取基本信息,然后接受client端的請(qǐng)求,路由到shards服務(wù)器上,然后整理返回的結(jié)果發(fā)回給client服務(wù)器。 

3、config server:存儲(chǔ)集群的信息,包括分片和塊數(shù)據(jù)信息。主要存儲(chǔ)塊數(shù)據(jù)信息,每個(gè)config server上都有一份所有塊數(shù)據(jù)信息的拷貝,以保證每臺(tái)config server上的數(shù)據(jù)的一致性。 

4、shard key:為了分割數(shù)據(jù)集,需要制定分片key的格式,類(lèi)似于用于索引的key格式,通常由一個(gè)或多個(gè)字段組成以分發(fā)數(shù)據(jù),比如: 

{ name : 1 } 

{ _id : 1 } 

{ lastname : 1, firstname : 1 } 

{ tag : 1, timestamp : -1 } 

mongoDB的分片為有序存儲(chǔ)(1為升序,-1為降序),shard key相鄰的數(shù)據(jù)通常會(huì)存在同一臺(tái)服務(wù)

(數(shù)據(jù)塊)上。 

三、mongodb分布式部署方式

服務(wù)器部署可以有多種方式。首先,每臺(tái)config server、mongos、mongod都可以是單獨(dú)的服務(wù)器,但這樣會(huì)導(dǎo)致某些服務(wù)器的浪費(fèi),比如config server。下圖為物理機(jī)共享的集群部署,不需要額外加機(jī)器。

mongodb的介紹及分布式應(yīng)用原理

當(dāng)然也有其他的方案,比如把mongos部署在所有的mongod(server1-6)上,又或者在每個(gè)運(yùn)用服務(wù)器(server7)上部署mongos。這樣部署有個(gè)好處在于,appserver和mongos之間的通信建立在localhost interface上,減少了通信成本。當(dāng)然,此乃官方說(shuō)法,但本人有想法,盡管減少了appserver和mongos之間的通信成本,但mongos與mongod之間的通信成本卻增加了,而且把mongos部署在appserver上并不是很利于sa管理,mongoDB應(yīng)該是一個(gè)相對(duì)獨(dú)立的系統(tǒng),與應(yīng)用的耦合度應(yīng)該盡量降到最低,萬(wàn)一應(yīng)用想要換數(shù)據(jù)庫(kù),也能多少減少些工作量。

四、mongodb分布式的安裝

1、下載

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz

2、安裝

tar zxvf mongodb-linux-2.0.4.tgz 

cp -fr mongodb-linux-*2.0.4/* /data/mongodb/ 

mkdir -p /data/mongodb/data/                                     #創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄 

mkdir -p /data/mongodb/log/                                      #創(chuàng)建日志存儲(chǔ)目錄 

mkdir -p /data/mongodb/config/                                   #創(chuàng)建配置存儲(chǔ)目錄 

mkdir -p /data/mongodb/arbiter/                                  #創(chuàng)建仲裁節(jié)點(diǎn)存儲(chǔ)目錄 

3、單機(jī)模式以及個(gè)參數(shù)說(shuō)明

mongod --fork --bind_ip 127.0.0.1 --port 11811 --dbpath /data0/mongodb/data --directoryperdb --logpath /data0/mongodb/log/db1.log --logappend  --nohttpinterface 

netstat -ntlp|grep mongod 

 簡(jiǎn)單的參數(shù)說(shuō)明: 

–logpath 日志文件路徑 

–master 指定為主機(jī)器 

–slave 指定為從機(jī)器 

–source 指定主機(jī)器的IP地址 

–pologSize 指定日志文件大小不超過(guò)64M.因?yàn)閞esync是非常操作量大且耗時(shí),最好通過(guò)設(shè)置一個(gè)足夠大的oplogSize來(lái)避免resync(默認(rèn)的 oplog大小是空閑磁盤(pán)大小的5%)。 

–logappend 日志文件末尾添加 

–port 啟用端口號(hào) 

–fork 在后臺(tái)運(yùn)行 

–only 指定只復(fù)制哪一個(gè)數(shù)據(jù)庫(kù) 

–slavedelay 指從復(fù)制檢測(cè)的時(shí)間間隔 

–auth 是否需要驗(yàn)證權(quán)限登錄(用戶(hù)名和密碼) 

–noauth 不需要驗(yàn)證權(quán)限登錄(用戶(hù)名和密碼) 

五、集群模式mongos,mongod,configsvr

1.Shard分片-- 

第一組分片  

192.168.200.226:     

/data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface 

#啟動(dòng)rep1分片的一個(gè)數(shù)據(jù)節(jié)點(diǎn)

/data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log  #啟動(dòng)路由節(jié)點(diǎn),讀取201.226上的配置節(jié)點(diǎn)的配置文件,(在配置節(jié)點(diǎn)啟動(dòng)后啟動(dòng))

/data/mongodb/bin/mongod --replSet rep1 --fork --port 11814 --dbpath /data/mongodb/arbiter --directoryperdb --logpath /data/mongodb/log/arbiter.log --logappend --nohttpinterface 

#啟動(dòng)分片的仲裁節(jié)點(diǎn)

192.168.201.226:     

/data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface

 #啟動(dòng)rep1分片的第二個(gè)數(shù)據(jù)節(jié)點(diǎn)

/data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log 

#啟動(dòng)第二個(gè)路由節(jié)點(diǎn) (在配置節(jié)點(diǎn)啟動(dòng)后啟動(dòng))

2.ConfigServer--- 

#啟動(dòng)config server  

    192.168.201.226:     

        /data/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config --port 11812 --fork --logpath /data/mongodb/log/mc.log 

   #啟動(dòng)配置節(jié)點(diǎn),注意配置節(jié)點(diǎn)應(yīng)該優(yōu)先啟動(dòng),不然路由節(jié)點(diǎn)讀取不到配置節(jié)點(diǎn)信息則會(huì)啟動(dòng)失敗。

3.Mongos路由--- 

    #啟動(dòng)mongos,指定config server, chunkSize 256M 

    192.168.201.226: 

        /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log 

#啟動(dòng)路由節(jié)點(diǎn)

由于機(jī)器有限,只配置了一個(gè)shard分片,該分片里有2個(gè)節(jié)點(diǎn),新增加分片只需對(duì)應(yīng)改replSet 名稱(chēng)即可。

4.配置replSet: 連接任一mongod members 

mongo 192.168.201.226:11813 

config = {_id: 'rep1', members: [ 

{_id: 0, host: '192.168.200.226:11813', priority: 2},                     #priority 為定義優(yōu)先級(jí),默認(rèn)為1,高優(yōu)先級(jí)會(huì)被認(rèn)為是主節(jié)點(diǎn)優(yōu)先啟用。 

{_id: 1, host: '192.168.201.226:11813'}, 

{_id: 2, host: '192.168.200.226:11814', arbiterOnly: true}] 

    rs.initiate(config); 

    rs.status() 

5.連接mongos增加shard 80G 

    mongo 192.168.201.226:11811/admin 

    show dbs 

    use admin 

    db.runCommand({addshard:'rep1/192.168.201.226:11813,192.168.200.226:11813',maxsize:81920}) 

    db.runCommand({listshards:1}) 

6.連接mongos增加創(chuàng)建test庫(kù)和c1集合,并測(cè)試 

    mongo 192.168.201.226:11811/admin 

    db.runCommand({enablesharding:'test'}) 

    printShardingStatus() 

    db.runCommand({shardcollection:'test.auto_increment_id', key:{_id:1}, unique : true}) 

    db.runCommand({shardcollection:'test.c1', key:{_id:1}, unique : true}) 

    for (var i = 1; i <= 100; i++)db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"}) 

    db.c1.stats() 

db.createCollection("cap_coll", {capped:true, size:100000, max:100}); 

db.mycoll.validate(); 

7.檢查: 

db.printCollectionStats()

8.管理: 

mongo 127.0.0.1:11811

show dbs

use admin

show collections

db.serverStatus()

db.shutdownServer()

exit

9.索引: 

db.product_data.ensureIndex({data_id: 1}, {unique: true,dropDups: true}); #創(chuàng)建索引   

db.product_data.dropIndexes();  #刪除索引

到此,關(guān)于“mongodb的介紹及分布式應(yīng)用原理”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享名稱(chēng):mongodb的介紹及分布式應(yīng)用原理
標(biāo)題鏈接:http://muchs.cn/article30/ihicpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、響應(yīng)式網(wǎng)站軟件開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司