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