搭建mongodb分片
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服务一样启动,不需要添加—shardsvr和configsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以)
步骤三:
启动Route Process
/Opt/mongodb/bin/mongos
--port 40000 --configdb localhost:27027 --fork --logpath
/opt/mongodb/data/shard/log/route.log
--chunkSize 1 --启动Route
Server实例
mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB,为了方便测试Sharding效果,我们把chunkSize指定为 1MB。意思是当这个分片中插入的数据大于1M时开始进行数据转移
步骤四:
配置Sharding
接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点
[root@localhost
~]# /Opt/mongo/bin/mongo admin --port 40000 --此操作需要连接admin库
MongoDB
shell version: 2.0.1
connecting
to: 127.0.0.1:40000/admin
>
db.runCommand({ addshard:"localhost:27017" }) --添加 Shard Server
{
"shardAdded" : "shard0000", "ok" : 1 }
>
db.runCommand({ addshard:"localhost:27018" })
{
"shardAdded" : "shard0001", "ok" : 1 }
>
db.runCommand({ enablesharding:"test" }) --设置分片存储的数据库
{
"ok" : 1 }
> db.runCommand({
shardcollection: "test.users", key: { id:1 }}) --设置分片的集合名称。且必须指定Shard Key,系统会自动创建索引
{
"collectionsharded" : "test.users", "ok" : 1 }
注意这里我们要注意片键的选择,选择片键时需要根据具体业务的数据形态来选择,切不可随意选择,实际中尤其不要轻易选择自增_id作为片键,除非你很清楚你这么做的目的,具体原因我不在此分析,根据经验推荐一种较合理的片键方式,“自增字段+查询字段”,没错,片键可以是多个字段的组合。
另外这里说明一点,分片的基本机制:分片总是试图将现有数据均分到所有的分片上。举例说,现在有两个分片,我已经选择了id作为片键,假定插入的id是自增的,如1——10000,则分片后的结果是均分,即1——5000在片A,5000——10000在片B,当然,不一定有这么精确,但却是保证尽量的平均的,以此类推,如果有三块分片,同样均分三等分。
还需要说明的是,一开始插入数据时,数据是只插入到其中一块分片上的,插入完毕后,mongodb内部开始在各片之间进行数据的移动,这个过程可能不是立即的,mongodb足够智能会根据当前负载决定是立即进行移动还是稍后移动。
在插入数据后,立马执行db.users.stats();两次可以验证如上所说。
Ok,简单的分片就是这么搭建的,连接上mongos,然后开始插入数据进行验证吧。
- 大小: 23.6 KB
分享到:
相关推荐
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
搭建Mongodb分片集群的步骤文档,度娘上很多坑,被坑的可以看看,本文档专门埋坑。
mongodb 分片集群搭建过程(无副本),详细操作步骤,linux命令
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)
目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4
(3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由节点服务器(Mongos) - 添加分片集到集群 - 创建数据库...
1、我们prod环境MongoDB的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明 2、各个角色的部署情况 角色 IP 端口 ...
公司单节点升级到分片下,搜索了一圈大多数 MongoDB 集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解 决,以备后查。内容包含复制...
MongoDB搭建分片集群windows端
Win7+MongoDB分片部署方案,讲述在win7或win server环境下搭建mongodb集群的详细方法,内容来自本机实际操作,亲测可用
MongoDB4.2分片及副本集群搭建详细指导手册,详细描述了MongoDB4.2数据库服务器集群的搭建以及副本和分片服务的配置过程及具体操作指令。
mongodb4.22分片及副本集搭建
mongodb实现主从读写分离和数据分片的2中部署方式
mongodb在单机上搭建分片副本集群. 1.安装mongodb。2.准备好配置文件夹。3.创建日志文件。4.启动配置进程(config servers)。5.启动路由进程(mongos)。6.启动分片进程(shard servers)。7.开始设置分片副本集。8.设置...
MongoDB分片集群技术用于解决海量数据的存储问题;而MongoDB副本集是一组维护相同数据集的mongod服务。由此可以看出课程的内容将带领同学们进行MongoDB容灾备份方面的实战,通过MongoDB分片集群技术和MongoDB副本集...
主要介绍了Docker 搭建集群MongoDB的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
mongodb 是最常用的 nodql 数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的 mongodb(分片+副本)集群。
手把手教你搭建mongodb集群--分片
本示例是根据自己学习MongoDb搭建分片式集群原理及应用自己搭建的一个单机版的伪分布式集群,本集群的搭建在window-dos环境下完成,但稍加修改就可以应用于真正的Linux分布式集群中