1、什么是分片?
将数据进行拆分,将数据水平的分散在不同的服务器上
2、为什么要进行分片?
架构上:读写均衡、去中心化
硬件:内存,硬盘容量限制
3、mongodb分片的目的
改善单台机器数据的存储及数据吞吐性能。提高在大量数据下随机访问性能。
4、分片、副本集群对比
分片:提升并发性能、水平化、数据打散分布、维护成本高
副本集:数据冗余、提升读性能、中心化、数据镜像、相对比较容易
分片--成员节点介绍:
shared节点:存储数据的节点(单个mongodb或者副本集)
config server:存储元数据,为mongos服务,将数据路由到shard上
mongos:接收前端请求,进行对应消息路由
组合图
分片部署场景
场景一
场景二
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以场景一为例搭建
IP:192.168.1.239、192.168.1.219、192.168.1.209
1、先在ip:192.168.1.239上创建好目录
mkdir /data/shards
在shards目录中创建
config:存放config server的log、data、conf
mkdir /data/shards/config
mkdir /data/shards/config/log
mkdir /data/shards/config/data
mkdir /data/shards/config/conf
mongos:存放mongos的log、conf
mkdir /data/shards/mongos
mkdir /data/shards/mongos/log
mkdir /data/shards/mongos/conf
replicatset:存放mongos副本集
按端口号创建目录,并把mongodb的bin复制到该目录下
并在27018、27019、27020目录中分别创建
用于存放配置文件、数据目录、日志目录
在shards目录下也将mongodb的bin复制一份,便于mongos和config server的启动
将在192.168.1.239机器上的shards目录分别复制到192.168.1.219和192.168.1.209上,使用scp命令(略)
2、配置config server
先在192.168.1.239上配置
在config/conf中创建config.conf文件
内容如下:
configsvr=true
port=27016
dbpath=/data/shards/config/data
logpath=/data/shards/config/log/config.log
fork=true
启动config
在shards目录中
./bin/mongod -f config/conf/config.conf
分别在另外两台机器重复以上配置,config.conf配置内容一样
3、配置mongos
先在192.168.1.239上配置
在mongos/conf中创建mongos.conf文件
内容如下:
configdb=192.168.1.239:27016,192.168.1.209:27016,192.168.1.219:27016
port=27017
logpath=/data/shards/mongos/log/mongos.log
fork=true
configdb:是config server的ip和port
在shards目录中
./bin/mongos -f mongos/conf/mongos.conf
分别在另外两台机器重复以上配置,mongos.conf内容一样
mongos如果无法启动,原因可能:
1、服务器之间的时间不同步,相差太远
2、防火墙拦截,需要开启相应的端口,或者关闭防火墙
4、配置副本集
参考文章:http://blog.csdn.net/u011186019/article/details/51630494
5、登录mongos加入分片服务器
在shards目录下是bin目录中的mongo
./bin/mongo
切换到admin库
use admin
使用sh.addShard添加分片
sh.addShard("副本集名称/ip:port,ip:port")
例如:sh.addShard("shard01/192.168.1.239:27018,192.168.1.239:27019,192.168.1.239:27020")
6、设置分片库
使用sh.enableSharding(dbname)
例如:sh.enableSharding("shard_test")
7、设置分片集合
sh.shardCollection(fullName,key,unique)
例如:sh.shardCollection("shard_test.users",{userid:1})