这是一种将海量数据水平扩展的数据库集群系统,数据分表存储在sharding各个节点上,用户通过简单的配置可以完成一个分布式MongoDB集群。MongoDB的数据分块称为chunk,每个chunk都是Collection中一段连续的数据记录,最大尺寸200MB,超出则生成新的数据块。
一.MongoDB中的自动分片
分片就是将集合分成多个小块。在分片前需要运行一个路由进程,名为mongos。这个进程知道知道数据具体的存放分片所以需要连接mongos来发送请求
二.片键
设置分片时,需要从集合中选择一个键,作为拆分数据的依据,称为片键。
三.建立分片
建立一个片,需要以下3种角色:
- 1.Shard Server
是存储实际数据的分片,每个Shard可以是一个MongoDB实例,也可以是一组复制集。建议是复制集,这样可以很好实现auto-failover
- 2.Config Server
存储所有Shard节点的配置信息、每个Chunk的Shard Key范围、Chunk在各个Shard的分布情况、该集群中所有DB和集合的sharding配置信息
- 3.mongos
客户端接入Shard的一个前端路由,mongos回去访问Config Servers需要到哪个Shard上操作,然后再连接Shard,最后返回给客户端。
1.启动Config Server配置服务器
首先要启动配置服务器和mongos。其中配置服务器必须先启动
2.启动mongos路由
3.启动Shard Server服务器
启动片(Shard Server),是普通的实例
4.配置Sharding
使用shell登录到mongos,添加shard节点,并打开test数据库和personalinfo集合的分片功能:
代码说明:
db.runCommand({addshard:”localhost:20000”}):添加片
db.runCommand({enablesharding:”test”}):设置分片储存的数据库
db.runCommand({shardcollection:”test.personlinfo”,key:{_id:1}}):设置分片的集合名称,必须制定Shard Key,系统会自动创建索引
5.验证Sharding工作
按命令出现上图则表示分片处理成功。
四.管理维护Sharding
1.列出所有Shard Server:
注意一定要在admin下查看才可以
2.查看Sharding信息
printShardingStatus可以查看Sharing的详细信息
3.判断是否是Sharding
>db.runCommand({isdbgird:1})
不再赘述
4.对现有集合进行Sharding
对未分片的test.users进行分片处理:
>use admin
>db.runCommand({shardcollection:"test.users",key:{_id:1}})
5.新增Shard Server
启动一个新的Shard Server进程:
>mongod --shardsvr --port=20002 --dbpath=..... --logpath=.... --directoryperdb
//将新启动的Shard Server加入到集群:
>mongo admin --port=40000
>db.runCommand({addshard:"localhost:20002"})
//可用printShardingStatus()查看
6.移除Shard Server
>db.runCommand({"removeshard":"localhost:20002"})
**小结:
对于写入负载比较大时,片键至关重要,键值变化较大的健作为片键为好**