溫馨提示×

溫馨提示×

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

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

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

發(fā)布時間:2021-08-16 18:20:24 來源:億速云 閱讀:984 作者:chen 欄目:大數(shù)據(jù)

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

一、關(guān)于mongodb

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

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

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

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

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

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

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

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

{ name : 1 } 

{ _id : 1 } 

{ lastname : 1, firstname : 1 } 

{ tag : 1, timestamp : -1 } 

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

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

三、mongodb分布式部署方式

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

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

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

四、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ù)存儲目錄 

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

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

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

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

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 

 簡單的參數(shù)說明: 

–logpath 日志文件路徑 

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

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

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

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

–logappend 日志文件末尾添加 

–port 啟用端口號 

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

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

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

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

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

五、集群模式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 

#啟動rep1分片的一個數(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  #啟動路由節(jié)點(diǎn),讀取201.226上的配置節(jié)點(diǎn)的配置文件,(在配置節(jié)點(diǎn)啟動后啟動)

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

#啟動分片的仲裁節(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

 #啟動rep1分片的第二個數(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 

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

2.ConfigServer--- 

#啟動config server  

    192.168.201.226:     

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

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

3.Mongos路由--- 

    #啟動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 

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

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

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)先級,默認(rèn)為1,高優(yōu)先級會被認(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庫和c1集合,并測試 

    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)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

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

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

AI