MongoDB实战(11)Sharding 分片(上)
2013-11-24 13:15
281 查看
这是一种将海量的数据水平扩展的数据库集群系统数据分表存储在sharding 的各个节点
上使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群。
MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录通
常最大尺寸是 200MB超出则生成新的数据块。
要构建一个 MongoDB Sharding Cluster需要三种角色
1、 Shard Server
即存储实际数据的分片每个Shard 可以是一个mongod 实例也可以是一组mongod 实例
构成的Replica Set。为了实现每个Shard 内部的auto-failoverMongoDB 官方建议每个Shard
为一组Replica Set。
2、 Config Server
为了将一个特定的collection 存储在多个shard 中需要为该collection 指定一个shard key
例如{age: 1} shard key 可以决定该条记录属于哪个chunk。Config Servers 就是用来存储
所有shard 节点的配置信息、每个chunk 的shard key 范围、chunk 在各shard 的分布情况、
该集群中所有DB 和collection 的sharding 配置信息。
3、Route Process
这是一个前端路由客户端由此接入然后询问Config Servers 需要到哪个Shard 上查询或
保存记录再连接相应的Shard 进行操作最后将结果返回给客户端。客户端只需要将原本
发给mongod 的查询或更新请求原封不动地发给Routing Process而不必关心所操作的记录
存储在哪个Shard 上。
下面我们在同一台物理机器上构建一个简单的 Sharding Cluster
架构图如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/66a0e6c74367cb805636397436f7b472.png)
创建数据目录和日志目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/66befd5efc36c4567af24335d1d24b0f.png)
启动Shard Server 实例1和实例2
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/27de7f51d2d3742ac9cc8d7024045dc2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/2f4428cb8fc493a1627956c890bc4963.png)
启动Config Server
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b2f4c92d5c12e9cb8cf095d62f2aafda.png)
启动Route Process
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/a6eb8daff0174399a19d9f16fc6516c2.png)
mongos 启动参数中chunkSize 这一项是用来指定chunk 的大小的单位是MB默认大小
为200MB为了方便测试Sharding 效果我们把chunkSize 指定为 1MB。
配置Sharding
接下来我们使用MongoDB Shell 登录到mongos添加Shard 节点
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b7ddfd38b5df84780edd72571d0ebdf1.png)
验证Sharding正常工作
我们已经对test.users 表进行了分片的设置下面我们们插入一些数据看一下结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/a027eea4ecb980ba03a7fb767b1b86c9.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b7147b3f0e34b76b0882b203465ffac4.png)
我们看一下磁盘上的物理文件情况
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/6d82490673ea84ba26c126060d5e6f0f.png)
看上述结果表明test.users 集合已经被分片处理了但是通过mongos 路由我们并感觉
不到是数据存放在哪个shard 的chunk 上的这就是MongoDB 用户体验上的一个优势即
对用户是透明的。
本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1330656
上使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群。
MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录通
常最大尺寸是 200MB超出则生成新的数据块。
要构建一个 MongoDB Sharding Cluster需要三种角色
1、 Shard Server
即存储实际数据的分片每个Shard 可以是一个mongod 实例也可以是一组mongod 实例
构成的Replica Set。为了实现每个Shard 内部的auto-failoverMongoDB 官方建议每个Shard
为一组Replica Set。
2、 Config Server
为了将一个特定的collection 存储在多个shard 中需要为该collection 指定一个shard key
例如{age: 1} shard key 可以决定该条记录属于哪个chunk。Config Servers 就是用来存储
所有shard 节点的配置信息、每个chunk 的shard key 范围、chunk 在各shard 的分布情况、
该集群中所有DB 和collection 的sharding 配置信息。
3、Route Process
这是一个前端路由客户端由此接入然后询问Config Servers 需要到哪个Shard 上查询或
保存记录再连接相应的Shard 进行操作最后将结果返回给客户端。客户端只需要将原本
发给mongod 的查询或更新请求原封不动地发给Routing Process而不必关心所操作的记录
存储在哪个Shard 上。
下面我们在同一台物理机器上构建一个简单的 Sharding Cluster
架构图如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/66a0e6c74367cb805636397436f7b472.png)
创建数据目录和日志目录
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/66befd5efc36c4567af24335d1d24b0f.png)
启动Shard Server 实例1和实例2
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/27de7f51d2d3742ac9cc8d7024045dc2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/2f4428cb8fc493a1627956c890bc4963.png)
启动Config Server
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b2f4c92d5c12e9cb8cf095d62f2aafda.png)
启动Route Process
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/a6eb8daff0174399a19d9f16fc6516c2.png)
mongos 启动参数中chunkSize 这一项是用来指定chunk 的大小的单位是MB默认大小
为200MB为了方便测试Sharding 效果我们把chunkSize 指定为 1MB。
配置Sharding
接下来我们使用MongoDB Shell 登录到mongos添加Shard 节点
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b7ddfd38b5df84780edd72571d0ebdf1.png)
验证Sharding正常工作
我们已经对test.users 表进行了分片的设置下面我们们插入一些数据看一下结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/a027eea4ecb980ba03a7fb767b1b86c9.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/b7147b3f0e34b76b0882b203465ffac4.png)
我们看一下磁盘上的物理文件情况
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/6d82490673ea84ba26c126060d5e6f0f.png)
看上述结果表明test.users 集合已经被分片处理了但是通过mongos 路由我们并感觉
不到是数据存放在哪个shard 的chunk 上的这就是MongoDB 用户体验上的一个优势即
对用户是透明的。
本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1330656
相关文章推荐
- MongoDB实战(11)Sharding 分片(下)
- MongoDB实战-分片集群实战
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- mongodb sharding maintenance (分片维护1)
- MongoDB实战全攻略二(分片配置,高可用集群设计实战)
- 一种以ID特征为依据的数据分片(Sharding)策略
- mongodb sharding cluster(分片集群)
- MongoDB学习笔记(五)--复制集 && sharding分片
- MongoDB学习笔记——分片(Sharding)
- MongoDB实战系列之五:mongodb的分片配置
- mycat分片规则之分片枚举(sharding-by-intinfile)
- 一种以ID特征为依据的数据分片(Sharding)策略
- MongoDB实战-操作分片集群,向分片集群中写入数据
- 【Mongodb】 Sharding Replica Sets 分片集群生产环境安装与介绍!
- 数据库分片(Sharding)与分区(Partition)的区别
- 利用Mongodb的复制集搭建高可用分片,Replica Sets + Sharding的搭建过程
- 一种以ID特征为依据的数据分片(Sharding)策略
- MongoDB实战系列之五:mongodb的分片配置
- mongodb sharding cluster(分片集群)
- mycat分片规则之范围约定规则(auto-sharding-long)