MongoDB數據庫——MongoDB分片

MongoDB分片

爲了解決數據的不斷增加的方法

垂直擴展:增加CPU、硬盤等存儲資源來擴展容量

水平擴展:將數據分佈在多個服務器上,也就是會使用到分片技術

MongoDB分片是什麼?

就是把數據庫拆分,把所有的數據分散存放到不同的服務器上的過程

爲什麼要實現MongoDB分片?

優點:

1. 對集羣進行抽象,讓集羣“不可見”,MongoDB自帶了一個叫做mongos的專有路由進程

2.解決磁盤存儲空間的問題,提高數據處理的性能

3.提高數據的安全性,保證集羣總是可讀寫,將MongoDB的分片和複製功能結合使用,在確保數據分片到多臺服務器的同時,也確保了每分數據都有相應的備份,這樣就可以確保有服務器換掉時,其他的從庫可以立即接替壞掉的部分繼續工作

4. 使集羣易於擴展

分片集羣中的主要組件:

Routers :數據路由,和客戶端打交道的模塊

config server:所有存、取數據的方式,所有shard節點的信息,分片功能的一些配置信息

shard:真正的數據存儲位置,以chunk爲單位存數據

部署MongoDB分片羣集

部署環境如下圖所示

1.安裝MongoDB,配置8實例

2.創建存放數據的目錄

mkdir -p /usr/local/mongodb/data/shard11

mkdir -p /usr/local/mongodb/data/shard12

mkdir -p /usr/local/mongodb/data/shard21

mkdir -p /usr/local/mongodb/data/shard22

mkdir -p /usr/local/mongodb/data/config1

mkdir -p /usr/local/mongodb/data/config2

mkdir -p /usr/local/mongodb/data/config3

3.創建日誌目錄以及日誌文件並添加權限

mkdir -p /usr/local/mongodb/logs

touch /usr/local/mongodb/logs/router.log

touch /usr/local/mongodb/logs/shard11.log

touch /usr/local/mongodb/logs/shard12.log

touch /usr/local/mongodb/logs/shard21.log

touch /usr/local/mongodb/logs/shard22.log

touch /usr/local/mongodb/logs/config1.log

touch /usr/local/mongodb/logs/config2.log

touch /usr/local/mongodb/logs/config3.log

chmod -R 777 /usr/local/mongodb/logs/router.log

chmod -R 777 /usr/local/mongodb/logs/shard11.log

chmod -R 777 /usr/local/mongodb/logs/shard12.log

chmod -R 777 /usr/local/mongodb/logs/shard21.log

chmod -R 777 /usr/local/mongodb/logs/shard22.log

chmod -R 777 /usr/local/mongodb/logs/config1.log

chmod -R 777 /usr/local/mongodb/logs/config2.log

chmod -R 777 /usr/local/mongodb/logs/config3.log

4.編輯配置文件

shard配置文件

vim /usr/local/mongodb/bin/shard11.conf

vim /usr/local/mongodb/bin/shard12.conf

相比shard11.conf修改端口號和dbpath和logpath

vim /usr/local/mongodb/bin/shard21.conf

vim /usr/local/mongodb/bin/shard22.conf

相比shard21.conf修改端口號和dbpath和logpath

config配置文件

vim /usr/local/mongodb/bin/config1.conf

vim /usr/local/mongodb/bin/config2.conf

vim /usr/local/mongodb/bin/config3.conf

相比config1.conf修改端口號和dbpath和logpath

router配置文件

vim /usr/local/mongodb/bin/router.conf

5.啓動分片節點和配置節點

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/shard11.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/shard12.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/shard21.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/shard22.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/config1.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/config2.conf

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/config3.conf

6.登錄配置節點構成副本集

/usr/local/mongodb/bin/mongo --port 27111

> cfg={_id:'config',members:[{_id:0,host:'127.0.0.1:27111'},{_id:1,host:'127.0.0.1:27222'},{_id:2,host:'127.0.0.1:27333'}]}

 

7.登錄兩個shard分片節點構成副本集

/usr/local/mongodb/bin/mongo --port 27018

> cfg={_id:'shard1',members:[{_id:0,host:'127.0.0.1:27018'},{_id:1,host:'127.0.0.1:27019'}]}

/usr/local/mongodb/bin/mongo --port 27118

> cfg={_id:'shard1',members:[{_id:0,host:'127.0.0.1:27118'},{_id:1,host:'127.0.0.1:27119'}]}

8.啓動路由節點,並增加分片

/usr/local/mongodb/bin/mongos -f conf/router.conf

mongos> sh.addShard("shard1/127.0.0.1:27018,127.0.0.1:27019")

mongos> sh.addShard("shard1/127.0.0.1:27118,127.0.0.1:27119")

查看數據庫集羣分片狀態

9.在數據庫上啓用分片攻能

MongoDB的分片是基於集合(表)來進行的,要對一個集合分片,就要在其所在的數據庫上啓用支持分片

mongos> sh.enableSharding("kgc”)

對集合進行分片

先建立索引

mongos> db.kgc.createIndex({"_id":1})

對kgc庫下的test集合進行分片

sh.shardCollection("kgc.test",{"id":1})

查看狀態:mongos> sh.status()

10.循環插入數據測試分片

mongos> for(var i=1;i<=10000;i++)db.kgc.insert({age:i,name:"wangmazi",addr:"Beijing",country:"China"})

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章