本篇讲述MongoDB的 Sharding Cluster 的详细步骤,按着做理论上不会有什么错误。

关于说着里边的参数、变量、和设置,没有用到很多,只用到了关键的一些,其他的可以参考MongoDB的官方文档。

后者自己google,baidu,这里不想多讲。同样废话不多说,直接上菜。

哦,对了Sharding Cluster里边一定要弄明白的三个概念, DataNode, ConfigServer, Router。如图:

好了, 配置正式开始:

1, 配置Shard Data Node, 即我们刚才说的 Replica Set

1)自己编写 mongo_sharding_dataNode_1.conf

文件的内容:

bind_ip=localhost
port=27022
dbpath=D:\MongoDB\data\dbnode1
logpath=D:\MongoDB\log\node1.log
logappend=true
replSet=testsh1
shardsvr=true

2)同样的文件,改掉bind_ip,port,dbpath,logpath的值,做成mongo_sharding_dataNode_2.conf

这样存数据的两个库就有个一个primary,一个secondary。

3)在Replica Set中还要有一个arbitrary,所以接着编写第三个文件:mongo_sharding_dataNode_arbit.conf

内容同上,只是bind_ip,port,dbpath,logpath不一样而已。

上边的配置项,和参数有不清楚的,或者想加入更多参数的,最好使用 mongod -h 去查看一下, 里边解释的很清楚。

4)三个文件编号之后使用 mongod.exe -f  mongo_sharding_dataNode_2.conf 启动三个mongod

例如,我的是:

D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_sharding_dataNode_1.conf

5)三个Server(三个mongod)都启起来之后,把这个三个server配置成一个 Replica Set 即让他们成为我们的一个shard data node.

随便登录进这个三个server中的一个, 比如我登录的是27022,

mongo.exe localhost:27022

use admin

cfg = {_id:'testsh1',members:[{_id:0,host:'localhost:27022',priority:2},{_id:1,host:'localhost:27023',priority:1},{_id:2,host:'localhost:27024',arbiterOnly:true}]}
rs.initiate(cfg)

通过以上命令,把这三个server配置成一个Replica Set, 即一个Shard Data Node,

现在我们就已经有个了一个 Shard Data Node 了。

如果中间出了错误, 不要害怕,先可以找找有没有补救的办法,比如rs.remove("localhist:27023")    rs.reconfig(cfg)等等,这样可以学习的耕读。

最不怕的就是毁掉重来嘛, 不过这么弄自己练习可以, 公司环境或生产环境,要千万千万万万万万小心的!!

2,配置ConfigServer

1)自己编写 conf 文件 mongo_configserver_1.conf 内容:

bind_ip=localhost
port=27019
dbpath=D:\MongoDB\data\confserver1
logpath=D:\MongoDB\log\confserver1.log
logappend=true
configsvr=true

注意这里的 configsvr=true.

同样的方式编写另外两个或多个 conf 文件。

2)启动 Config Server

mongod.exe -f mongo_configserver_1.conf

例如,我的启动方式:

D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_configserver_2.conf

现在 Config Server 有了, Shard DataNode 有了,该有的准备都有了。

我们最终的要角色: mongos Router 该上场了。

3,配置Mongos

同样,我们编写mongos的配置文件mongos.conf

bind_ip=localhost
port=27030
#dbpath=D:\MongoDB\data\db  ####### 注意一下,它不需要dbpath, 可以查看 mongos -h 查看mongos的参数列表
logpath=D:\MongoDB\log\mongos.log
logappend=true
configdb=localhost:27019,localhost:27020,localhost:27021    ####看一下这个三个ip:port用逗号分隔,这是三个 ConfigServer的地址。

好了全部的静态,需要写到文件里的配置都配置完了, 启动 mongos

mongos.exe -f mongos.conf

例如,我的启动是:

D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongos.exe -f ..\conf\mongos.conf

如果启动mongos没错的话,你应该能进入mongos

使用命令:mongo.exe localhost:27030  进入mongos,

进入mongos 后的提示应该是: mongos> 这样子的, 如图:

4,配置 Sharding

1)加入shard

使用命令:mongos> sh.addShard("testsh1/localhost:27022")

还记得前边那个testsh1吧, testsh1表示Replica Set的名字,当把主节点添加到shard以后,会自动找到set里的主,备,决策节点。

所以上边的命令就是:把testsh1这个Replica Set中的主节点加入到Shard中,让shard自己找备节点和决策节点。

可以使用命令:mongos> db.runCommand({listshards:1}); 来看一下添加的shards, 运行结果应该类似:

