MongoDB之Sharding 分片

来源:互联网 发布:简乐互动java游戏 编辑:程序博客网 时间:2024/05/16 07:47
Sharding 分片是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在 sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式 MongoDB 集群。
       MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。
       要构建一个 MongoDB Sharding Cluster,需要三种角色
MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
 

Shard Server :即存储实际数据的分片,每个 Shard 可以是一个 mongod 实例,也可以是一组 mongod 实例 构成的Replica Set。为了实现每个 Shard 内部的 auto-failover,MongoDB 官方建议每个Shard 为一组 Replica Set

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

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

启动 Shard Server

mongod --shardsvr --port 20000 --dbpath /data/shard/s0 --fork –logpath /data/shard/log/s0.log –directoryperdb

mongod --shardsvr --port 20001 --dbpath /data/shard/s1 --fork --logpath /data/shard/log/s1.log –directoryperdb

启动 Config Server

mongod --configsvr --port 30000 --dbpath /data/shard/config --fork --logpath

/data/shard/log/config.log –directoryperdb

3启动 Route Process

Mongos --port 40000 --configdb localhost:30000 --chunkSize 1 --fork --logpath /data/shard/log/route.log

mongos 启动参数中,chunkSize 这一项是用来指定 chunk 的大小的,单位是 MB,默认大小 为 200MB,为了方便测试Sharding 效果,我们把 chunkSize 指定为 1MB

配置 Sharding

使用 MongoDB Shell 登录到 mongos,添加 Shard 节点 

添加 Shard Server

db.runCommand({ addshard:"localhost:20000" })

db.runCommand({ addshard:"localhost:20001" })

设置分片存储的数据库

db.runCommand({ enablesharding:"test" })

设置分片的集合名称 ,且必 须指定 Shard Key,系统会自动创建索引

db.runCommand({ shardcollection: "test.users", key: { _id:1 }})

验证 Sharding 正常工作

已经对 test.users 表进行了分片的设置,下面我们们插入一些数据看一下结果 

MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
 

管理维护 Sharding

6.1 列出所有的 Shard Server

MongoDB之Sharding 分片 - sheperd - 牧羊人的博客




db.runCommand({ listshards: 1 })
 



6.2 查看 Sharding 信息

printShardingStatus() 

MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
MongoDB之Sharding 分片 - sheperd - 牧羊人的博客

6.3 判断是否是 Sharding

MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
 6.4 对现有的表进行 Sharding 
MongoDB之Sharding 分片 - sheperd - 牧羊人的博客
 
使用admin进行分片处理。
db.runCommand({ shardcollection: "test.users_2", key: { _id:1 }})
再查看表的状态
db.users_2.stats()

6.5 新增 Shard Server

use admin
db.runCommand({ addshard:"localhost:20002" })

6.6移除 Shard Server

use admin;

db.runCommand({"removeshard" : "localhost:20002"})


PS: http://sheperd.blog.163.com/blog/static/195255119201191264016847/

0 0