日期:2014-05-16  浏览次数:20386 次

Mongodb数据分片的实现

副本集实现了网站的安全备份和故障的无缝转移,但是并不能实现数据的大容量存储,毕竟物理硬件是有极限的,这个时候就需要做分布式部署,把数据保存到其他机器上。Mongodb的分片技术就很完美的实现了这个需求。

?理解Mongodb的分片技术即Sharding架构

????? 什么是Sharding?说白了就是把海量数据水平扩展的集群系统,数据分表存储在Sharding的各个节点上。

????? Mongodb的数据分开分为chunk,每个chunk都是collection中的一段连续的数据记录,一般为200MB,超出则生成新的数据块。

???? 构建Sharding需要三种角色,

????????? shard服务器(Shard Server):Shard服务器是存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Sets,为了实现每个Shard内部的故障自动切换,MongoDB官方建议每个Shard为一组Replica Sets。

? ? ? ? ? 配置服务器(Config Server):为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个Shard key,决定该条记录属于那个chunk,配置服务器可以存储以下信息:

??????????????????????????????????????????????? 1,所有Shard节点的配置信息

??????????????????????????????????????????????? 2,每个chunk的Shard key范围

??????????????????????????????????????????????? 3,chunk在各Shard的分布情况

??????????????????????????????????????????????? 4,集群中所有DB和collection的Shard配置信息

? ? ? ? ? 路由进程(Route Process):一个前端路由,客户端由此接入,首先询问配置服务器需要到那个Shard上查询或保存记录,然后连接相应Shard执行操作,最后将结果返回客户端。客户端只需 将原本发给mongod的查询活更新请求原封不动的发给路由器进程,而不必关心所操作的记录存储在那个Shard上。

?

?? 构建Sharding

???? 由上面分析可得出,构建一个Sharding至少需要4个mongodb进程,两个Shard Server(做分片),一个Config Server,一个Route Process,然后安排如下

?  ????????? 进程??????????????? 端口???? 文件目录

??????????? Shard Server1??? 2000??? mongodb5

??????????? Shard Server2??? 2001??? mongodb6

??????????? Config Server???? 30000 ?? mongodb7

?????????? Route Process???? 40000 ?? mongodb8

??????

? 现在开始配置:

????? 1,启动Shard Server

这里启动只多了一个命令:shardsvr,用这个命令就表示这个进程是Shard进程。


2,启动Config Server

启动Config Server用的是configsvr命令

?

3,启动Route Process

?

这里设置chunk大小为1M,方便测试分片效果

?

4,配置Sharding