mongos>
mongos> db.runCommand({listshards:1});
{
"shards" : [
{
"_id" : "testsh1",
"host" : "testsh1/localhost:27022,localhost:27024"
}
],
"ok" : 1
}
mongos>
mongos>

2)激活数据库分片,使用命令:

mongos>
mongos>
mongos> db.runCommand({enablesharding:"test-db"});
{ "ok" : 1 }
mongos>

激活 test-db 的数据库分片。

通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard。

一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作。

3)激活collection分片,如图说的清楚,明白:

使用命令:mongos> db.runCommand({shardcollection:'test-db.usertest',key:{_id:1}});

表示激活test-db这个数据库的中 usertest 表的分片,使用 key是有索引的_id 这个列。

设置完了,可以切换到 test-db下,看看usertest表的状态。

使用命令:

use test-db;

db.usertest.stats()

由于内容太多,不在这里列出了。

文章到这里所有的配置已经结果, 这个Mongo Shard Cluster 已经配置完成了,

可以使用 mongos 来进行, 操作了。 比如添加,删除,查看等等。

mongos> user test-db;

mongos> db.usertest.save({name:'xiaobing'});

mongos> db.usertest.find();

等等一系列的操作。

ok, let's call it a day.

没完没了了,你还。

哈哈, 我很想知道如果那个mongos挂了怎么办?嗯,下图给了一个解决方案, 为了防止单点故障,一个mongos挂了怎么办?

看图, 不多说了:

知道怎么弄了吧, 这样应该没有单点故障了吧,完美,perfect。嘿嘿,嘿嘿

MongoDB sharding cluster Step by Step的更多相关文章

  1. 【MangoDB分片】配置mongodb分片群集(sharding cluster)

    配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monod ...

  2. enode框架step by step之消息队列的设计思路

    enode框架step by step之消息队列的设计思路 enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by ste ...

  3. enode框架step by step之Staged event-driven architecture思想的运用

    enode框架step by step之Staged event-driven architecture思想的运用 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件 ...

  4. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

  5. Tomcat Clustering - A Step By Step Guide --转载

    Tomcat Clustering - A Step By Step Guide Apache Tomcat is a great performer on its own, but if you'r ...

  6. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问

    上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 图片验证码的识别” ...

  7. enode框架step by step之框架的物理部署思路

    enode框架step by step之框架的物理部署思路   enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by s ...

  8. Step by Step Recipe for Securing Kafka with Kerberos

    Short Description: Step by Step Recipe for Securing Kafka with Kerberos. Article I found it is a lit ...

  9. MongoDB Sharding分片配置

    Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...

随机推荐

  1. CustomEditor 自定义预览窗

    using UnityEngine; using System.Collections; public class MyTextureView : MonoBehaviour { public Tex ...

  2. 部署图 Deployment Diagram

    UML部署图描述了一个运行时的硬件结点,以及在这些结点上运行的软件组件的静态视图. 部署图显示了系统的硬件,安装在硬件上的软件,以及用于连接异构的机器之间的中间件. 下面这张图介绍了部署图的基本内容: ...

  3. cocos2dx中的格子地图TileMap

    格子地图的优点: a.节省内存,我们知道对于一款游戏来说,如果以图片来作为地图的话,对于神庙逃亡,魂斗罗这样的场景很多,地图很长的游戏显然不现实,因为图片很占内存,但是这些游戏的地图有一个特点就是:重 ...

  4. VBS基础篇 - 变量

    VBScript只有一种数据类型 —— Variant,它是根据上下文来判断是数字还是字符串.因为Variant是VBScript中唯一的数据类型,所以它也是VBScript中所有函数的返回值的数据类 ...

  5. 修复jquery.treeview的增加子节点的方法的bug

    1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...

  6. ffmpeg 打开视频流太慢(下)

    前面的博文中已经交代过,ffmpeg打开视频慢主要是因为av_find_stream_info 耗时久.下面给出重写查找音视频stream info的一段代码,用来替代av_find_stream_i ...

  7. vi之跳到指定行

    vi里怎样跳转到某一指定行 输入 :行号 :$跳到最后一行 gg跳到第一行.

  8. 【HDOJ】【4405】Aeroplane chess飞行棋

    概率DP/数学期望 kuangbin总结中的第4题 啊还是求期望嘛……(话说Aeroplane chess这个翻译怎么有种chinglish的赶脚……) 好像有点感觉了…… 首先不考虑直飞的情况: f ...

  9. 使用JAVA反射初始化数组(转)

    在做JSON解析时,遇到了在不知道数组类型的前期下,需要转化为具体类型数组的问题.可以使用JAVA的反射来做. JSONArray jsonArray = (JSONArray) entry.getV ...

  10. JsRender系列demo(5) for else

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...