mongodb分片

来源:互联网 发布:java rsa加密算法 编辑:程序博客网 时间:2024/06/05 09:47


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=trueport=27016dbpath=/data/shards/config/datalogpath=/data/shards/config/log/config.logfork=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:27016port=27017logpath=/data/shards/mongos/log/mongos.logfork=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})
















0 0