MongoDB【最新版V2.6】- 系列 2: shard 分片的介绍

原创
2014/10/13 13:22
阅读数 41

阅读目的:深刻的了解MongoDB的分片机制

阅读关键: 无比要对MongoDB的与分片 shard有关的概念有清楚的了解。

 1:   Shard介绍

        shard指的是水平方向的多节点的数据分散的存储,说的更简单一点,就是一台机器上可能装不下的数据,我们

装到多台机器上去,比如,我们将全国的省份证的信息,存储到不同的Shard Server中间去,这里的Shard Server,就是每一个分布式的Mongo机器。

        应用的程序可以通过mongos process 登陆到shard集群之中,MongoPress 进行一个路由上的调度。查询,请求的过程也是如此。 面对使用者只有一层一个节点。

    

2: 负载均衡和失效切换

        当某个shard的负载超过一定阙值后,就会自动的重新分发数据,用来保证系统的负载均衡。更简单的话来形容,就是

写入的时候如果向某一台机器上去写,超过了机器自身的能力了,就会重新的分发数据,与之对应的Hbase,通常会出现单台

写入的热点问题,目前对于Mongo的处理机制还未知。


      在一个通常的配置之中,每一个Shard中都该包含了2个以上节点的设备组,设备组的名字通常称为 replica.set,replica.set有N台服务器,在其中有一个为主,其他的为辅助,一旦其中的一个挂掉以后,会自动重启将一台服务器切换为

主服务器。


3:

    Shard架构图:

        


        


4 :shard key 

            要实现分片功能,我们需要指定集合的分片key,相当于数据库的分区字段,

这个分片key通常需要创建一个索引,分片key可以由一个或则多个字段构成


5: chunks

        Chunks是一个集合之中的一段连续的数据,当一个Chunk达到一定大小的时候,就会开始分裂。当一个

shard超过一定量的数据时,chunk会被迁移到其他shard之中,新增shard也会影响chunk的移动,好比你把日志

写入到你的本地文件,规定是60M的一个文件,一旦超过大小,就有新的文件,一旦文件在机器上存放不了了,

那就将这台机器上的文件转移到其他的机器上去~        

  MongoDB的shard,四环一种将海量的数据水平扩展的数据库集群系统,数据库分表存放在Sharding的

各个节点之上。

相对于关系数据库而言,Chunk就是数据库中的一行记录,Collection就是对于与关系数据库中的表。


Shard Server

即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。为了实现每个Shard内部的auto-failover,MongoDB官方建议每个Shard为一组Replica Set。关于如何安装及搭建replica set请参考我的另一篇文章 http://gong1208.iteye.com/blog/1558355

 

Config Server

为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key,例如{age: 1} ,shard key可以决定该条记录属于哪个chunk。Config Servers就是用来存储:所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。


说的更加明白一点,Config Server 保存集群的元数据。

 

Route Process

这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。


route process 说的更明白点就是一个选择器,不断的调度合适的客户端请求,将需求中所请求,所需要的数据,从合适的shard之中返回你所需求的数据。




下面我们在同一台物理机器上构建一个简单的 Sharding Cluster:

架构图如下:

     
















展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部