MongoDB架构——sharding分片

来源:互联网 发布:c语言在线编译运行 编辑:程序博客网 时间:2024/05/24 16:14

这是一种将海量数据水平扩展的数据库集群系统,数据分表存储在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"})

**小结:
对于写入负载比较大时,片键至关重要,键值变化较大的健作为片键为好**

0 0