溫馨提示×

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

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

搭建高可用mongo集群

發(fā)布時(shí)間:2020-07-28 11:58:42 來(lái)源:網(wǎng)絡(luò) 閱讀:854 作者:黑色時(shí)間 欄目:數(shù)據(jù)庫(kù)

簡(jiǎn)介:

    MongoDB是一個(gè)可擴(kuò)展、高性能的分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù),由C 語(yǔ)言編寫,旨在為web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。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)非常松散,是類似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面 向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。

功能特性:

面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類型的數(shù)據(jù)。

模式自由。

支持動(dòng)態(tài)查詢。

支持完全索引,包含內(nèi)部對(duì)象。

支持查詢。

支持復(fù)制和故障恢復(fù)。

使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)。

自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性

支持RUBY,PYTHON,JAVA,C++,PHP等多種語(yǔ)言。

文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)

可通過網(wǎng)絡(luò)訪問

搭建方式:

    搭建集群采用副本集+分片的方式,用于生產(chǎn)環(huán)境。

網(wǎng)絡(luò)拓?fù)洌?/strong>

 

搭建高可用mongo集群

搭建過程:

①開啟配置服務(wù)器(config):

172.16.2.230:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

172.16.2.231:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

172.16.2.232:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

 

②開啟路由(mongos):

172.16.2.230:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

172.16.2.231:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

172.16.2.232:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

 

③副本集的啟動(dòng)與配置:

分片一:

172.16.2.233:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.234:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.235:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.233:mongo localhost:27017/admin

>rsconfig={"_id":"shard1","members":[{"_id":0,"host":"172.16.2.233:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.234:27017")

>rs.add("172.16.2.235:27017")

>rs.conf()#查看配置狀態(tài)(查看分片是否掛掉

 

分片二:

172.16.2.236:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.237:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.238:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.236:mongo localhost:27017/admin

>rsconfig={"_id":"shard2","members":[{"_id":0,"host":"172.16.2.236:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.237:27017")

>rs.add("172.16.2.238:27017")

>rs.conf()#查看配置狀態(tài)(查看分片是否掛掉

 

分片三:

172.16.2.239:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.240:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.241:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.239:mongo localhost:27017/admin

>rsconfig={"_id":"shard3","members":[{"_id":0,"host":"172.16.2.239:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.240:27017")

>rs.add("172.16.2.241:27017")

>rs.conf()#查看配置狀態(tài)(查看分片是否掛掉

 

④添加分片(副本集)至集群:

172.16.2.230:mongo 172.16.2.230:27017/admin

>db.runCommand({"addshard":"shard1/172.16.2.233:27017,172.16.2.234:27017,172.16.2.235:27017"})

>db.runCommand({"addshard":"shard2/172.16.2.236:27017,172.16.2.237:27017,172.16.2.238:27017"})

>db.runCommand({"addshard":"shard3/172.16.2.239:27017,172.16.2.240:27017,172.16.2.241:27017"})

>db.runCommand({"listshard":1})#查看添加的結(jié)果(查看健康狀態(tài)

 

⑤激活db和colletion分片功能:

172.16.2.230:mongo 172.16.2.230:27017/admin

>db.runCommand({"enablesharding":"database_1"})

注:激活databas_1分片功能,可讓數(shù)據(jù)庫(kù)夸shard。若不執(zhí)行此命令,數(shù)據(jù)只能存放在一個(gè)分片上。此后不同的集合會(huì)放到不同的shard上,但同一個(gè)collection不會(huì)切分。

>db.runCommand({"shardcollection":"database_1.collection_1","key":{"_id":1}})#按片鍵值"_id"把集合切分

 

⑥查看分片情況:

>use database_1

>db.collection_1.stats()#查看集合分片狀態(tài)

>db.printShardingStatus()#查看數(shù)據(jù)庫(kù)分片

>printShardingStatus(db.getsisterDB("config"),1)#顯示太多chunk無(wú)法全部顯示時(shí)可用此命令查看

 

至此,mongo集群搭建完畢,并適用于生產(chǎn)環(huán)境。但由于此框架有3個(gè)接口(路由),很多時(shí)候只用了一個(gè)接口導(dǎo)致另外兩個(gè)被浪費(fèi)掉了。為了避免資源浪費(fèi),可在3個(gè)接口前邊做一個(gè)負(fù)載均衡,如haproxy。

 

付:

添加分片:db.runCommand({addshard:"ip:port",allowLocal:true})

刪除分片:db.runCommand({removeshard:"ip:port"})

數(shù)據(jù)備份:./bin/mongodump -h 遠(yuǎn)程要備份的數(shù)據(jù)庫(kù)ip –port 27017 -d 要備份的數(shù)據(jù)庫(kù) –c 要備份的集合(可選)-o 備份到某處

數(shù)據(jù)恢復(fù):./bin/mongorestore -h 遠(yuǎn)程要恢復(fù)的數(shù)據(jù)庫(kù)ip -p 27017 -d 要恢復(fù)的數(shù)據(jù)庫(kù) --drop 先前備份的位置/數(shù)據(jù)庫(kù)名字


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

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

AI