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

【转】搭建mongodb分片(分片key选择)

Sharding分片概念

这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB集群。

MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。

要构建一个 MongoDB Sharding Cluster,需要三种角色:

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配置信息。

?

Route Process

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

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

架构图如下:

?

  • ? ? ? Shard Server 1:27017
  • ? ? ? Shard Server 2:27018
  • ? ? ? Config Server :27027
  • ? ? ? Route Process:40000

?

?

实施步骤

步骤一:

启动Shard Server

mkdir -p /opt/mongodb/data/shard/s0--创建数据目录

mkdir -p/opt/mongodb/data/shard/s1

mkdir -p/opt/mongodb/data/shard/log --创建日志目录

?

/Opt/mongodb/bin/mongod--port 27017 --dbpath /opt/mongodb/data/shard/s0 --fork --logpath/opt/mongodb/data/shard/log/s0.log --启动Shard Server实例1

?

/Opt/mongodb/bin/mongod--port 27018 --dbpath /opt/mongodb/data/shard/s1 --fork --logpath/opt/mongodb/data/shard/log/s1.log --启动Shard Server实例2

步骤二:

启动Config Server

mkdir -p/opt/mongodb/data/shard/config --创建数据目录

/Opt/mongodb/bin/mongod --port 27027 –dbpath/opt/mongodb/data/shard/config --fork????????--logpath /opt/mongodb/data/shard/log/config.log --启动Config Server实例

(注意,这里我们完全可以像启动普通mongodb服务一样启动,不需要添加—shardsvrconfigsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以)

?