溫馨提示×

溫馨提示×

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

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

Mongo之架構(gòu)部署(Replica Sets+Sharding)

發(fā)布時(shí)間:2020-06-02 17:33:06 來源:網(wǎng)絡(luò) 閱讀:734 作者:duoku 欄目:MongoDB數(shù)據(jù)庫

 

Mongo之架構(gòu)部署(Replica Sets+Sharding)

 

 

一、環(huán)境

 

Mongo之架構(gòu)部署(Replica Sets+Sharding)

要構(gòu)建一個(gè) MongoDB Sharding Cluster,需要三種角色:

Shard Server: mongod 實(shí)例,用于存儲(chǔ)實(shí)際的數(shù)據(jù)塊。

Config Server: mongod 實(shí)例,存儲(chǔ)了整個(gè) Cluster Metadata,其中包括 chunk 信息。

Route Server: mongos 實(shí)例,前端路由,客戶端由此接入,且讓整個(gè)集群看上去像單一進(jìn)程  

 數(shù)據(jù)庫。

方案一:

192.168.136.14

192.168.136.15

192.168.136.16

192.168.136.26

192.168.136.29

Shard1(master)

Shard2(master)

Shard3(master)

Shard1(slave)

Shard1(arbiter)

Shard2(slave)

Shard3(slave)

Shard1(slave)

Shard3(slave)

Shard2(arbiter)

Shard3(arbiter)

Shard1(arbiter)

Shard2(arbiter)

Shard2(slave)

Shard3 (arbiter)

 

1.節(jié)點(diǎn):

 S1: 192.168.136..14,192.168.136..26,192.168.136..16,192.168.136.15,192.168.136.29(arbiter)

 S2: 192.168.136.15,192.168.136.26,192.168.136.14,192.168.136.16,192.168.136.29(arbiter)

 S3: 192.168.136.16,192.168.136.26,192.168.136.15,192.168.136.14,192.168.136.29(arbiter)

 

 

c

 

主機(jī)

端口信息

192.168.136.14

mongod shard1:27017(master)

mongod shard2:27018(slave)

mongod shard3:27019(arbiter)

mongod config:30000

mongs:40000

192.168.136.15

mongod shard1:27017(arbiter)

mongod shard2:27018(master)

mongod shard3:27019(slave)

mongod config:30000

mongs:40000

192.168.136.16

