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"})