mongod shard1:27017(slave

mongod shard2:27018(arbiter)

mongod shard3:27019(master)

mongod config:30000

mongs:40000

192.168.136.26

mongod shard1:27017(slave)

mongod shard2:27018(slave)

mongod shard3:27019(slave)

192.168.136.29

mongod shard1:27017(arbiter)

mongod shard2:27018(arbiter)

mongod shard3:27019(arbiter)

 

二、安裝部署

軟件準(zhǔn)備及目錄

1.下載mongodb程序

  curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.3.tgz

2.解壓mongodb-linux-x86_64-2.0.0.tgz

  tar zxvf mongodb-linux-x86_64-1.8.3.tgz

3.重命名mongodb-linux-x86_64-2.0.0.tgzmongodb

  mv mongodb-linux-x86_64-2.0.0 mongodb

4.進(jìn)入mongodb目錄

  cd mongodb

5.新建文件夾data

  mkdir data

  mkdir logs

 

 

 

 

配置Replica Sets,Config Server

 

※配置配置文件conf

# 1.start_mongod Shard1.conf

shardsvr=true

port=27017

dbpath=/data/database/shard1/

logpath=/data/logs/shard1.log

logappend=true

fork=true

replSet=s1

rest=true

journal=true

 

# 2.start_mongod Shard2.conf

shardsvr=true

port=27018

dbpath=/data/database/shard2/

logpath=/data/logs/shard2.log

logappend=true

fork=true

replSet=s2

rest=true

journal=true

 

# 3.start_mongod Shard3.conf

shardsvr=true

port=27019

dbpath=/data/database/shard3/

logpath=/data/logs/shard3.log

logappend=true

fork=true

replSet=s3

rest=true

journal=true

 

 

 

 

 

192.168.136.14

1.創(chuàng)建相應(yīng)的文件夾(注意此處的testadmin是客戶端登陸名)

mkdir -p /data/database/shard1
mkdir -p /data/database/shard2
mkdir -p /data/database/shard3
mkdir -p /data/database/config

mkdir -p /data/logs

 

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

 

3.查看mongod的進(jìn)程是否啟動(dòng)

ps aux | grep mongodb | grep -v grep

 

 

4.初始化replica sets(此處ip是對(duì)應(yīng)的內(nèi)網(wǎng)IP)

/testadmin/mongodb/bin/mongo --port 27017

   config = {_id: 's1', members: [{_id: 0,host: '192.168.136.14:27017',priority:5},{_id: 1, host: '192.168.136.26:27017',priority:2},{_id: 2, host: '192.168.136.16:27017',priority:.5},{_id: 3, host: '192.168.136.15:27017',arbiterOnly: true},{_id: 4, host: '192.168.136.29:27017', arbiterOnly: true}]}

     rs.initiate(config)
     rs.status()

 

192.168.136.15

1.創(chuàng)建相應(yīng)的文件夾(注意此處的testadmin是客戶端登陸名)

mkdir -p /data/database/shard1
mkdir -p /data/database/shard2
mkdir -p /data/database/shard3
mkdir -p /data/database/config

mkdir -p /data/logs

 

 

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

 

3.查看mongod的進(jìn)程是否啟動(dòng)

ps aux | grep mongodb | grep -v grep

 

4.初始化replica sets

/testadmin/mongodb/bin/mongo --port 27018

  config={_id: 's2', members: [{_id: 0, host: '192.168.136.15:27018',priority:5},{_id: 1, host: '192.168.136.26:27018',priority:2},{_id: 2, host: '192.168.136.14:27018',priority:.5},{_id: 3, host: '192.168.136.16:27018', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27018', arbiterOnly: true}]}

  rs.initiate(config)

 

192.168.136.16

1.創(chuàng)建相應(yīng)的文件夾(注意此處的testadmin是客戶端登陸名)

mkdir -p /data/shard1
mkdir -p /data/shard2
mkdir -p /data/shard3
mkdir -p /data/config

mkdir -p /data/logs

 

 

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

./mongod --config /mongodb/configsvr.conf

 

3.查看mongod的進(jìn)程是否啟動(dòng)

ps aux | grep mongodb | grep -v grep

 

4.初始化replica sets

/testadmin/mongodb/bin/mongo --port 27019

 config={_id: 's3',members: [{_id: 0, host: '192.168.136.16:27019',priority:5},{_id: 1, host: '192.168.136.26:27019',priority:2},{_id: 2, host: '192.168.136.15:27019',priority:.5},{_id: 3, host: '192.168.136.14:27019', arbiterOnly: true},{_id: 4, host: '192.168.136.29:27019', arbiterOnly: true}]}
rs.status()

 

192.168.136.26,192.168.136.29分別執(zhí)行如下:

1.創(chuàng)建相應(yīng)的文件夾(注意此處的testadmin是客戶端登陸名)

mkdir -p /data/shard1
mkdir -p /data/shard2
mkdir -p /data/shard3
mkdir -p /data/config

mkdir -p /data/logs

 

 

 

2.配置mongod

./mongod --config /mongodb/shard1.conf

./mongod --config /mongodb/shard2.conf

./mongod --config /mongodb/shard3.conf

 

3.查看mongod的進(jìn)程是否啟動(dòng)

ps aux | grep mongodb | grep -v grep

 

 

 

配置Mongos(在每一臺(tái)機(jī)子上建立路由)

/mongodb/bin/

./mongos --fork --port 40000 --logpath /data/logs/mongos.log --configdb 192.168.136.14:30000,192.168.136.15:30000,192.168.136.16:30000

 

 

 

 

 

添加分片

1連接任意一臺(tái),其他無需這樣操作:

/home/testadmin/bin/mongo --port 40000
use admin
db.runCommand({addshard:'s1/192.168.136.14:27017,192.168.136.26:27017,192.168.136.16:27017'}) db.runCommand({addshard:'s2/192.168.136.15:27018,192.168.136.26:27018,192.168.136.14:27018'}) db.runCommand({addshard:'s3/192.168.136.16:27019,192.168.136.26:27019,192.168.136.15:27019'})

db.runCommand({ listshards:1 })

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

db.data.stats();

 

 

 

三、用戶認(rèn)證

1.注意1.9.1之前復(fù)制集不支持用戶認(rèn)證,只能通過keyFile密匙文件,幸好這幾天2.0正式版出來了,很多功能問題都已解決。呵呵

 

注意:用戶驗(yàn)證,啟動(dòng)mongod必須添加--auth

#設(shè)置用戶名和密碼

>use test

>db.addUser('mongo','456123');

>db.auth('mongo','456123')

>db.system.users.find() --查看該用戶是否添加成功

>db.system.users.remove('mongo','456123')

>mongo 數(shù)據(jù)庫 -u mongo -p

 

注意:啟動(dòng)時(shí)必須添加--auth用戶權(quán)限才會(huì)生效,第一次配置完成后,沒效果就重啟下。

 

 

 

 

四、鴨梨大了怎么辦?添加服務(wù)器,怎么樣添加呢?

1.如果讀得鴨梨大了,則添加加slave節(jié)點(diǎn),分散讀得鴨梨。

啟動(dòng)后,在primary節(jié)點(diǎn)中添加節(jié)點(diǎn)

如:rs.add("10.168.0.100:27017") 當(dāng)我們看到變?yōu)?/span>secondary后,就一切正常。

2.如果寫的鴨梨打了,則可以添加一組shard節(jié)點(diǎn)分散寫的鴨梨。

如:如上所述啟動(dòng)mongod,添加即可。

五、備份恢復(fù)策略

增量備份(添加延遲備份節(jié)點(diǎn))

1、利用另外一臺(tái)secondary機(jī)器傳送數(shù)據(jù)

2、在新機(jī)器上中配置文件中添加fastsync=true配置(當(dāng)需要從有數(shù)據(jù)中啟動(dòng)節(jié)點(diǎn),那么必須加上fastsync=true,否則啟動(dòng)會(huì)報(bào)錯(cuò),如果是從主庫直接同步所有數(shù)據(jù),那么就不需要添加這個(gè)參數(shù))

3、啟動(dòng)后,在primary節(jié)點(diǎn)中添加節(jié)點(diǎn)

如:rs.add("10.168.0.102:27017") 當(dāng)我們看到變?yōu)?/span>secondary后,就一切正常,可以正常提供線上服務(wù)了

4、通過rs.conf()命令查看現(xiàn)在的節(jié)點(diǎn)信息(需要admin庫密碼權(quán)限)

5、rs.remove("10.168.0.102:27017")刪除節(jié)點(diǎn)

6、添加arbiter節(jié)點(diǎn):rs.addArb("10.73.24.171:19003") 

7、添加延時(shí)備份機(jī)器:

rs.add({_id:5,host:"10.168.0.102:27017",priority:0,slaveDelay:300});

rs.add({_id:5,host:"10.168.0.102:27018",priority:0,slaveDelay:300});

rs.add({_id:5,host:"10.168.0.102:27019",priority:0,slaveDelay:300});

注意:slaveDelay單位秒.

8、出現(xiàn)這個(gè)錯(cuò)誤時(shí):replSet error RS102 too stale to catch up,我們可以db.printReplicationInfo()查看主庫、從庫的oplog信息;

利用延遲備份節(jié)點(diǎn)恢復(fù)數(shù)據(jù)

1.    先把延遲備份節(jié)點(diǎn)的數(shù)據(jù),備份到各節(jié)點(diǎn)的master機(jī)子上。如:

#./mongodump -h 192.168.136.14:27017 -d weibo -o /data/mongoback/

#./mongodump -h 192.168.136.15:27018 -d weibo -o /data/mongoback/

#./mongodump -h 192.168.136.16:27019 -d weibo -o /data/mongoback/

2.  把備份的數(shù)據(jù)導(dǎo)入到個(gè)節(jié)點(diǎn)的master上。如:

建議先修復(fù)下,壓縮空間

db.repairDatabase();修復(fù)數(shù)據(jù)(和壓縮(刪除數(shù)據(jù))空間)

./mongorestore -h 127.0.0.1:27017 --directoryperdb /data/mongoback --drop --indexesLast

./mongorestore -h 127.0.0.1:27018 --directoryperdb /data/mongoback --drop --indexesLast

./mongorestore -h 127.0.0.1:27019 --directoryperdb /data/mongoback --drop --indexesLast

 

全量備份(添加延遲備份節(jié)點(diǎn))

1.  寫好腳本定期凌晨備份數(shù)據(jù),如:

./mongodump -h 10.168.0.187:40000 -d weibo -o /data/mongoback/

2.  恢復(fù)數(shù)據(jù)

3.  建議先修復(fù)下,壓縮空間

4.       db.repairDatabase();修復(fù)數(shù)據(jù)(和壓縮(刪除數(shù)據(jù))空間)

./mongorestore -h 10.168.0.187:40000 --directoryperdb /data/mongoback --drop --indexesLast

 

 

六、其他問題~

1.如果啟動(dòng)不成功,則嘗試修復(fù).如:

./mongod --port 27017 --repair --dbpath /data/database/shard1/

2如果master節(jié)點(diǎn)kill了,則起來之后通過rs.stepDown(100)讓出master的位置。

3.其他問題請隨時(shí)歡迎提出,聯(lián)系我(李航),圍脖:http://weibo.com/lidaohang~

 

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

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

AI